From 4d1b410118f5ef48bb26a55174c87d95ad517c69 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Sat, 31 Aug 2019 14:23:24 +0200 Subject: [PATCH] SimpleLogicUIStandalone now supports a pre-run hook --- .../logic/model/examples/Am2910Testbench.java | 17 +++++++++- .../model/am2900/am2901/Am2901Testbench.java | 18 ++++++++++- .../logic/model/SimpleLogicUIStandalone.java | 32 ++++++++++++++++++- 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/Am2910Testbench.java b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/Am2910Testbench.java index a9ecc036..132b9135 100644 --- a/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/Am2910Testbench.java +++ b/net.mograsim.logic.model.am2900/src/net/mograsim/logic/model/examples/Am2910Testbench.java @@ -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 diff --git a/net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2901/Am2901Testbench.java b/net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2901/Am2901Testbench.java index 3a7ffa22..b54713e8 100644 --- a/net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2901/Am2901Testbench.java +++ b/net.mograsim.logic.model.am2900/test/net/mograsim/logic/model/am2900/am2901/Am2901Testbench.java @@ -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 diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/SimpleLogicUIStandalone.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/SimpleLogicUIStandalone.java index 23252d4b..2b945b11 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/SimpleLogicUIStandalone.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/SimpleLogicUIStandalone.java @@ -10,14 +10,25 @@ import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter; public class SimpleLogicUIStandalone { public static void executeVisualisation(Consumer setupViewModel) + { + executeVisualisation(setupViewModel, (Consumer) null); + } + + public static void executeVisualisation(Consumer setupViewModel, Consumer beforeRun) { LogicModelParameters params = new LogicModelParameters(); params.gateProcessTime = 50; params.wireTravelTime = 10; - executeVisualisation(setupViewModel, params); + executeVisualisation(setupViewModel, params, beforeRun); } public static void executeVisualisation(Consumer setupViewModel, LogicModelParameters params) + { + executeVisualisation(setupViewModel, params, null); + } + + public static void executeVisualisation(Consumer setupViewModel, LogicModelParameters params, + Consumer 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"); -- 2.17.1