BitField: Update

thobaben_serialize
Harald Wolff 2014-07-26 01:34:19 +02:00
parent 9f8fba4f23
commit 469861ed44
7 changed files with 62 additions and 20 deletions

View File

@ -36,11 +36,19 @@ public class Field {
public synchronized int getValue(int srcValue)
{
return (srcValue >> start) & (-1 >> (Integer.SIZE - len));
int mask = (-1 >>> (Integer.SIZE - len));
int val = (srcValue >> start) & mask;
//System.err.println(String.format("BF: 0x%08x (%d:%d = 0x%08x) = 0x%08x",srcValue,start,len,mask,val));
return val;
}
public void setValue(int value)
public int setValue(int srcValue,int fieldValue)
{
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));
return value;
}
public int getStart()

View File

@ -11,8 +11,6 @@ import org.hwo.bitfields.BitField;
import org.hwo.bitfields.Field;
public class BitFieldEditor extends JPanel {
private Integer intValue;
private BitField bitField;
private FieldControl[] controls;
@ -22,11 +20,20 @@ public class BitFieldEditor extends JPanel {
}
public Integer getIntValue() {
return intValue;
int value = 0;
for (FieldControl fc:controls)
{
value = fc.getValue(value);
}
return value;
}
public void setIntValue(Integer intValue) {
this.intValue = intValue;
for (FieldControl fc:controls)
{
fc.setValue(intValue);
}
}
public BitField getBitField() {
@ -67,7 +74,7 @@ public class BitFieldEditor extends JPanel {
public boolean requestFocusInWindow() {
if ((controls != null) && controls.length != 0)
{
return controls[0].getEditorComponent().requestFocusInWindow();
return controls[0].requestFocusInWindow();
}
return false;
}

View File

@ -23,12 +23,12 @@ public class BoolFieldEditor extends FieldControl {
@Override
void setValue(Integer intValue) {
checkbox.setSelected(intValue != 0);
checkbox.setSelected(field.getValue(intValue) != 0);
}
@Override
Integer getValue() {
return checkbox.isSelected() ? 1 : 0;
Integer getValue(Integer srcValue) {
return field.setValue(srcValue,checkbox.isSelected() ? 1 : 0);
}
public Field getField() {
@ -41,4 +41,9 @@ public class BoolFieldEditor extends FieldControl {
checkbox.setText(field.getLabel());
}
@Override
boolean requestFocusInWindow() {
return checkbox.requestFocusInWindow();
}
}

View File

@ -7,7 +7,8 @@ public abstract class FieldControl {
abstract JComponent getEditorComponent();
abstract void setValue(Integer intValue);
abstract Integer getValue();
abstract Integer getValue(Integer srcValue);
abstract boolean requestFocusInWindow();
}

View File

@ -1,10 +1,14 @@
package org.hwo.bitfields.ui;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
import org.hwo.bitfields.Field;
@ -13,20 +17,33 @@ public class IntFieldEditor extends FieldControl {
JPanel editorPanel;
JLabel label;
JSpinner spinner;
JTextField editor;
Field field;
public IntFieldEditor(Field field)
{
this.field = field;
editorPanel = new JPanel();
editorPanel.setLayout(new BoxLayout(editorPanel, BoxLayout.X_AXIS));
label = new JLabel();
label.setText(field.getLabel());
spinner = new JSpinner(new SpinnerNumberModel(0, 0, Integer.MAX_VALUE, 1));
editor = new JTextField();
editor.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) {
}
@Override
public void focusGained(FocusEvent e) {
editor.selectAll();
}
});
editorPanel.add(label);
editorPanel.add(spinner);
editorPanel.add(editor);
}
@Override
@ -36,12 +53,17 @@ public class IntFieldEditor extends FieldControl {
@Override
void setValue(Integer intValue) {
spinner.setValue(intValue);
editor.setText(Integer.toString(field.getValue(intValue)));
}
@Override
Integer getValue() {
return (Integer)spinner.getValue();
Integer getValue(Integer srcValue) {
return field.setValue(srcValue, Integer.decode(editor.getText()));
};
@Override
boolean requestFocusInWindow() {
return editor.requestFocusInWindow();
}
}

View File

@ -46,11 +46,12 @@ public class BitFieldServiceRegister extends ServiceRegister {
@Override
public void acceptEditorValue() {
writeIntegerValue( editor.getIntValue() );
}
@Override
public void updateEditorValue() {
editor.setIntValue( readIntegerValue() );
}
}

View File

@ -10,8 +10,6 @@ import javax.swing.JCheckBox;
import javax.swing.JPanel;
import org.hwo.io.servicelink.ServiceLink;
import org.hwo.io.servicelink.ServiceLink.ServiceNode;
import org.hwo.io.servicelink.ServiceLink.ServiceNode.ServiceNodeRegister;
import org.hwo.io.servicelink.register.ServiceRegister;
import org.hwo.io.servicelink.register.ServiceRegisterControl;