10498f65ec758633468991cfc6ac1fdb1f4da7f7
[Mograsim.git] / net.mograsim.plugin.core / src / net / mograsim / plugin / memory / MemoryCellEditingSupport.java
1 package net.mograsim.plugin.memory;
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.memory.MemoryView.DisplaySettings;
12
13 public class MemoryCellEditingSupport extends EditingSupport
14 {
15         private final TableViewer viewer;
16         private final CellEditor editor;
17         private final DisplaySettings displaySettings;
18
19         public MemoryCellEditingSupport(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         protected boolean canEdit(Object element)
30         {
31                 return true;
32         }
33
34         @Override
35         protected CellEditor getCellEditor(Object element)
36         {
37                 return editor;
38         }
39
40         @Override
41         protected Object getValue(Object element)
42         {
43                 MemoryTableRow row = (MemoryTableRow) element;
44                 return AsmNumberUtil.toString(row.getMemory().getCellAsBigInteger(row.address), displaySettings.getDataNumberType());
45         }
46
47         @Override
48         protected void setValue(Object element, Object userInput)
49         {
50                 MemoryTableRow row = (MemoryTableRow) element;
51                 try
52                 {
53                         row.getMemory().setCellAsBigInteger(row.address, AsmNumberUtil.valueOf((String) userInput));
54                 }
55                 catch (@SuppressWarnings("unused") NumberFormatException e)
56                 {
57                         row.getMemory().setCellAsBigInteger(row.address, BigInteger.valueOf(0));
58                 }
59                 viewer.update(element, null);
60         }
61 }