/*
*
* Copyright 2014 http://Bither.net
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* /
*/
package net.bither.viewsystem.froms;
import net.bither.BitherSetting;
import net.bither.bitherj.core.Address;
import net.bither.fonts.AwesomeIcon;
import net.bither.languages.MessageKey;
import net.bither.model.AddressTableModel;
import net.bither.utils.LocaliserUtils;
import net.bither.viewsystem.base.FontSizer;
import net.bither.viewsystem.base.Panels;
import net.bither.viewsystem.base.renderer.AddressImage;
import net.bither.viewsystem.base.renderer.SelectAddressImage;
import net.bither.viewsystem.components.ScrollBarUIDecorator;
import net.miginfocom.swing.MigLayout;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableColumn;
import java.awt.*;
import java.util.List;
public class SelectAddressPanel extends WizardPanel {
public interface SelectAddressListener {
void selectAddress(Address address);
}
private JTable table;
private AddressTableModel addressTableModel;
private String defaultAddress;
private java.util.List<Address> addressList;
private SelectAddressListener selectAddressListener;
public SelectAddressPanel(SelectAddressListener selectAddressListener, List<Address> addressList, String defaultAddress) {
super(MessageKey.SELECT_SIGN_ADDRESS, AwesomeIcon.FA_LIST);
this.defaultAddress = defaultAddress;
this.addressList = addressList;
this.selectAddressListener = selectAddressListener;
}
@Override
public void initialiseContent(JPanel panel) {
panel.setLayout(new MigLayout(
Panels.migXYLayout(),
"10[]10", // Column constraints
"10[]10" // Row constraints
));
addressTableModel = new AddressTableModel(this.addressList, this.defaultAddress);
table = new JTable(addressTableModel);
FontMetrics fontMetrics = panel.getFontMetrics(FontSizer.INSTANCE.getAdjustedDefaultFont());
TableColumn tableColumn = table.getColumnModel().getColumn(0);
int statusWidth = fontMetrics.stringWidth(defaultAddress);
tableColumn.setPreferredWidth(statusWidth + BitherSetting.STATUS_WIDTH_DELTA * 2);
table.getColumnModel().getColumn(1).setCellRenderer(new AddressImage());
table.getColumnModel().getColumn(2).setCellRenderer(new SelectAddressImage());
// tableColumn = table.getColumnModel().getColumn(1);
// int tiemW = fontMetrics.stringWidth(String.valueOf(false));
// tableColumn.setPreferredWidth(tiemW + BitherSetting.STATUS_WIDTH_DELTA);
// tableColumn = table.getColumnModel().getColumn(2);
// int tiemH = fontMetrics.stringWidth(String.valueOf(false));
// tableColumn.setPreferredWidth(tiemH + BitherSetting.STATUS_WIDTH_DELTA);
table.setOpaque(true);
table.setAutoCreateColumnsFromModel(true);
table.setAutoResizeMode(0);
table.setAutoscrolls(true);
table.setBorder(BorderFactory.createEmptyBorder());
table.setComponentOrientation(ComponentOrientation.getOrientation(LocaliserUtils.getLocale()));
table.setRowHeight(Math.max(BitherSetting.MINIMUM_ICON_HEIGHT, panel.getFontMetrics(FontSizer.INSTANCE.getAdjustedDefaultFont()).getHeight()) + BitherSetting.HEIGHT_DELTA);
final JScrollPane jScrollPane = new JScrollPane();
jScrollPane.setViewportView(table);
ScrollBarUIDecorator.apply(jScrollPane, false);
panel.add(jScrollPane, "push,align center,grow");
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
ListSelectionModel lsm = (ListSelectionModel) e.getSource();
if (!lsm.isSelectionEmpty()) {
int minIndex = lsm.getMinSelectionIndex();
int maxIndex = lsm.getMaxSelectionIndex();
for (int i = minIndex; i <= maxIndex; i++) {
if (lsm.isSelectedIndex(i)) {
if (selectAddressListener != null) {
closePanel();
Address selectAddress = addressList.get(i);
selectAddressListener.selectAddress(selectAddress);
}
break;
}
}
}
}
});
}
}