--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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