Changed mnemonic X to use BitVector X; added X for integer immediates
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / tables / NumberCellEditingSupport.java
index a358225..e130853 100644 (file)
@@ -15,13 +15,13 @@ public abstract class NumberCellEditingSupport extends EditingSupport
        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,25 +39,35 @@ public abstract class NumberCellEditingSupport extends EditingSupport
        @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);