public abstract class NumberCellEditingSupport extends EditingSupport
{
private final TableViewer viewer;
- private final CellEditor editor;
+ protected final CellEditor editor;
private final DisplaySettings displaySettings;
- public NumberCellEditingSupport(TableViewer viewer, DisplaySettings displaySettings)
+ public NumberCellEditingSupport(TableViewer viewer, DisplaySettings displaySettings, boolean allowX)
{
super(viewer);
this.viewer = viewer;
this.displaySettings = displaySettings;
editor = new TextCellEditor(viewer.getTable());
- editor.setValidator(new NumberCellEditorValidator());
+ editor.setValidator(new NumberCellEditorValidator(allowX));
}
@Override
@Override
final protected Object getValue(Object element)
{
- return AsmNumberUtil.toString(getAsBigInteger(element), displaySettings.getDataNumberType(), getBitLength(element));
+ BigInteger bi = getAsBigInteger(element);
+ return bi == null ? "X" : AsmNumberUtil.toString(bi, displaySettings.getDataNumberType(), getBitLength(element));
}
@Override
final protected void setValue(Object element, Object userInput)
{
- try
- {
- setAsBigInteger(element, AsmNumberUtil.valueOf((String) userInput));
- }
- catch (@SuppressWarnings("unused") NumberFormatException e)
- {
- setAsBigInteger(element, BigInteger.valueOf(0));
- }
+ if (userInput.equals("X") || userInput.equals("x"))
+ setAsBigInteger(element, null);
+ else
+ try
+ {
+ setAsBigInteger(element, AsmNumberUtil.valueOf((String) userInput));
+ }
+ catch (@SuppressWarnings("unused") NumberFormatException e)
+ {
+ setAsBigInteger(element, BigInteger.valueOf(0));
+ }
viewer.update(element, null);
}
+ /**
+ * value==null means X, if this {@link NumberCellEditingSupport} was created with allowX==true
+ */
protected abstract void setAsBigInteger(Object element, BigInteger value);
+ /**
+ * null means X, if this {@link NumberCellEditingSupport} was created with allowX==true
+ */
protected abstract BigInteger getAsBigInteger(Object element);
protected abstract int getBitLength(Object element);