Re-added instruction preview to SimulationViewEditor
authorDaniel Kirschten <daniel.kirschten@gmx.de>
Wed, 25 Sep 2019 10:40:28 +0000 (12:40 +0200)
committerDaniel Kirschten <daniel.kirschten@gmx.de>
Wed, 25 Sep 2019 10:40:59 +0000 (12:40 +0200)
plugins/net.mograsim.plugin.core/src/net/mograsim/plugin/editors/SimulationViewEditor.java

index aece3ac..4dd346b 100644 (file)
@@ -29,8 +29,13 @@ import net.mograsim.logic.core.components.CoreClock;
 import net.mograsim.logic.model.LogicExecuter;
 import net.mograsim.logic.model.LogicUICanvas;
 import net.mograsim.machine.Machine;
+import net.mograsim.machine.Memory.MemoryCellModifiedListener;
+import net.mograsim.machine.mi.AssignableMicroInstructionMemory;
 import net.mograsim.plugin.nature.MachineContext;
 import net.mograsim.plugin.nature.ProjectMachineContext;
+import net.mograsim.plugin.tables.DisplaySettings;
+import net.mograsim.plugin.tables.mi.ActiveInstructionPreviewContentProvider;
+import net.mograsim.plugin.tables.mi.InstructionTable;
 
 //TODO what if we open multiple editors?
 //TODO actually save / load register and latch states
@@ -48,6 +53,8 @@ public class SimulationViewEditor extends EditorPart
        private LogicUICanvas canvas;
        private Label noMachineLabel;
 
+       private MemoryCellModifiedListener currentRegisteredCellListener;
+
        @Override
        public void createPartControl(Composite parent)
        {
@@ -79,13 +86,27 @@ public class SimulationViewEditor extends EditorPart
                        sbseButton.setEnabled(true);
                        pauseButton.setEnabled(true);
                        simSpeedSlider.setEnabled(true);
+
+                       if (machine != null)
+                               machine.getMicroInstructionMemory().deregisterCellModifiedListener(currentRegisteredCellListener);
+
                        machine = machineOptional.get();
                        canvas = new LogicUICanvas(parent, SWT.NONE, machine.getModel());
+                       canvas.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
                        ZoomableCanvasUserInput userInput = new ZoomableCanvasUserInput(canvas);
                        userInput.buttonDrag = 3;
                        userInput.buttonZoom = 2;
                        userInput.enableUserInput();
 
+                       // initialize Instruction preview
+                       InstructionTable instPreview = new InstructionTable(parent, new DisplaySettings());
+                       instPreview.getTableViewer().getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+                       instPreview.setContentProvider(new ActiveInstructionPreviewContentProvider(instPreview.getTableViewer()));
+                       AssignableMicroInstructionMemory mIMemory = machine.getMicroInstructionMemory();
+                       instPreview.bindMicroInstructionMemory(mIMemory);
+                       currentRegisteredCellListener = a -> instPreview.refresh();
+                       mIMemory.registerCellModifiedListener(currentRegisteredCellListener);
+
                        GridData uiData = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH);
                        canvas.setLayoutData(uiData);