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