package org.hwo.bitfields.ui; import javax.swing.JPanel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.FlowLayout; import java.util.LinkedList; import java.util.List; import javax.swing.BoxLayout; import javax.swing.JLabel; import org.hwo.bitfields.BitField; import org.hwo.bitfields.Field; public class BitFieldEditor extends JPanel implements ChangeListener { private BitField bitField; private FieldControl[] controls; private List changeListeners; public BitFieldEditor() { setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); this.changeListeners = new LinkedList(); } public void addChangeListener(ChangeListener listener){ this.changeListeners.add(listener); } public void removeChangeListener(ChangeListener listener){ this.changeListeners.remove(listener); } public void fireStateChanged(){ ChangeEvent ce = new ChangeEvent(this); for (ChangeListener listener: this.changeListeners){ listener.stateChanged(ce); } } public Integer getIntValue() { int value = 0; for (FieldControl fc:controls) { value = fc.getValue(value); } return value; } public void setIntValue(Integer intValue) { for (FieldControl fc:controls) { fc.setValue(intValue); } } @Override public void stateChanged(ChangeEvent e) { fireStateChanged(); } public BitField getBitField() { return bitField; } public void setBitField(BitField bitField) { if (this.bitField != null){ this.bitField.removeChangeListener(this); } this.bitField = bitField; if (this.bitField != null){ this.bitField.addChangeListener(this); } initializeView(); } private void initializeView() { if (controls != null) { for (FieldControl fc: controls) { remove(fc.getEditorComponent()); } } Field[] fields = bitField.getFields(); controls = new FieldControl[fields.length]; for (int i=0;i