Insured InstructionTable removes all Listeners
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / editors / SimulationViewEditor.java
index 91a0397..cb8e688 100644 (file)
@@ -30,6 +30,7 @@ import net.mograsim.logic.core.LogicObserver;
 import net.mograsim.logic.core.components.CoreClock;
 import net.mograsim.logic.model.LogicExecuter;
 import net.mograsim.logic.model.LogicUICanvas;
+import net.mograsim.logic.model.serializing.IndirectModelComponentCreator;
 import net.mograsim.machine.Machine;
 import net.mograsim.machine.Memory.MemoryCellModifiedListener;
 import net.mograsim.machine.mi.AssignableMicroInstructionMemory;
@@ -71,7 +72,7 @@ public class SimulationViewEditor extends EditorPart
 
        public SimulationViewEditor()
        {
-               activeMachineListener = m -> recreateContextDependentControls();
+               activeMachineListener = (oldM, newM) -> recreateContextDependentControls();
                memCellListener = a -> instPreview.refresh();
                clockObserver = o ->
                {
@@ -160,7 +161,7 @@ public class SimulationViewEditor extends EditorPart
 
                        // initialize executer
                        exec = new LogicExecuter(machine.getTimeline());
-                       updateSpeedFactorFromScale();
+                       updateSpeedFactorFromInput(simSpeedInput.getValue());
                        updatePausedState();
                        exec.startLiveExecution();
                } else
@@ -189,12 +190,21 @@ public class SimulationViewEditor extends EditorPart
        {
                Composite c = new Composite(parent, SWT.NONE);
                c.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-               c.setLayout(new GridLayout(6, false));
+               c.setLayout(new GridLayout(7, false));
 
                resetButton = new Button(c, SWT.PUSH);
                resetButton.setText("Reset machine");
                resetButton.addListener(SWT.Selection, e -> context.getActiveMachine().get().reset());
 
+               // TODO do we want this button in the final product?
+               Button reloadMachineButton = new Button(c, SWT.PUSH);
+               reloadMachineButton.setText("Reload machine");
+               reloadMachineButton.addListener(SWT.Selection, e ->
+               {
+                       IndirectModelComponentCreator.clearComponentCache();
+                       context.setActiveMachine(context.getMachineDefinition().get().createNew());
+               });
+
                sbseButton = new Button(c, SWT.CHECK);
                pauseButton = new Button(c, SWT.TOGGLE);
 
@@ -288,7 +298,7 @@ public class SimulationViewEditor extends EditorPart
 
        private void addInstructionPreviewControlWidgets(Composite parent)
        {
-               instPreview = new InstructionTable(parent, new DisplaySettings());
+               instPreview = new InstructionTable(parent, new DisplaySettings(), getSite().getWorkbenchWindow().getWorkbench().getThemeManager());
                instPreview.getTableViewer().getTable().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
                instPreview.setContentProvider(new ActiveInstructionPreviewContentProvider(instPreview.getTableViewer()));
        }