package org.hwo.ui.servicelink.register; import java.awt.Component; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.math.BigInteger; import java.util.Hashtable; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JTextField; import org.hwo.servicelink.ServiceLink; import org.hwo.ui.JComboBoxEx; import java.awt.GridBagLayout; import java.awt.GridBagConstraints; public class IndexedListRegisterEditor extends JPanel implements ServiceRegisterControl { public static class IndexedItem { private Integer index; private String label; public IndexedItem(Integer index,String label) { this.index = index; this.label = label; } @Override public String toString() { return String.format("%d: %s", this.index, this.label); } public Integer getIndex() { return index; } public void setIndex(Integer index) { this.index = index; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } }; private ServiceRegister serviceRegister; private JComboBoxEx cbValue; private IndexedItem[] items; public IndexedListRegisterEditor() { super(); GridBagLayout gridBagLayout = new GridBagLayout(); gridBagLayout.columnWidths = new int[]{0, 0}; gridBagLayout.rowHeights = new int[]{0, 0}; gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE}; gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE}; setLayout(gridBagLayout); cbValue = new JComboBoxEx(); GridBagConstraints gbc_tfValue = new GridBagConstraints(); gbc_tfValue.fill = GridBagConstraints.HORIZONTAL; gbc_tfValue.gridx = 0; gbc_tfValue.gridy = 0; add(cbValue, gbc_tfValue); } @Override public Component getComponent() { return this; } @Override public void setServiceRegister(ServiceRegister serviceRegister) { this.serviceRegister = serviceRegister; } @Override public void writeValue() { this.serviceRegister.writeIntegerValue(((IndexedItem)cbValue.getSelectedItem()).getIndex()); } @Override public void readValue() { Integer i = this.serviceRegister.readIntegerValue(); if ( i == null ) i = 0; for (IndexedItem item : items) { if (item.getIndex().equals(i)) { cbValue.setSelectedItem(item); return; } } IndexedItem item = new IndexedItem(i, "Unkown Index"); cbValue.setSelectedItem(item); } @Override public boolean requestFocusInWindow() { return cbValue.requestFocusInWindow(); } public IndexedItem[] getItems() { return items; } public void setItems(IndexedItem[] items) { this.items = items; cbValue.removeAllItems(); for (IndexedItem item: items){ cbValue.addItem(item); } } }