X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=SampleERCP%2Fsrc%2Fmograsim%2Frcp%2Fparts%2FLogicUIPart.java;fp=SampleERCP%2Fsrc%2Fmograsim%2Frcp%2Fparts%2FLogicUIPart.java;h=9f2a36ad1198e07715a77636ec9ff7659bc41da2;hb=a28f7aa0dab4248e99159c5a647676170cb17a4e;hp=0000000000000000000000000000000000000000;hpb=80bfbd8ebf0ad8a7ad98584544a0c73f43e6f3b6;p=Mograsim.git diff --git a/SampleERCP/src/mograsim/rcp/parts/LogicUIPart.java b/SampleERCP/src/mograsim/rcp/parts/LogicUIPart.java new file mode 100644 index 00000000..9f2a36ad --- /dev/null +++ b/SampleERCP/src/mograsim/rcp/parts/LogicUIPart.java @@ -0,0 +1,54 @@ +package mograsim.rcp.parts; + +import javax.annotation.PostConstruct; +import javax.inject.Inject; + +import org.eclipse.e4.ui.model.application.ui.basic.MPart; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; + +import mograsim.logic.core.timeline.Timeline; +import mograsim.logic.ui.LogicExecuter; +import mograsim.logic.ui.LogicUICanvas; +import mograsim.logic.ui.examples.RSLatchExample; +import mograsim.logic.ui.model.ViewModel; +import mograsim.logic.ui.modeladapter.LogicModelParameters; +import mograsim.logic.ui.modeladapter.ViewLogicModelAdapter; +import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput; + +public class LogicUIPart +{ + @Inject + private MPart part; + + @PostConstruct + public void create(Composite parent) + { + // 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(); + + // 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