1 package net.mograsim.rcp.parts;
3 import javax.annotation.PostConstruct;
4 import javax.inject.Inject;
6 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
7 import org.eclipse.swt.SWT;
8 import org.eclipse.swt.widgets.Composite;
10 import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput;
11 import net.mograsim.logic.core.timeline.Timeline;
12 import net.mograsim.logic.ui.LogicExecuter;
13 import net.mograsim.logic.ui.LogicUICanvas;
14 import net.mograsim.logic.ui.examples.RSLatchExample;
15 import net.mograsim.logic.ui.model.ViewModelModifiable;
16 import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
17 import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
19 public class LogicUIPart
25 public void create(Composite parent)
28 ViewModelModifiable viewModel = new ViewModelModifiable();
29 RSLatchExample.createRSLatchExample(viewModel);
31 // convert to logic model
32 LogicModelParameters params = new LogicModelParameters();
33 params.gateProcessTime = 50;
34 params.wireTravelTime = 10;
35 Timeline timeline = ViewLogicModelAdapter.convert(viewModel, params);
38 LogicUICanvas ui = new LogicUICanvas(parent, SWT.NONE, viewModel);
39 ui.addTransformListener((x, y, z) -> part.setDirty(z < 1));
40 ZoomableCanvasUserInput userInput = new ZoomableCanvasUserInput(ui);
41 userInput.buttonDrag = 3;
42 userInput.buttonZoom = 2;
43 userInput.enableUserInput();
45 // initialize executer
46 LogicExecuter exec = new LogicExecuter(timeline);
49 exec.startLiveExecution();
51 // TODO find a better condition when to stop
52 ui.addDisposeListener(e -> exec.stopLiveExecution());