1 package net.mograsim.plugin.tables.mi;
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;
9 import net.mograsim.machine.mi.MicroInstruction;
10 import net.mograsim.machine.mi.MicroInstructionDefinition;
11 import net.mograsim.machine.mi.parameters.MicroInstructionParameter;
12 import net.mograsim.machine.mi.parameters.Mnemonic;
13 import net.mograsim.machine.mi.parameters.MnemonicFamily;
15 public class MnemonicEditingSupport extends EditingSupport
17 private final ComboBoxCellEditor editor;
18 private final MnemonicFamily family;
19 private final int index;
20 private InstructionTableContentProvider provider;
22 public MnemonicEditingSupport(TableViewer viewer, MicroInstructionDefinition definition, int index,
23 InstructionTableContentProvider provider)
26 family = (MnemonicFamily) definition.getParameterClassifications()[index];
27 editor = new ComboBoxCellEditor(viewer.getTable(), family.getStringValues(), SWT.READ_ONLY);
28 editor.setActivationStyle(
29 ComboBoxCellEditor.DROP_DOWN_ON_TRAVERSE_ACTIVATION | ComboBoxCellEditor.DROP_DOWN_ON_PROGRAMMATIC_ACTIVATION
30 | ComboBoxCellEditor.DROP_DOWN_ON_MOUSE_ACTIVATION | ComboBoxCellEditor.DROP_DOWN_ON_KEY_ACTIVATION);
32 this.provider = provider;
36 protected boolean canEdit(Object element)
42 protected CellEditor getCellEditor(Object element)
48 protected Object getValue(Object element)
50 InstructionTableRow row = ((InstructionTableRow) element);
51 return ((Mnemonic) row.data.getCell(row.address).getParameter(index)).ordinal();
55 protected void setValue(Object element, Object value)
57 InstructionTableRow row = ((InstructionTableRow) element);
58 MicroInstructionParameter[] params = row.data.getCell(row.address).getParameters();
59 Mnemonic newParam = family.get((Integer) value);
60 if (newParam.equals(params[index]))
62 params[index] = newParam;
63 row.data.setCell(row.address, MicroInstruction.create(params));
64 provider.update(row.address);