910fefa544bdb0e460e8fe09242cff248278b841
[Mograsim.git] / net.mograsim.plugin.core / src / net / mograsim / plugin / tables / mi / MnemonicEditingSupport.java
1 package net.mograsim.plugin.tables.mi;
2
3 import org.eclipse.jface.viewers.CellEditor;
4 import org.eclipse.jface.viewers.ComboBoxCellEditor;
5 import org.eclipse.jface.viewers.EditingSupport;
6 import org.eclipse.jface.viewers.TableViewer;
7 import org.eclipse.swt.SWT;
8
9 import net.mograsim.machine.mi.MicroInstructionDefinition;
10 import net.mograsim.machine.mi.parameters.Mnemonic;
11 import net.mograsim.machine.mi.parameters.MnemonicFamily;
12
13 public class MnemonicEditingSupport extends EditingSupport
14 {
15         private final ComboBoxCellEditor editor;
16         private final MnemonicFamily family;
17         private final TableViewer viewer;
18         private final int index;
19
20         public MnemonicEditingSupport(TableViewer viewer, MicroInstructionDefinition definition, int index)
21         {
22                 super(viewer);
23                 this.viewer = viewer;
24                 family = (MnemonicFamily) definition.getParameterClassifications()[index];
25                 editor = new ComboBoxCellEditor(viewer.getTable(), family.getStringValues(), SWT.READ_ONLY);
26                 this.index = index;
27                 editor.setValidator(new MnemonicCellEditorValidator(family));
28         }
29
30         @Override
31         protected boolean canEdit(Object element)
32         {
33                 return true;
34         }
35
36         @Override
37         protected CellEditor getCellEditor(Object element)
38         {
39                 return editor;
40         }
41
42         @Override
43         protected Object getValue(Object element)
44         {
45                 return ((Mnemonic) ((InstructionTableRow) element).data.getParameter(index)).ordinal();
46         }
47
48         @Override
49         protected void setValue(Object element, Object value)
50         {
51                 ((InstructionTableRow) element).data.setParameter(index, family.get((Integer) value));
52                 viewer.update(element, null);
53         }
54
55 }