SimpleLogicUIStandalone now supports a pre-run hook
authorDaniel Kirschten <daniel.kirschten@gmx.de>
Sat, 31 Aug 2019 12:23:24 +0000 (14:23 +0200)
committerDaniel Kirschten <daniel.kirschten@gmx.de>
Sat, 31 Aug 2019 12:23:24 +0000 (14:23 +0200)
net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/Am2910Testbench.java
net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2901/Am2901Testbench.java
net.mograsim.logic.model/src/net/mograsim/logic/model/SimpleLogicUIStandalone.java

index a9ecc03..132b913 100644 (file)
@@ -1,7 +1,10 @@
 package net.mograsim.logic.model.examples;
 
 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVector;
 import net.mograsim.logic.model.SimpleLogicUIStandalone;
+import net.mograsim.logic.model.SimpleLogicUIStandalone.VisualisationObjects;
 import net.mograsim.logic.model.model.ViewModelModifiable;
 import net.mograsim.logic.model.model.components.GUIComponent;
 import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
@@ -13,7 +16,7 @@ public class Am2910Testbench
 {
        public static void main(String[] args)
        {
-               SimpleLogicUIStandalone.executeVisualisation(Am2910Testbench::create);
+               SimpleLogicUIStandalone.executeVisualisation(Am2910Testbench::create, Am2910Testbench::beforeRun);
        }
 
        @SuppressWarnings("unused") // for GUIWires being created
@@ -62,4 +65,16 @@ public class Am2910Testbench
                new GUIWire(model, am2910.getPin("Y"), Y.getInputPin(), new Point(38, 72.5));
                new GUIWire(model, am2910.getPin("_OE"), _OE.getOutputPin());
        }
+
+       public static void beforeRun(VisualisationObjects vis)
+       {
+               vis.model.getComponentsByName().values().forEach(c ->
+               {
+                       if (c instanceof GUIManualSwitch)
+                       {
+                               GUIManualSwitch cCasted = (GUIManualSwitch) c;
+                               cCasted.setHighLevelState("out", BitVector.of(Bit.ZERO, cCasted.logicWidth));
+                       }
+               });
+       }
 }
\ No newline at end of file
index 3a7ffa2..b54713e 100644 (file)
@@ -4,7 +4,10 @@ import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
 
+import net.mograsim.logic.core.types.Bit;
+import net.mograsim.logic.core.types.BitVector;
 import net.mograsim.logic.model.SimpleLogicUIStandalone;
+import net.mograsim.logic.model.SimpleLogicUIStandalone.VisualisationObjects;
 import net.mograsim.logic.model.model.ViewModelModifiable;
 import net.mograsim.logic.model.model.components.GUIComponent;
 import net.mograsim.logic.model.model.components.atomic.GUIAndGate;
@@ -12,6 +15,7 @@ import net.mograsim.logic.model.model.components.atomic.GUIBitDisplay;
 import net.mograsim.logic.model.model.components.atomic.GUIManualSwitch;
 import net.mograsim.logic.model.model.components.atomic.GUINotGate;
 import net.mograsim.logic.model.model.components.atomic.TextComponent;
+import net.mograsim.logic.model.model.components.submodels.SubmodelComponent;
 import net.mograsim.logic.model.model.wires.Pin;
 import net.mograsim.logic.model.model.wires.WireCrossPoint;
 import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator;
@@ -21,7 +25,7 @@ public class Am2901Testbench
 {
        public static void main(String[] args)
        {
-               SimpleLogicUIStandalone.executeVisualisation(Am2901Testbench::createTestbench);
+               SimpleLogicUIStandalone.executeVisualisation(Am2901Testbench::createTestbench, Am2901Testbench::beforeRun);
        }
 
        public static void createTestbench(ViewModelModifiable model)
@@ -99,4 +103,16 @@ public class Am2901Testbench
                        label.moveTo(x + 25, y);
                }
        }
+
+       public static void beforeRun(VisualisationObjects vis)
+       {
+               ((SubmodelComponent) vis.model.getComponentsByName().get("testbench")).submodel.getComponentsByName().values().forEach(c ->
+               {
+                       if (c instanceof GUIManualSwitch)
+                       {
+                               GUIManualSwitch cCasted = (GUIManualSwitch) c;
+                               cCasted.setHighLevelState("out", BitVector.of(Bit.ZERO, cCasted.logicWidth));
+                       }
+               });
+       }
 }
\ No newline at end of file
index 23252d4..2b945b1 100644 (file)
@@ -10,14 +10,25 @@ import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter;
 public class SimpleLogicUIStandalone
 {
        public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel)
+       {
+               executeVisualisation(setupViewModel, (Consumer<VisualisationObjects>) null);
+       }
+
+       public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel, Consumer<VisualisationObjects> beforeRun)
        {
                LogicModelParameters params = new LogicModelParameters();
                params.gateProcessTime = 50;
                params.wireTravelTime = 10;
-               executeVisualisation(setupViewModel, params);
+               executeVisualisation(setupViewModel, params, beforeRun);
        }
 
        public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel, LogicModelParameters params)
+       {
+               executeVisualisation(setupViewModel, params, null);
+       }
+
+       public static void executeVisualisation(Consumer<ViewModelModifiable> setupViewModel, LogicModelParameters params,
+                       Consumer<VisualisationObjects> beforeRun)
        {
                // setup view model
                ViewModelModifiable viewModel = new ViewModelModifiable();
@@ -30,12 +41,31 @@ public class SimpleLogicUIStandalone
                LogicUIStandaloneGUI ui = new LogicUIStandaloneGUI(viewModel);
                LogicExecuter exec = new LogicExecuter(timeline);
 
+               if (beforeRun != null)
+                       beforeRun.accept(new VisualisationObjects(viewModel, timeline, ui, exec));
+
                // run it
                exec.startLiveExecution();
                ui.run();
                exec.stopLiveExecution();
        }
 
+       public static class VisualisationObjects
+       {
+               public final ViewModelModifiable model;
+               public final Timeline timeline;
+               public final LogicUIStandaloneGUI gui;
+               public final LogicExecuter executer;
+
+               public VisualisationObjects(ViewModelModifiable model, Timeline timeline, LogicUIStandaloneGUI gui, LogicExecuter executer)
+               {
+                       this.model = model;
+                       this.timeline = timeline;
+                       this.gui = gui;
+                       this.executer = executer;
+               }
+       }
+
        private SimpleLogicUIStandalone()
        {
                throw new UnsupportedOperationException("No SimpleLogicUIStandalone instances");