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

118 lines
2.3 KiB
Java
Raw Normal View History

2014-07-25 23:33:15 +02:00
package org.hwo.bitfields.ui;
import javax.swing.JPanel;
2016-09-06 11:52:10 +02:00
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
2014-07-25 23:33:15 +02:00
import java.awt.FlowLayout;
2016-09-06 11:52:10 +02:00
import java.util.LinkedList;
import java.util.List;
2014-07-25 23:33:15 +02:00
import javax.swing.BoxLayout;
import javax.swing.JLabel;
import org.hwo.bitfields.BitField;
import org.hwo.bitfields.Field;
2016-09-06 11:52:10 +02:00
public class BitFieldEditor extends JPanel implements ChangeListener {
2014-07-25 23:33:15 +02:00
private BitField bitField;
private FieldControl[] controls;
2016-09-06 11:52:10 +02:00
private List<ChangeListener> changeListeners;
2014-07-25 23:33:15 +02:00
public BitFieldEditor() {
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
2016-09-06 11:52:10 +02:00
this.changeListeners = new LinkedList<ChangeListener>();
}
public void addChangeListener(ChangeListener listener){
this.changeListeners.add(listener);
}
public void removeChangeListener(ChangeListener listener){
this.changeListeners.remove(listener);
2014-07-25 23:33:15 +02:00
}
2016-09-06 11:52:10 +02:00
public void fireStateChanged(){
ChangeEvent ce = new ChangeEvent(this);
for (ChangeListener listener: this.changeListeners){
listener.stateChanged(ce);
}
}
2014-07-25 23:33:15 +02:00
public Integer getIntValue() {
2014-07-26 01:34:19 +02:00
int value = 0;
for (FieldControl fc:controls)
{
value = fc.getValue(value);
}
return value;
2014-07-25 23:33:15 +02:00
}
public void setIntValue(Integer intValue) {
2014-07-26 01:34:19 +02:00
for (FieldControl fc:controls)
{
fc.setValue(intValue);
}
2014-07-25 23:33:15 +02:00
}
2016-09-06 11:52:10 +02:00
@Override
public void stateChanged(ChangeEvent e) {
fireStateChanged();
}
2014-07-25 23:33:15 +02:00
public BitField getBitField() {
return bitField;
}
public void setBitField(BitField bitField) {
2016-09-06 11:52:10 +02:00
if (this.bitField != null){
this.bitField.removeChangeListener(this);
}
2014-07-25 23:33:15 +02:00
this.bitField = bitField;
2016-09-06 11:52:10 +02:00
if (this.bitField != null){
this.bitField.addChangeListener(this);
}
2014-07-25 23:33:15 +02:00
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)
{
2014-07-26 01:34:19 +02:00
return controls[0].requestFocusInWindow();
2014-07-25 23:33:15 +02:00
}
return false;
}
}