1 package sampleercp.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 era.mi.gui.LogicUICanvas;
11 import era.mi.gui.examples.RSLatchGUIExample;
12 import era.mi.logic.timeline.Timeline;
13 import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput;
15 public class LogicUIPart
21 public void create(Composite parent)
23 Timeline timeline = new Timeline(11);
24 LogicUICanvas ui = new LogicUICanvas(parent, SWT.NONE);
25 RSLatchGUIExample.addComponentsAndWires(ui, timeline);
26 ui.addTransformListener((x, y, z) -> part.setDirty(z < 1));
27 ZoomableCanvasUserInput userInput = new ZoomableCanvasUserInput(ui);
28 userInput.buttonDrag = 3;
29 userInput.buttonZoom = 2;
30 userInput.enableUserInput();
31 Thread simulationThread = new Thread(() ->
33 // TODO find a better condition
34 while (!ui.isDisposed())
36 // always execute to keep timeline from "hanging behind" for too long
37 timeline.executeUpTo(System.currentTimeMillis(), System.currentTimeMillis() + 10);
39 if (timeline.hasNext())
40 sleepTime = timeline.nextEventTime() - System.currentTimeMillis();
46 Thread.sleep(sleepTime);
48 catch (InterruptedException e)
50 } // it is normal execution flow to be interrupted
53 simulationThread.start();
54 timeline.addEventAddedListener(event ->
56 if (event.getTiming() <= System.currentTimeMillis())
57 simulationThread.interrupt();