From: Christian Femers Date: Fri, 28 Jun 2019 17:26:19 +0000 (+0200) Subject: Added an visual-only text component and modelling helper class X-Git-Url: https://mograsim.net/gitweb/?a=commitdiff_plain;h=fd422eab477a9e63b7db45a5d0e899373a2856a0;p=Mograsim.git Added an visual-only text component and modelling helper class --- 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 index 00000000..871d4f9d --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/TextComponent.java @@ -0,0 +1,37 @@ +package net.mograsim.logic.ui.model.components; + +import org.eclipse.swt.graphics.Color; + +import net.haspamelodica.swt.helper.gcs.GeneralGC; +import net.haspamelodica.swt.helper.swtobjectwrappers.Point; +import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; +import net.mograsim.logic.ui.model.ViewModelModifiable; +import net.mograsim.logic.ui.modeladapter.ViewLogicModelAdapter; +import net.mograsim.logic.ui.modeladapter.componentadapters.NoLogicAdapter; +import net.mograsim.preferences.Preferences; + +public class TextComponent extends GUIComponent +{ + private final String text; + + public TextComponent(ViewModelModifiable model, String text) + { + super(model); + this.text = text; + } + + @Override + public void render(GeneralGC gc, Rectangle visibleRegion) + { + Point textExtent = gc.textExtent(text); + Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text"); + if (textColor != null) + gc.setForeground(textColor); + gc.drawText(text, getPosX() - textExtent.x / 2, getPosY() - textExtent.y / 2, true); + } + + static + { + ViewLogicModelAdapter.addComponentAdapter(NoLogicAdapter.forClass(TextComponent.class)); + } +} 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 index 00000000..c3d34787 --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/modeladapter/componentadapters/NoLogicAdapter.java @@ -0,0 +1,46 @@ +package net.mograsim.logic.ui.modeladapter.componentadapters; + +import java.util.Map; + +import net.mograsim.logic.core.timeline.Timeline; +import net.mograsim.logic.core.wires.Wire; +import net.mograsim.logic.ui.model.components.GUIComponent; +import net.mograsim.logic.ui.model.wires.Pin; +import net.mograsim.logic.ui.modeladapter.LogicModelParameters; + +/** + * For GUIComponents that do not have any simulation logic behaviour + * + * @author Christian Femers + */ +public class NoLogicAdapter implements ComponentAdapter +{ + private final Class guiComponentClass; + + public NoLogicAdapter(Class guiComponentClass) + { + this.guiComponentClass = guiComponentClass; + } + + @Override + public Class getSupportedClass() + { + return guiComponentClass; + } + + @Override + public void createAndLinkComponent(Timeline timeline, LogicModelParameters params, T guiComponent, Map logicWiresPerPin) + { + // do nothing + } + + /** + * Creates a new {@link NoLogicAdapter} for the given GUIComponent class. + * + * @author Christian Femers + */ + public static NoLogicAdapter forClass(Class guiComponentClass) + { + return new NoLogicAdapter<>(guiComponentClass); + } +} 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 index 00000000..61252ea4 --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/util/ModellingTool.java @@ -0,0 +1,36 @@ +package net.mograsim.logic.ui.util; + +import net.mograsim.logic.ui.model.ViewModelModifiable; +import net.mograsim.logic.ui.model.components.GUIComponent; +import net.mograsim.logic.ui.model.wires.ConnectionPoint; +import net.mograsim.logic.ui.model.wires.GUIWire; + +public class ModellingTool +{ + private ViewModelModifiable model; + + ModellingTool(ViewModelModifiable model) + { + this.model = model; + } + + public GUIWire connect(GUIComponent a, GUIComponent b, String pinA, String pinB) + { + return connect(a.getPin(pinA), b.getPin(pinB)); + } + + public GUIWire connect(ConnectionPoint a, GUIComponent b, String pinB) + { + return connect(a, b.getPin(pinB)); + } + + public GUIWire connect(ConnectionPoint a, ConnectionPoint b) + { + return new GUIWire(model, a, b); + } + + public static ModellingTool createFor(ViewModelModifiable model) + { + return new ModellingTool(model); + } +}