X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fmodel%2Fcomponents%2Fatomic%2FGUISplitter.java;h=43b744e49971c4b14033226093641345975f2ef6;hb=039f31334c661633b71e945aa4332cedb7055526;hp=2211114f1abf69dff263ee8e80a29c774544934e;hpb=41c5ae2a1218973a12df311add1bf1366e09797c;p=Mograsim.git diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUISplitter.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUISplitter.java index 2211114f..43b744e4 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUISplitter.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/atomic/GUISplitter.java @@ -1,7 +1,6 @@ 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; @@ -10,9 +9,10 @@ import net.mograsim.logic.core.wires.Wire.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.SplitterAdapter; -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; @@ -20,23 +20,30 @@ import net.mograsim.preferences.Preferences; public class GUISplitter extends GUIComponent { - private static final double width = 20; + private static final double width = 10; private static final double heightPerPin = 10; public final int logicWidth; + private final Pin inputPin; private ReadEnd inputEnd; - private ReadEnd[] outputEnds; + private final ReadEnd[] outputEnds; + + public GUISplitter(ViewModelModifiable model, int logicWidth) + { + this(model, logicWidth, null); + } public GUISplitter(ViewModelModifiable model, int logicWidth, String name) { super(model, name); this.logicWidth = logicWidth; - setSize(width, logicWidth * heightPerPin); - addPin(new Pin(this, "I", logicWidth, 0, logicWidth * heightPerPin / 2)); - double outputHeight = 0; - for (int i = 0; i < logicWidth; i++, outputHeight += 10) - addPin(new Pin(this, "O" + i, 1, width, outputHeight)); + setSize(width, (logicWidth - 1) * heightPerPin); + addPin(this.inputPin = new Pin(this, "I", logicWidth, PinUsage.TRISTATE, 0, (logicWidth - 1) * heightPerPin / 2)); + double outputHeight = (logicWidth - 1) * heightPerPin; + for (int i = 0; i < logicWidth; i++, outputHeight -= 10) + addPin(new Pin(this, "O" + i, 1, PinUsage.TRISTATE, width, outputHeight)); + outputEnds = new ReadEnd[logicWidth]; } @Override @@ -48,9 +55,11 @@ public class GUISplitter extends GUIComponent ColorDefinition c = BitVectorFormatter.formatAsColor(inputEnd); if (c != null) gc.setForeground(ColorManager.current().toColor(c)); - gc.drawLine(posX, posY + heightPerPin * logicWidth / 2, posX + width / 2, posY + heightPerPin * logicWidth / 2); - gc.setForeground(Preferences.current().getColor("net.mograsim.logic.model.color.foreground")); - gc.drawLine(posX + width / 2, posY, posX + width / 2, posY + heightPerPin * (logicWidth - 1)); + gc.setLineWidth( + Preferences.current().getDouble("net.mograsim.logic.model.linewidth.wire." + (logicWidth == 1 ? "singlebit" : "multibit"))); + double inLineY = posY + (logicWidth - 1) * heightPerPin / 2; + gc.drawLine(posX, inLineY, posX + width / 2, inLineY); + gc.setLineWidth(Preferences.current().getDouble("net.mograsim.logic.model.linewidth.wire.singlebit")); double outputHeight = posY; for (int i = 0; i < logicWidth; i++, outputHeight += 10) { @@ -59,18 +68,38 @@ public class GUISplitter extends GUIComponent gc.setForeground(ColorManager.current().toColor(c)); gc.drawLine(posX + width / 2, outputHeight, posX + width, outputHeight); } + 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)); + gc.setLineWidth(Preferences.current().getDouble("net.mograsim.logic.model.linewidth.default")); + gc.setLineCap(oldLineCap); } @Override - public JsonElement getParamsForSerializing(IdentifierGetter idGetter) + public String getIDForSerializing(IdentifyParams idParams) { - return new JsonPrimitive(logicWidth); + return "GUISplitter"; + } + + @Override + public Integer getParamsForSerializing(IdentifyParams idParams) + { + return logicWidth; } public void setLogicModelBinding(ReadEnd inputEnd, ReadEnd[] outputEnds) { this.inputEnd = inputEnd; - this.outputEnds = outputEnds; + System.arraycopy(outputEnds, 0, this.outputEnds, 0, logicWidth); + } + + public Pin getInputPin() + { + return inputPin; } static