Improvements in LogicUI
authorDaniel Kirschten <daniel.kirschten@gmx.de>
Mon, 13 May 2019 20:06:53 +0000 (22:06 +0200)
committerDaniel Kirschten <daniel.kirschten@gmx.de>
Mon, 13 May 2019 20:06:53 +0000 (22:06 +0200)
LogicUI/.classpath
LogicUI/.settings/org.eclipse.jdt.core.prefs
LogicUI/src/LogicUI.java [new file with mode: 0644]
LogicUI/src/LogicUIPlayground.java [deleted file]
LogicUI/src/era/mi/components/gui/BasicGUIComponent.java [new file with mode: 0644]
LogicUI/src/era/mi/components/gui/GUIMux.java [new file with mode: 0644]
SWTHelper

index 8d7f74a..effa05b 100644 (file)
@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <classpath>\r
-       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-10">\r
+               <attributes>\r
+                       <attribute name="module" value="true"/>\r
+               </attributes>\r
+       </classpathentry>\r
        <classpathentry kind="src" path="src"/>\r
        <classpathentry combineaccessrules="false" kind="src" path="/SWTZoomableCanvas"/>\r
        <classpathentry combineaccessrules="false" kind="src" path="/SWT"/>\r
index bb35fa0..2eeb2bb 100644 (file)
@@ -1,11 +1,12 @@
 eclipse.preferences.version=1\r
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled\r
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8\r
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=10\r
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve\r
-org.eclipse.jdt.core.compiler.compliance=1.8\r
+org.eclipse.jdt.core.compiler.compliance=10\r
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate\r
 org.eclipse.jdt.core.compiler.debug.localVariable=generate\r
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate\r
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error\r
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error\r
-org.eclipse.jdt.core.compiler.source=1.8\r
+org.eclipse.jdt.core.compiler.release=enabled\r
+org.eclipse.jdt.core.compiler.source=10\r
diff --git a/LogicUI/src/LogicUI.java b/LogicUI/src/LogicUI.java
new file mode 100644 (file)
index 0000000..80c8522
--- /dev/null
@@ -0,0 +1,76 @@
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.Map;\r
+import java.util.Set;\r
+\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.layout.FillLayout;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Shell;\r
+\r
+import era.mi.components.gui.BasicGUIComponent;\r
+import era.mi.components.gui.GUIMux;\r
+import era.mi.logic.Simulation;\r
+import era.mi.logic.components.Merger;\r
+import era.mi.logic.components.Splitter;\r
+import era.mi.logic.components.gates.AndGate;\r
+import era.mi.logic.components.gates.NotGate;\r
+import era.mi.logic.wires.WireArray;\r
+import net.haspamelodica.swt.helper.gcs.TranslatedGC;\r
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;\r
+import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas;\r
+import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasOverlay;\r
+import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput;\r
+\r
+public class LogicUI\r
+{\r
+       private final Display                                           display;\r
+       private final Shell                                                     shell;\r
+       private final Set<BasicGUIComponent>            components;\r
+       private final Map<BasicGUIComponent, Point>     componentPositions;\r
+\r
+       public LogicUI()\r
+       {\r
+               display = new Display();\r
+               shell = new Shell(display);\r
+               shell.setLayout(new FillLayout());\r
+               ZoomableCanvas canvas = new ZoomableCanvas(shell, SWT.NONE);\r
+\r
+               components = new HashSet<>();\r
+               componentPositions = new HashMap<>();\r
+               initComponents();\r
+\r
+               canvas.addZoomedRenderer(gc -> components.forEach(\r
+                               component -> component.render(new TranslatedGC(gc, componentPositions.get(component)))));\r
+               new ZoomableCanvasUserInput(canvas).enableUserInput();\r
+               new ZoomableCanvasOverlay(canvas, null).enableScale();\r
+       }\r
+       private void initComponents()\r
+       {\r
+               Simulation.TIMELINE.reset();\r
+               WireArray a = new WireArray(1, 1), b = new WireArray(1, 1), c = new WireArray(1, 10), d = new WireArray(2, 1), e = new WireArray(1, 1),\r
+                               f = new WireArray(1, 1), g = new WireArray(1, 1), h = new WireArray(2, 1), i = new WireArray(2, 1), j = new WireArray(1, 1), k = new WireArray(1, 1);\r
+               new AndGate(1, f, a, b);\r
+               new NotGate(1, f, g);\r
+               new Merger(h, c, g);\r
+               addComponent(new GUIMux(1, i, e, h, d), 10, 10);\r
+               new Splitter(i, k, j);\r
+       }\r
+       private void addComponent(BasicGUIComponent component, double x, double y)\r
+       {\r
+               components.add(component);\r
+               componentPositions.put(component, new Point(x, y));\r
+       }\r
+       public void run()\r
+       {\r
+               shell.open();\r
+               while(!shell.isDisposed())\r
+                       if(!display.readAndDispatch())\r
+                               display.sleep();\r
+       }\r
+\r
+       public static void main(String[] args)\r
+       {\r
+               new LogicUI().run();\r
+       }\r
+}
\ No newline at end of file
diff --git a/LogicUI/src/LogicUIPlayground.java b/LogicUI/src/LogicUIPlayground.java
deleted file mode 100644 (file)
index 4bcf8aa..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.layout.FillLayout;\r
-import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.swt.widgets.Shell;\r
-\r
-import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas;\r
-import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasOverlay;\r
-import net.haspamelodica.swt.helper.zoomablecanvas.helper.ZoomableCanvasUserInput;\r
-\r
-public class LogicUIPlayground\r
-{\r
-       public static void main(String[] args)\r
-       {\r
-               Display display = new Display();\r
-               Shell shell = new Shell(display);\r
-               shell.setLayout(new FillLayout());\r
-               ZoomableCanvas canvas = new ZoomableCanvas(shell, SWT.NONE);\r
-               canvas.setBackground(display.getSystemColor(SWT.COLOR_CYAN));\r
-               canvas.addZoomedRenderer(gc -> gc.drawText("Test", 0, 0));\r
-               new ZoomableCanvasUserInput(canvas).enableUserInput();\r
-               new ZoomableCanvasOverlay(canvas, null).enableScale();\r
-               shell.open();\r
-               while(!shell.isDisposed())\r
-                       if(!display.readAndDispatch())\r
-                               display.sleep();\r
-       }\r
-}
\ No newline at end of file
diff --git a/LogicUI/src/era/mi/components/gui/BasicGUIComponent.java b/LogicUI/src/era/mi/components/gui/BasicGUIComponent.java
new file mode 100644 (file)
index 0000000..5a20b26
--- /dev/null
@@ -0,0 +1,8 @@
+package era.mi.components.gui;\r
+\r
+import net.haspamelodica.swt.helper.gcs.GeneralGC;\r
+\r
+public interface BasicGUIComponent\r
+{\r
+       public void render(GeneralGC gc);\r
+}
\ No newline at end of file
diff --git a/LogicUI/src/era/mi/components/gui/GUIMux.java b/LogicUI/src/era/mi/components/gui/GUIMux.java
new file mode 100644 (file)
index 0000000..6af7f5d
--- /dev/null
@@ -0,0 +1,28 @@
+package era.mi.components.gui;\r
+\r
+import era.mi.logic.components.Mux;\r
+import era.mi.logic.wires.WireArray;\r
+import net.haspamelodica.swt.helper.gcs.GeneralGC;\r
+\r
+public class GUIMux extends Mux implements BasicGUIComponent\r
+{\r
+       private final int inputCount;\r
+\r
+       public GUIMux(int processTime, WireArray out, WireArray select, WireArray... inputs)\r
+       {\r
+               super(processTime, out, select, inputs);\r
+               this.inputCount = inputs.length;\r
+       }\r
+       @Override\r
+       public void render(GeneralGC gc)\r
+       {\r
+               double height = inputCount * 10;\r
+               if(height < 20)\r
+                       height = 20;\r
+               gc.drawPolygon(new double[] {\r
+                               0, 0,\r
+                               20, 10,\r
+                               20, height + 10,\r
+                               0, height + 20});\r
+       }\r
+}
\ No newline at end of file
index 42ad035..0275db1 160000 (submodule)
--- a/SWTHelper
+++ b/SWTHelper
@@ -1 +1 @@
-Subproject commit 42ad03598e4fb87df86e9e60c7abacb27015918d
+Subproject commit 0275db10c78d3c3d98bf197eca5f29e4556ffb90