forked from LupusNobilis/java-org.hwo
bitfields: update
parent
7558f63277
commit
830fb39115
|
@ -1,15 +1,20 @@
|
|||
package org.hwo.bitfields;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
public class BitField {
|
||||
private List<Field> fields;
|
||||
|
||||
private List<ChangeListener> changeListeners;
|
||||
|
||||
public BitField()
|
||||
{
|
||||
this.fields = new ArrayList<Field>();
|
||||
|
@ -19,6 +24,8 @@ public class BitField {
|
|||
public BitField(Element fieldsNode)
|
||||
{
|
||||
this.fields = new ArrayList<Field>();
|
||||
this.initialize();
|
||||
this.clear();
|
||||
|
||||
if (fieldsNode != null)
|
||||
{
|
||||
|
@ -28,10 +35,26 @@ public class BitField {
|
|||
|
||||
private void initialize()
|
||||
{
|
||||
for (int i=0;i<32;i++)
|
||||
this.changeListeners = new LinkedList<ChangeListener>();
|
||||
|
||||
for (int i=0;i<4;i++)
|
||||
this.fields.add(new Field(this, i, 1));
|
||||
}
|
||||
|
||||
|
||||
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 void fieldsFromXML(Node fieldsNode){
|
||||
NodeList fields = ((Element)fieldsNode).getElementsByTagName("Field");
|
||||
for (int i=0;i<fields.getLength();i++)
|
||||
|
@ -74,6 +97,25 @@ public class BitField {
|
|||
return this.fields.toArray(new Field[0]);
|
||||
}
|
||||
|
||||
public void clear(){
|
||||
this.fields.clear();
|
||||
}
|
||||
|
||||
public void addField(Field field){
|
||||
this.fields.add(field);
|
||||
}
|
||||
|
||||
public void removeField(Field field){
|
||||
this.fields.remove(field);
|
||||
}
|
||||
|
||||
public void initialize32Bit(){
|
||||
this.clear();
|
||||
|
||||
for (int i=0;i<4;i++)
|
||||
this.fields.add(new Field(this, i, 1));
|
||||
}
|
||||
|
||||
|
||||
/* public synchronized void setValue(int value,int start,int len)
|
||||
{
|
||||
|
|
|
@ -47,7 +47,7 @@ public class Field {
|
|||
int mask = ((-1 >>> (Integer.SIZE - len))<<start);
|
||||
int value = srcValue & ~mask;
|
||||
value |= (fieldValue << start) & mask;
|
||||
System.err.println(String.format("BF: 0x%08x (%d:%d = 0x%08x) = 0x%08x",srcValue,start,len,mask,value));
|
||||
//System.err.println(String.format("BF: 0x%08x (%d:%d = 0x%08x) = 0x%08x",srcValue,start,len,mask,value));
|
||||
return value;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,12 @@
|
|||
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;
|
||||
|
@ -10,15 +14,31 @@ import javax.swing.JLabel;
|
|||
import org.hwo.bitfields.BitField;
|
||||
import org.hwo.bitfields.Field;
|
||||
|
||||
public class BitFieldEditor extends JPanel {
|
||||
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)
|
||||
|
@ -35,13 +55,28 @@ public class BitFieldEditor extends JPanel {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
@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();
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@ package org.hwo.bitfields.ui;
|
|||
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
|
||||
import org.hwo.bitfields.Field;
|
||||
|
||||
|
@ -12,7 +14,16 @@ public class BoolFieldEditor extends FieldControl {
|
|||
|
||||
public BoolFieldEditor(Field field)
|
||||
{
|
||||
final Field f = field;
|
||||
|
||||
checkbox = new JCheckBox();
|
||||
checkbox.addChangeListener(new ChangeListener() {
|
||||
|
||||
@Override
|
||||
public void stateChanged(ChangeEvent e) {
|
||||
f.getBitField().fireStateChanged();
|
||||
}
|
||||
});
|
||||
setField(field);
|
||||
}
|
||||
|
||||
|
@ -24,6 +35,7 @@ public class BoolFieldEditor extends FieldControl {
|
|||
@Override
|
||||
void setValue(Integer intValue) {
|
||||
checkbox.setSelected(field.getValue(intValue) != 0);
|
||||
//field.getBitField().fireStateChanged();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue