X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.rcp%2Fsrc%2Fnet%2Fmograsim%2Frcp%2Fparts%2FLogicUIPart.java;fp=net.mograsim.rcp%2Fsrc%2Fnet%2Fmograsim%2Frcp%2Fparts%2FLogicUIPart.java;h=d23c9f45a1c21a8cb303ddbf641b6c6d4e8e6b53;hb=07faf07e3acb8b2afdc2bf65a46bc868faaed0f8;hp=0000000000000000000000000000000000000000;hpb=0009789a8df6b8d4562b6e1cbfa75102a7516ea8;p=Mograsim.git diff --git a/net.mograsim.rcp/src/net/mograsim/rcp/parts/LogicUIPart.java b/net.mograsim.rcp/src/net/mograsim/rcp/parts/LogicUIPart.java new file mode 100644 index 00000000..d23c9f45 --- /dev/null +++ b/net.mograsim.rcp/src/net/mograsim/rcp/parts/LogicUIPart.java @@ -0,0 +1,54 @@ +package net.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 net.mograsim.logic.ui.LogicExecuter; +import net.mograsim.logic.ui.LogicUICanvas; +import net.mograsim.logic.ui.examples.RSLatchExample; +import net.mograsim.logic.ui.model.ViewModel; +import net.mograsim.logic.ui.modeladapter.LogicModelParameters; +import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter; +import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput; +import net.mograsim.logic.core.timeline.Timeline; + +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