Highlighting Instructions is now based on the selected DebugTarget
[Mograsim.git] / plugins / net.mograsim.plugin.core / src / net / mograsim / plugin / launch / MachineDebugTarget.java
index a060bd5..03fe7fd 100644 (file)
@@ -1,5 +1,9 @@
 package net.mograsim.plugin.launch;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Consumer;
+
 import org.eclipse.core.resources.IMarkerDelta;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.PlatformObject;
@@ -23,6 +27,7 @@ import net.mograsim.logic.model.LogicExecuter;
 import net.mograsim.machine.Machine;
 import net.mograsim.machine.MachineDefinition;
 import net.mograsim.plugin.MograsimActivator;
+import net.mograsim.plugin.launch.MachineLaunchConfigType.MachineLaunchParams;
 
 public class MachineDebugTarget extends PlatformObject implements IDebugTarget, IMemoryBlockRetrievalExtension
 {
@@ -32,12 +37,19 @@ public class MachineDebugTarget extends PlatformObject implements IDebugTarget,
 
        private boolean running;
 
-       public MachineDebugTarget(ILaunch launch, MachineDefinition machineDefinition)
+       private final List<Consumer<Double>> executionSpeedListeners;
+
+       private final MachineLaunchParams launchParams;
+
+       public MachineDebugTarget(ILaunch launch, MachineLaunchParams launchParams, MachineDefinition machineDefinition)
        {
                this.launch = launch;
                this.machine = machineDefinition.createNew();
                this.exec = new LogicExecuter(machine.getTimeline());
 
+               this.executionSpeedListeners = new ArrayList<>();
+               this.launchParams = launchParams;
+
                exec.startLiveExecution();
                running = true;
 
@@ -74,6 +86,11 @@ public class MachineDebugTarget extends PlatformObject implements IDebugTarget,
                return launch;
        }
 
+       public MachineLaunchParams getLaunchParams()
+       {
+               return launchParams;
+       }
+
        public double getExecutionSpeed()
        {
                return exec.getSpeedFactor();
@@ -82,7 +99,10 @@ public class MachineDebugTarget extends PlatformObject implements IDebugTarget,
        public void setExecutionSpeed(double speed)
        {
                if (getExecutionSpeed() != speed)
+               {
                        exec.setSpeedFactor(speed);
+                       callExecutionSpeedListener(speed);
+               }
        }
 
        @Override
@@ -230,6 +250,21 @@ public class MachineDebugTarget extends PlatformObject implements IDebugTarget,
                return new IThread[0];
        }
 
+       public void addExecutionSpeedListener(Consumer<Double> executionSpeedListener)
+       {
+               executionSpeedListeners.add(executionSpeedListener);
+       }
+
+       public void removeExecutionSpeedListener(Consumer<Double> executionSpeedListener)
+       {
+               executionSpeedListeners.remove(executionSpeedListener);
+       }
+
+       private void callExecutionSpeedListener(double executionSpeed)
+       {
+               executionSpeedListeners.forEach(l -> l.accept(executionSpeed));
+       }
+
        @SuppressWarnings("unchecked")
        @Override
        public <T> T getAdapter(Class<T> adapter)