-package net.mograsim.plugin;\r
-\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.ui.themes.ITheme;\r
-import org.eclipse.ui.themes.IThemePreview;\r
-\r
-import net.haspamelodica.swt.helper.swtobjectwrappers.Point;\r
-import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput;\r
-import net.mograsim.logic.core.timeline.Timeline;\r
-import net.mograsim.logic.ui.LogicExecuter;\r
-import net.mograsim.logic.ui.LogicUICanvas;\r
-import net.mograsim.logic.ui.model.ViewModelModifiable;\r
-import net.mograsim.logic.ui.model.components.GUIManualSwitch;\r
-import net.mograsim.logic.ui.model.components.GUINotGate;\r
-import net.mograsim.logic.ui.model.components.GUIOrGate;\r
-import net.mograsim.logic.ui.model.wires.GUIWire;\r
-import net.mograsim.logic.ui.model.wires.WireCrossPoint;\r
-import net.mograsim.logic.ui.modeladapter.LogicModelParameters;\r
-import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;\r
-\r
-public class MograsimPreview implements IThemePreview\r
-{\r
-\r
- private LogicUICanvas ui;\r
- private LogicExecuter exec;\r
-\r
- @Override\r
- @SuppressWarnings("unused")\r
- public void createControl(Composite parent, ITheme currentTheme)\r
- {\r
- ViewModelModifiable model = new ViewModelModifiable();\r
- LogicModelParameters params = new LogicModelParameters();\r
- params.gateProcessTime = 50;\r
- params.wireTravelTime = 10;\r
-\r
- GUIManualSwitch rIn = new GUIManualSwitch(model);\r
- rIn.moveTo(10, 10);\r
- GUIManualSwitch sIn = new GUIManualSwitch(model);\r
- sIn.moveTo(10, 70);\r
-\r
- GUIOrGate or1 = new GUIOrGate(model, 1);\r
- or1.moveTo(70, 12.5);\r
- new GUIWire(model, rIn.getOutputPin(), or1.getPin("A"));\r
-\r
- GUIOrGate or2 = new GUIOrGate(model, 1);\r
- or2.moveTo(70, 62.5);\r
- new GUIWire(model, sIn.getOutputPin(), or2.getPin("B"));\r
-\r
- GUINotGate not1 = new GUINotGate(model, 1);\r
- not1.moveTo(110, 17.5);\r
- new GUIWire(model, or1.getPin("Y"), not1.getPin("A"));\r
-\r
- GUINotGate not2 = new GUINotGate(model, 1);\r
- not2.moveTo(110, 67.5);\r
- new GUIWire(model, or2.getPin("Y"), not2.getPin("A"));\r
-\r
- WireCrossPoint p1 = new WireCrossPoint(model, 1);\r
- p1.moveCenterTo(140, 22.5);\r
- new GUIWire(model, not1.getPin("Y"), p1);\r
- new GUIWire(model, p1, or2.getPin("A"), new Point(140, 35), new Point(50, 60), new Point(50, 67.5));\r
-\r
- WireCrossPoint p2 = new WireCrossPoint(model, 1);\r
- p2.moveCenterTo(140, 72.5);\r
- new GUIWire(model, not2.getPin("Y"), p2);\r
- new GUIWire(model, p2, or1.getPin("B"), new Point(140, 60), new Point(50, 35), new Point(50, 27.5));\r
-\r
- WireCrossPoint o1 = new WireCrossPoint(model, 1);\r
- o1.moveCenterTo(150, 22.5);\r
- new GUIWire(model, p1, o1);\r
-\r
- WireCrossPoint o2 = new WireCrossPoint(model, 1);\r
- o2.moveCenterTo(150, 72.5);\r
- new GUIWire(model, p2, o2);\r
-\r
- Timeline t = ViewLogicModelAdapter.convert(model, params);\r
- exec = new LogicExecuter(t);\r
-\r
- rIn.clicked(0, 0);\r
-\r
- ui = new LogicUICanvas(parent, SWT.NONE, model);\r
- ZoomableCanvasUserInput userInput = new ZoomableCanvasUserInput(ui);\r
- userInput.buttonDrag = 3;\r
- userInput.buttonZoom = 2;\r
- userInput.enableUserInput();\r
- update(currentTheme);\r
- currentTheme.getColorRegistry().addListener(e -> update(currentTheme));\r
-\r
- ui.zoomSteps(12, 10, 10);\r
- exec.startLiveExecution();\r
- }\r
-\r
- private void update(ITheme currentTheme)\r
- {\r
- ui.setBackground(currentTheme.getColorRegistry().get("net.mograsim.plugin.sim_backgound"));\r
- ui.setForeground(currentTheme.getColorRegistry().get("net.mograsim.plugin.sim_text_color"));\r
- }\r
-\r
- @Override\r
- public void dispose()\r
- {\r
- exec.stopLiveExecution();\r
- }\r
-}\r