BitField: Update
parent
9f8fba4f23
commit
469861ed44
|
@ -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()
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -46,11 +46,12 @@ public class BitFieldServiceRegister extends ServiceRegister {
|
|||
|
||||
@Override
|
||||
public void acceptEditorValue() {
|
||||
writeIntegerValue( editor.getIntValue() );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateEditorValue() {
|
||||
|
||||
editor.setIntValue( readIntegerValue() );
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue