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