1 package net.mograsim.plugin.tables;
3 import java.math.BigInteger;
5 import org.eclipse.jface.viewers.CellEditor;
6 import org.eclipse.jface.viewers.EditingSupport;
7 import org.eclipse.jface.viewers.TableViewer;
8 import org.eclipse.jface.viewers.TextCellEditor;
10 import net.mograsim.plugin.asm.AsmNumberUtil;
12 public abstract class NumberCellEditingSupport extends EditingSupport
14 private final TableViewer viewer;
15 protected final CellEditor editor;
16 private final DisplaySettings displaySettings;
18 public NumberCellEditingSupport(TableViewer viewer, DisplaySettings displaySettings, boolean allowX)
22 this.displaySettings = displaySettings;
23 editor = new TextCellEditor(viewer.getTable());
24 editor.setValidator(new NumberCellEditorValidator(allowX));
28 final protected boolean canEdit(Object element)
34 final protected CellEditor getCellEditor(Object element)
40 final protected Object getValue(Object element)
42 BigInteger bi = getAsBigInteger(element);
43 return bi == null ? "X" : AsmNumberUtil.toString(bi, displaySettings.getDataNumberType(), getBitLength(element));
47 final protected void setValue(Object element, Object userInput)
49 if (userInput.equals("X") || userInput.equals("x"))
50 setAsBigInteger(element, null);
54 setAsBigInteger(element, AsmNumberUtil.valueOf((String) userInput));
56 catch (@SuppressWarnings("unused") NumberFormatException e)
58 setAsBigInteger(element, BigInteger.valueOf(0));
60 viewer.update(element, null);
64 * value==null means X, if this {@link NumberCellEditingSupport} was created with allowX==true
66 protected abstract void setAsBigInteger(Object element, BigInteger value);
69 * null means X, if this {@link NumberCellEditingSupport} was created with allowX==true
71 protected abstract BigInteger getAsBigInteger(Object element);
73 protected abstract int getBitLength(Object element);