X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=SampleERCP%2Fsrc%2Fsampleercp%2Fparts%2FLogicUIPart.java;h=98fb64c1c55e73c477101705e41accb13c79a3fd;hb=4c124bfcc82bdc6def670824d870590a1361881a;hp=f725d5b62ff8480a8039f12f94d479ec07a103b6;hpb=6ab8014cf6bb882187ab4d22fdf460dc0adbc2ab;p=Mograsim.git diff --git a/SampleERCP/src/sampleercp/parts/LogicUIPart.java b/SampleERCP/src/sampleercp/parts/LogicUIPart.java index f725d5b6..98fb64c1 100644 --- a/SampleERCP/src/sampleercp/parts/LogicUIPart.java +++ b/SampleERCP/src/sampleercp/parts/LogicUIPart.java @@ -7,8 +7,12 @@ import org.eclipse.e4.ui.model.application.ui.basic.MPart; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; +import era.mi.gui.LogicExecuter; import era.mi.gui.LogicUICanvas; -import era.mi.gui.examples.RSLatchGUIExample; +import era.mi.gui.examples.RSLatchExample; +import era.mi.gui.model.ViewModel; +import era.mi.gui.modeladapter.LogicModelParameters; +import era.mi.gui.modeladapter.ViewLogicModelAdapter; import era.mi.logic.timeline.Timeline; import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput; @@ -20,41 +24,31 @@ public class LogicUIPart @PostConstruct public void create(Composite parent) { - Timeline timeline = new Timeline(11); - LogicUICanvas ui = new LogicUICanvas(parent, SWT.NONE); - RSLatchGUIExample.addComponentsAndWires(ui, timeline); + // setup view model + ViewModel viewModel = new ViewModel(); + RSLatchExample.createRSLatchExample(viewModel); + + // convert to logic model + LogicModelParameters params = new LogicModelParameters(); + params.gateProcessTime = 50; + params.wireTravelTime = 10; + Timeline timeline = ViewLogicModelAdapter.convert(viewModel, params); + + // initialize UI + LogicUICanvas ui = new LogicUICanvas(parent, SWT.NONE, viewModel); ui.addTransformListener((x, y, z) -> part.setDirty(z < 1)); ZoomableCanvasUserInput userInput = new ZoomableCanvasUserInput(ui); userInput.buttonDrag = 3; userInput.buttonZoom = 2; userInput.enableUserInput(); - Thread simulationThread = new Thread(() -> - { - // TODO find a better condition - while (!ui.isDisposed()) - { - // always execute to keep timeline from "hanging behind" for too long - timeline.executeUpTo(System.currentTimeMillis(), System.currentTimeMillis() + 10); - long sleepTime; - if (timeline.hasNext()) - sleepTime = timeline.nextEventTime() - System.currentTimeMillis(); - else - sleepTime = 10; - try - { - if (sleepTime > 0) - Thread.sleep(sleepTime); - } - catch (InterruptedException e) - { - } // it is normal execution flow to be interrupted - } - }); - simulationThread.start(); - timeline.addEventAddedListener(event -> - { - if (event.getTiming() <= System.currentTimeMillis()) - simulationThread.interrupt(); - }); + + // initialize executer + LogicExecuter exec = new LogicExecuter(timeline); + + // run it + exec.startLiveExecution(); + + // TODO find a better condition when to stop + ui.addDisposeListener(e -> exec.stopLiveExecution()); } } \ No newline at end of file