X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=net.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fmodel%2Fcomponents%2Fatomic%2FGUIMerger.java;h=804f871d98c4e37f1b0814650e1c1dec09849b5b;hb=0a04a4ed66ecebd4254541c4977599f6052c115a;hp=3ea238d4fb4ae6c0569e943db0d30116f8e8afc3;hpb=77f1a4885b121ab2cf8a518cf6b10cb88b9ba4c9;p=Mograsim.git diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIMerger.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIMerger.java index 3ea238d4..804f871d 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIMerger.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUIMerger.java @@ -1,18 +1,18 @@ package net.mograsim.logic.model.model.components.atomic; -import com.google.gson.JsonElement; -import com.google.gson.JsonPrimitive; +import org.eclipse.swt.SWT; import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.core.types.BitVectorFormatter; -import net.mograsim.logic.core.wires.Wire.ReadEnd; +import net.mograsim.logic.core.wires.CoreWire.ReadEnd; import net.mograsim.logic.model.model.ViewModelModifiable; import net.mograsim.logic.model.model.components.GUIComponent; import net.mograsim.logic.model.model.wires.Pin; +import net.mograsim.logic.model.model.wires.PinUsage; import net.mograsim.logic.model.modeladapter.ViewLogicModelAdapter; import net.mograsim.logic.model.modeladapter.componentadapters.MergerAdapter; -import net.mograsim.logic.model.serializing.IdentifierGetter; +import net.mograsim.logic.model.serializing.IdentifyParams; import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator; import net.mograsim.preferences.ColorDefinition; import net.mograsim.preferences.ColorManager; @@ -24,19 +24,25 @@ public class GUIMerger extends GUIComponent private static final double heightPerPin = 10; public final int logicWidth; + private final Pin outputPin; private final ReadEnd[] inputEnds; private ReadEnd outputEnd; + public GUIMerger(ViewModelModifiable model, int logicWidth) + { + this(model, logicWidth, null); + } + public GUIMerger(ViewModelModifiable model, int logicWidth, String name) { super(model, name); this.logicWidth = logicWidth; - setSize(width, logicWidth * heightPerPin); - double inputHeight = 0; - for (int i = 0; i < logicWidth; i++, inputHeight += 10) - addPin(new Pin(this, "I" + i, 1, 0, inputHeight)); - addPin(new Pin(this, "O", logicWidth, width, (logicWidth - 1) * heightPerPin / 2)); + setSize(width, (logicWidth - 1) * heightPerPin); + double inputHeight = (logicWidth - 1) * heightPerPin; + for (int i = 0; i < logicWidth; i++, inputHeight -= 10) + addPin(new Pin(this, "I" + i, 1, PinUsage.TRISTATE, 0, inputHeight)); + addPin(this.outputPin = new Pin(this, "O", logicWidth, PinUsage.TRISTATE, width, (logicWidth - 1) * heightPerPin / 2)); inputEnds = new ReadEnd[logicWidth]; } @@ -46,27 +52,43 @@ public class GUIMerger extends GUIComponent double posX = getPosX(); double posY = getPosY(); + ColorDefinition c = BitVectorFormatter.formatAsColor(outputEnd); + if (c != null) + gc.setForeground(ColorManager.current().toColor(c)); + gc.setLineWidth( + Preferences.current().getDouble("net.mograsim.logic.model.linewidth.wire." + (logicWidth == 1 ? "singlebit" : "multibit"))); + double outLineY = posY + (logicWidth - 1) * heightPerPin / 2; + gc.drawLine(posX + width / 2, outLineY, posX + width, outLineY); + gc.setLineWidth(Preferences.current().getDouble("net.mograsim.logic.model.linewidth.wire.singlebit")); double inputHeight = posY; for (int i = 0; i < logicWidth; i++, inputHeight += 10) { - ColorDefinition c = BitVectorFormatter.formatAsColor(inputEnds[i]); + c = BitVectorFormatter.formatAsColor(inputEnds[i]); if (c != null) gc.setForeground(ColorManager.current().toColor(c)); gc.drawLine(posX, inputHeight, posX + width / 2, inputHeight); } gc.setForeground(Preferences.current().getColor("net.mograsim.logic.model.color.foreground")); + int oldLineCap = gc.getLineCap(); + int lineJoin = gc.getLineJoin(); + // TODO find better "replacement" for JOIN_BEVEL + // TODO it looks weird that the vertical line is thinner than the single multibit wire. + gc.setLineCap(lineJoin == SWT.JOIN_MITER ? SWT.CAP_SQUARE : lineJoin == SWT.JOIN_ROUND ? SWT.CAP_ROUND : SWT.CAP_SQUARE); gc.drawLine(posX + width / 2, posY, posX + width / 2, posY + heightPerPin * (logicWidth - 1)); - ColorDefinition c = BitVectorFormatter.formatAsColor(outputEnd); - if (c != null) - gc.setForeground(ColorManager.current().toColor(c)); - double outLineY = posY + (logicWidth - 1) * heightPerPin / 2; - gc.drawLine(posX + width / 2, outLineY, posX + width, outLineY); + gc.setLineWidth(Preferences.current().getDouble("net.mograsim.logic.model.linewidth.default")); + gc.setLineCap(oldLineCap); + } + + @Override + public String getIDForSerializing(IdentifyParams idParams) + { + return "GUIMerger"; } @Override - public JsonElement getParamsForSerializing(IdentifierGetter idGetter) + public Integer getParamsForSerializing(IdentifyParams idParams) { - return new JsonPrimitive(logicWidth); + return logicWidth; } public void setLogicModelBinding(ReadEnd[] inputEnds, ReadEnd outputEnd) @@ -75,6 +97,11 @@ public class GUIMerger extends GUIComponent this.outputEnd = outputEnd; } + public Pin getOutputPin() + { + return outputPin; + } + static { ViewLogicModelAdapter.addComponentAdapter(new MergerAdapter());