X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.ui%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fui%2Fmodel%2Fcomponents%2Fsubmodels%2FSimpleRectangularSubmodelComponent.java;h=acf9fb262eac966d06ee23aa4c18231c0ba4b736;hb=5ece0acf049bf9af2933f513fe0206565681f622;hp=605e020e18ed35d453f682f25c2bc354a0f65f6d;hpb=01c5d7035474a5eb58f216b6831b2c0d8c174efa;p=Mograsim.git diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SimpleRectangularSubmodelComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SimpleRectangularSubmodelComponent.java index 605e020e..acf9fb26 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SimpleRectangularSubmodelComponent.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SimpleRectangularSubmodelComponent.java @@ -5,25 +5,26 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.function.Function; import org.eclipse.swt.graphics.Color; +import com.google.gson.JsonObject; + import net.haspamelodica.swt.helper.gcs.GeneralGC; -import net.haspamelodica.swt.helper.swtobjectwrappers.Font; -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.model.components.GUIComponent; import net.mograsim.logic.ui.model.wires.MovablePin; import net.mograsim.logic.ui.model.wires.Pin; import net.mograsim.logic.ui.serializing.SubmodelComponentParams; +import net.mograsim.logic.ui.serializing.snippets.Renderer; +import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer; +import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer.SimpleRectangularLikeParams; import net.mograsim.preferences.Preferences; public class SimpleRectangularSubmodelComponent extends SubmodelComponent { - public static String kLabel = "label", kInCount = "input_count", kOutCount = "output_count", kLogicWidth = "logic_width"; - private static final double width = 35; private static final double pinDistance = 10; private static final double pinNameMargin = .5; @@ -38,15 +39,30 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent private final List outputPinNames; private final List outputPinNamesUnmodifiable; + private Renderer symbolRenderer; + public SimpleRectangularSubmodelComponent(ViewModelModifiable model, int logicWidth, String label) { - super(model); + this(model, logicWidth, label, null); + } + + public SimpleRectangularSubmodelComponent(ViewModelModifiable model, int logicWidth, String label, String name) + { + super(model, name); this.label = label; this.logicWidth = logicWidth; this.inputPinNames = new ArrayList<>(); this.inputPinNamesUnmodifiable = Collections.unmodifiableList(inputPinNames); this.outputPinNames = new ArrayList<>(); this.outputPinNamesUnmodifiable = Collections.unmodifiableList(outputPinNames); + + SimpleRectangularLikeParams rendererParams = new SimpleRectangularLikeParams(); + rendererParams.centerText = label; + rendererParams.centerTextHeight = labelFontHeight; + rendererParams.horizontalComponentCenter = getWidth() / 2; + rendererParams.pinLabelHeight = pinNameFontHeight; + rendererParams.pinLabelMargin = pinNameMargin; + symbolRenderer = new SimpleRectangularLikeSymbolRenderer(this, rendererParams); } protected void setInputPins(String... pinNames) @@ -98,28 +114,7 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent @Override protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion) { - Font oldFont = gc.getFont(); - gc.setFont(new Font(oldFont.getName(), labelFontHeight, oldFont.getStyle())); - Point textExtent = gc.textExtent(label); - Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text"); - if (textColor != null) - gc.setForeground(textColor); - gc.drawText(label, getPosX() + (getWidth() - textExtent.x) / 2, getPosY() + (getHeight() - textExtent.y) / 2, true); - gc.setFont(new Font(oldFont.getName(), pinNameFontHeight, oldFont.getStyle())); - for (int i = 0; i < inputPinNames.size(); i++) - { - String pinName = inputPinNames.get(i); - textExtent = gc.textExtent(pinName); - gc.drawText(pinName, getPosX() + pinNameMargin, getPosY() + i * pinDistance + (pinDistance - textExtent.y) / 2, true); - } - for (int i = 0; i < outputPinNames.size(); i++) - { - String pinName = outputPinNames.get(i); - textExtent = gc.textExtent(pinName); - gc.drawText(pinName, getPosX() + width - textExtent.x - pinNameMargin, - getPosY() + i * pinDistance + (pinDistance - textExtent.y) / 2, true); - } - gc.setFont(oldFont); + symbolRenderer.render(gc, visibleRegion); } @Override @@ -131,18 +126,21 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent gc.drawRectangle(getBounds()); } + // serializing + @Override - public SubmodelComponentParams calculateParams() + public SubmodelComponentParams calculateParams(Function getIdentifier) { - SubmodelComponentParams ret = super.calculateParams(); - ret.type = SimpleRectangularSubmodelComponent.class.getSimpleName(); - Map m = new TreeMap<>(); - m.put(kLabel, label); - m.put(kInCount, inputPinNames.toArray()); - m.put(kOutCount, outputPinNames.toArray()); - m.put(kLogicWidth, logicWidth); - ret.specialized = m; - return ret; + SubmodelComponentParams params = super.calculateParams(getIdentifier); + JsonObject symbolRendererParams = new JsonObject(); + symbolRendererParams.addProperty("centerText", label); + symbolRendererParams.addProperty("horizontalComponentCenter", getWidth() / 2); + symbolRendererParams.addProperty("centerTextHeight", labelFontHeight); + symbolRendererParams.addProperty("pinLabelHeight", pinNameFontHeight); + symbolRendererParams.addProperty("pinLabelMargin", pinNameMargin); + params.symbolRendererSnippetID = "SimpleRectangularLikeSymbolRenderer"; + params.symbolRendererParams = symbolRendererParams; + return params; } @Override