java-org.hwo/src/org/hwo/bitfields/ui/BitFieldEditor.java

115 lines
2.3 KiB
Java

package org.hwo.bitfields.ui;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.util.LinkedList;
import java.util.List;
import javax.swing.BoxLayout;
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<ChangeListener> changeListeners;
public BitFieldEditor() {
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
this.changeListeners = new LinkedList<ChangeListener>();
}
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<fields.length;i++)
{
if (fields[i].getLength() == 1)
controls[i] = new BoolFieldEditor(fields[i]);
else
controls[i] = new IntFieldEditor(fields[i]);
add(controls[i].getEditorComponent());
}
}
@Override
public boolean requestFocusInWindow() {
if ((controls != null) && controls.length != 0)
{
return controls[0].requestFocusInWindow();
}
return false;
}
}