Refactored MicroprogramMemory to MicroInstructionMemory
[Mograsim.git] / net.mograsim.plugin.core / src / net / mograsim / plugin / tables / mi / InstructionView.java
index 0af63e5..167a627 100644 (file)
@@ -3,6 +3,7 @@ package net.mograsim.plugin.tables.mi;
 import java.io.File;
 import java.io.IOException;
 
+import org.eclipse.jface.viewers.ColumnLabelProvider;
 import org.eclipse.jface.viewers.EditingSupport;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.TableViewerColumn;
@@ -16,12 +17,13 @@ import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.ui.part.ViewPart;
 
 import net.mograsim.machine.mi.MicroInstructionDefinition;
-import net.mograsim.machine.mi.MicroprogramMemory;
-import net.mograsim.machine.mi.MicroprogramMemoryParseException;
-import net.mograsim.machine.mi.MicroprogramMemoryParser;
+import net.mograsim.machine.mi.MicroInstructionMemory;
+import net.mograsim.machine.mi.MicroInstructionMemoryParseException;
+import net.mograsim.machine.mi.MicroInstructionMemoryParser;
 import net.mograsim.machine.mi.parameters.ParameterClassification;
 import net.mograsim.plugin.asm.AsmNumberUtil.NumberType;
-import net.mograsim.plugin.tables.memory.DisplaySettings;
+import net.mograsim.plugin.tables.DisplaySettings;
+import net.mograsim.plugin.tables.RadixSelector;
 import net.mograsim.plugin.util.DropDownMenu;
 import net.mograsim.plugin.util.DropDownMenu.DropDownEntry;
 
@@ -31,14 +33,20 @@ public class InstructionView extends ViewPart
        private TableViewer viewer;
        private TableViewerColumn[] columns = new TableViewerColumn[0];
        private MicroInstructionDefinition miDef;
-       private MicroprogramMemory memory;
+       private MicroInstructionMemory memory;
+       private DisplaySettings displaySettings;
 
+       @SuppressWarnings("unused")
        @Override
        public void createPartControl(Composite parent)
        {
                InstructionTableContentProvider provider = new InstructionTableContentProvider();
-               GridLayout layout = new GridLayout(1, false);
+               GridLayout layout = new GridLayout(3, false);
                setupMenuButtons(parent);
+
+               displaySettings = new DisplaySettings();
+               new RadixSelector(parent, displaySettings);
+
                parent.setLayout(layout);
                viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER | SWT.VIRTUAL);
                Table table = viewer.getTable();
@@ -47,7 +55,11 @@ public class InstructionView extends ViewPart
                viewer.setUseHashlookup(true);
                viewer.setContentProvider(provider);
 
-               viewer.getTable().setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH));
+               GridData viewerData = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH);
+               viewerData.horizontalSpan = 3;
+               viewer.getTable().setLayoutData(viewerData);
+
+               displaySettings.addObserver(() -> viewer.refresh());
        }
 
        @SuppressWarnings("unused")
@@ -85,7 +97,7 @@ public class InstructionView extends ViewPart
                        saveLoc = d.getFilterPath() + File.separator + filename;
        }
 
-       public void bindMicroprogramMemory(MicroprogramMemory memory)
+       public void bindMicroprogramMemory(MicroInstructionMemory memory)
        {
                this.memory = memory;
                viewer.setInput(memory);
@@ -114,27 +126,36 @@ public class InstructionView extends ViewPart
                        int bounds = 20 + 20 * classes[i].getExpectedBits();
 
                        TableViewerColumn col = createTableViewerColumn(name, bounds);
-                       col.setLabelProvider(new ParameterLabelProvider(i));
-                       col.setEditingSupport(createEditingSupport(miDef, i));
+                       createEditingAndLabel(col, miDef, i);
                }
 
        }
 
-       private EditingSupport createEditingSupport(MicroInstructionDefinition miDef, int index)
+       private void createEditingAndLabel(TableViewerColumn col, MicroInstructionDefinition miDef, int index)
        {
                ParameterClassification parameterClassification = miDef.getParameterClassifications()[index];
+               EditingSupport support;
+               ColumnLabelProvider provider;
                switch (parameterClassification.getExpectedType())
                {
                case BOOLEAN_IMMEDIATE:
-                       return new BooleanEditingSupport(viewer, index);
+                       support = new BooleanEditingSupport(viewer, miDef, index);
+                       provider = new ParameterLabelProvider(index);
+                       break;
                case INTEGER_IMMEDIATE:
-                       return new IntegerEditingSupport(viewer, miDef, index, new DisplaySettings(NumberType.DECIMAL));
+                       support = new IntegerEditingSupport(viewer, miDef, index, new DisplaySettings(NumberType.DECIMAL));
+                       provider = new IntegerColumnLabelProvider(displaySettings, index);
+                       break;
                case MNEMONIC:
-                       return new MnemonicEditingSupport(viewer, miDef, index);
+                       support = new MnemonicEditingSupport(viewer, miDef, index);
+                       provider = new ParameterLabelProvider(index);
+                       break;
                default:
                        throw new IllegalStateException(
                                        "Unable to create EditingSupport for unknown ParameterType " + parameterClassification.getExpectedType());
                }
+               col.setEditingSupport(support);
+               col.setLabelProvider(provider);
        }
 
        private TableViewerColumn createTableViewerColumn(String title, int bound)
@@ -157,11 +178,11 @@ public class InstructionView extends ViewPart
                }
                try
                {
-                       MicroprogramMemory newMemory = MicroprogramMemoryParser.parseMemory(miDef, file);
+                       MicroInstructionMemory newMemory = MicroInstructionMemoryParser.parseMemory(miDef, file);
                        bindMicroprogramMemory(newMemory);
                        saveLoc = file;
                }
-               catch (IOException | MicroprogramMemoryParseException e)
+               catch (IOException | MicroInstructionMemoryParseException e)
                {
                        e.printStackTrace();
                }
@@ -177,7 +198,7 @@ public class InstructionView extends ViewPart
                {
                        try
                        {
-                               MicroprogramMemoryParser.write(memory, file);
+                               MicroInstructionMemoryParser.write(memory, file);
                        }
                        catch (IOException e)
                        {