forked from LupusNobilis/java-org.hwo
115 lines
2.3 KiB
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;
|
|
}
|
|
|
|
}
|