X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.plugin.core%2Fsrc%2Fnet%2Fmograsim%2Fplugin%2Ftables%2FNumberCellEditingSupport.java;h=e1308530c34fe1d264a2012c48dfb22b14b1352e;hb=161ecd36b6dcfe0e38cee3fd6ea8ad42d0705777;hp=a1d81072d0fab0354b8a23bd43ee68cda52cb854;hpb=58babf45ae7d259a296656451d796dbe601377a4;p=Mograsim.git diff --git a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditingSupport.java b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditingSupport.java index a1d81072..e1308530 100644 --- a/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditingSupport.java +++ b/plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/tables/NumberCellEditingSupport.java @@ -12,16 +12,16 @@ import net.mograsim.plugin.asm.AsmNumberUtil; 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 @@ -39,24 +39,36 @@ public abstract class NumberCellEditingSupport extends EditingSupport @Override final protected Object getValue(Object element) { - return AsmNumberUtil.toString(getAsBigInteger(element), displaySettings.getDataNumberType()); + 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); }