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;
{
public static void main(String[] args)
{
- SimpleLogicUIStandalone.executeVisualisation(Am2910Testbench::create);
+ SimpleLogicUIStandalone.executeVisualisation(Am2910Testbench::create, Am2910Testbench::beforeRun);
}
@SuppressWarnings("unused") // for GUIWires being created
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
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;
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;
{
public static void main(String[] args)
{
- SimpleLogicUIStandalone.executeVisualisation(Am2901Testbench::createTestbench);
+ SimpleLogicUIStandalone.executeVisualisation(Am2901Testbench::createTestbench, Am2901Testbench::beforeRun);
}
public static void createTestbench(ViewModelModifiable model)
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
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();
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");