Refactored MemoryView for extensibility
[Mograsim.git] / net.mograsim.plugin.core / src / net / mograsim / plugin / tables / NumberCellEditingSupport.java
1 package net.mograsim.plugin.tables;
2
3 import java.math.BigInteger;
4
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;
9
10 import net.mograsim.plugin.asm.AsmNumberUtil;
11 import net.mograsim.plugin.tables.memory.DisplaySettings;
12
13 public abstract class NumberCellEditingSupport extends EditingSupport
14 {
15         private final TableViewer viewer;
16         private final CellEditor editor;
17         private final DisplaySettings displaySettings;
18
19         public NumberCellEditingSupport(TableViewer viewer, DisplaySettings displaySettings)
20         {
21                 super(viewer);
22                 this.viewer = viewer;
23                 this.displaySettings = displaySettings;
24                 editor = new TextCellEditor(viewer.getTable());
25                 editor.setValidator(new NumberCellEditorValidator());
26         }
27
28         @Override
29         final protected boolean canEdit(Object element)
30         {
31                 return true;
32         }
33
34         @Override
35         final protected CellEditor getCellEditor(Object element)
36         {
37                 return editor;
38         }
39
40         @Override
41         final protected Object getValue(Object element)
42         {
43                 return AsmNumberUtil.toString(getAsBigInteger(element), displaySettings.getDataNumberType());
44         }
45
46         @Override
47         final protected void setValue(Object element, Object userInput)
48         {
49                 try
50                 {
51                         setAsBigInteger(element, AsmNumberUtil.valueOf((String) userInput));
52                 }
53                 catch (@SuppressWarnings("unused") NumberFormatException e)
54                 {
55                         setAsBigInteger(element, BigInteger.valueOf(0));
56                 }
57                 viewer.update(element, null);
58         }
59
60         protected abstract void setAsBigInteger(Object element, BigInteger value);
61
62         protected abstract BigInteger getAsBigInteger(Object element);
63 }