Renamed project folders to match the respective project name
[Mograsim.git] / net.mograsim.rcp / src / net / mograsim / rcp / parts / LogicUIPart.java
1 package net.mograsim.rcp.parts;
2
3 import javax.annotation.PostConstruct;
4 import javax.inject.Inject;
5
6 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
7 import org.eclipse.swt.SWT;
8 import org.eclipse.swt.widgets.Composite;
9
10 import net.mograsim.logic.ui.LogicExecuter;
11 import net.mograsim.logic.ui.LogicUICanvas;
12 import net.mograsim.logic.ui.examples.RSLatchExample;
13 import net.mograsim.logic.ui.model.ViewModel;
14 import net.mograsim.logic.ui.modeladapter.LogicModelParameters;
15 import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;
16 import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput;
17 import net.mograsim.logic.core.timeline.Timeline;
18
19 public class LogicUIPart
20 {
21         @Inject
22         private MPart part;
23
24         @PostConstruct
25         public void create(Composite parent)
26         {
27                 // setup view model
28                 ViewModel viewModel = new ViewModel();
29                 RSLatchExample.createRSLatchExample(viewModel);
30
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);
36
37                 // initialize UI
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();
44
45                 // initialize executer
46                 LogicExecuter exec = new LogicExecuter(timeline);
47
48                 // run it
49                 exec.startLiveExecution();
50
51                 // TODO find a better condition when to stop
52                 ui.addDisposeListener(e -> exec.stopLiveExecution());
53         }
54 }