Added an visual-only text component and modelling helper class
authorChristian Femers <femers@in.tum.de>
Fri, 28 Jun 2019 17:26:19 +0000 (19:26 +0200)
committerChristian Femers <femers@in.tum.de>
Fri, 28 Jun 2019 17:26:19 +0000 (19:26 +0200)
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/TextComponent.java [new file with mode: 0644]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/NoLogicAdapter.java [new file with mode: 0644]
net.mograsim.logic.ui/src/net/mograsim/logic/ui/util/ModellingTool.java [new file with mode: 0644]

diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/TextComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/TextComponent.java
new file mode 100644 (file)
index 0000000..0f8b542
--- /dev/null
@@ -0,0 +1,37 @@
+package net.mograsim.logic.ui.model.components;\r
+\r
+import org.eclipse.swt.graphics.Color;\r
+\r
+import net.haspamelodica.swt.helper.gcs.GeneralGC;\r
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;\r
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;\r
+import net.mograsim.logic.ui.model.ViewModelModifiable;\r
+import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter;\r
+import net.mograsim.logic.ui.modeladapter.componentadapters.NoLogicAdapter;\r
+import net.mograsim.preferences.Preferences;\r
+\r
+public class TextComponent extends GUIComponent\r
+{\r
+       private final String text;\r
+\r
+       public TextComponent(ViewModelModifiable model, String text)\r
+       {\r
+               super(model);\r
+               this.text = text;\r
+       }\r
+\r
+       @Override\r
+       public void render(GeneralGC gc, Rectangle visibleRegion)\r
+       {\r
+               Point textExtent = gc.textExtent(text);\r
+               Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text");\r
+               if (textColor != null)\r
+                       gc.setForeground(textColor);\r
+               gc.drawText(text, getPosX() - textExtent.x / 2, getPosY() - textExtent.y / 2, true);\r
+       }\r
+\r
+       static\r
+       {\r
+               ViewLogicModelAdapter.addComponentAdapter(NoLogicAdapter.forClass(TextComponent.class));\r
+       }\r
+}\r
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/NoLogicAdapter.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/NoLogicAdapter.java
new file mode 100644 (file)
index 0000000..92742d3
--- /dev/null
@@ -0,0 +1,46 @@
+package net.mograsim.logic.ui.modeladapter.componentadapters;\r
+\r
+import java.util.Map;\r
+\r
+import net.mograsim.logic.core.timeline.Timeline;\r
+import net.mograsim.logic.core.wires.Wire;\r
+import net.mograsim.logic.ui.model.components.GUIComponent;\r
+import net.mograsim.logic.ui.model.wires.Pin;\r
+import net.mograsim.logic.ui.modeladapter.LogicModelParameters;\r
+\r
+/**\r
+ * For GUIComponents that do not have any simulation logic behaviour\r
+ *\r
+ * @author Christian Femers\r
+ */\r
+public class NoLogicAdapter<T extends GUIComponent> implements ComponentAdapter<T>\r
+{\r
+       private final Class<T> guiComponentClass;\r
+\r
+       public NoLogicAdapter(Class<T> guiComponentClass)\r
+       {\r
+               this.guiComponentClass = guiComponentClass;\r
+       }\r
+\r
+       @Override\r
+       public Class<T> getSupportedClass()\r
+       {\r
+               return guiComponentClass;\r
+       }\r
+\r
+       @Override\r
+       public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, T guiComponent, Map<Pin, Wire> logicWiresPerPin)\r
+       {\r
+               // do nothing\r
+       }\r
+\r
+       /**\r
+        * Creates a new {@link NoLogicAdapter} for the given GUIComponent class.\r
+        * \r
+        * @author Christian Femers\r
+        */\r
+       public static <T extends GUIComponent> NoLogicAdapter<T> forClass(Class<T> guiComponentClass)\r
+       {\r
+               return new NoLogicAdapter<>(guiComponentClass);\r
+       }\r
+}\r
diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/util/ModellingTool.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/util/ModellingTool.java
new file mode 100644 (file)
index 0000000..8f21aa4
--- /dev/null
@@ -0,0 +1,36 @@
+package net.mograsim.logic.ui.util;\r
+\r
+import net.mograsim.logic.ui.model.ViewModelModifiable;\r
+import net.mograsim.logic.ui.model.components.GUIComponent;\r
+import net.mograsim.logic.ui.model.wires.ConnectionPoint;\r
+import net.mograsim.logic.ui.model.wires.GUIWire;\r
+\r
+public class ModellingTool\r
+{\r
+       private ViewModelModifiable model;\r
+\r
+       ModellingTool(ViewModelModifiable model)\r
+       {\r
+               this.model = model;\r
+       }\r
+\r
+       public GUIWire connect(GUIComponent a, GUIComponent b, String pinA, String pinB)\r
+       {\r
+               return connect(a.getPin(pinA), b.getPin(pinB));\r
+       }\r
+\r
+       public GUIWire connect(ConnectionPoint a, GUIComponent b, String pinB)\r
+       {\r
+               return connect(a, b.getPin(pinB));\r
+       }\r
+\r
+       public GUIWire connect(ConnectionPoint a, ConnectionPoint b)\r
+       {\r
+               return new GUIWire(model, a, b);\r
+       }\r
+\r
+       public static ModellingTool createFor(ViewModelModifiable model)\r
+       {\r
+               return new ModellingTool(model);\r
+       }\r
+}\r