From 7aa6eab72deba89dbc22ae9c90ffb5df53f9d496 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Tue, 18 Jun 2019 18:01:32 +0200 Subject: [PATCH] Pins now have names --- net.mograsim.logic.ui/FullAdder.json | 5 +++ net.mograsim.logic.ui/HalfAdder.json | 4 +++ net.mograsim.logic.ui/Test.json | 1 + .../components/AtomicAm2901NANDBased.java | 5 ++- .../ui/model/components/GUIBitDisplay.java | 2 +- .../components/GUICustomComponentCreator.java | 2 +- .../ui/model/components/GUIManualSwitch.java | 2 +- .../components/SimpleRectangularGUIGate.java | 5 +-- .../SimpleRectangularSubmodelComponent.java | 7 ++-- .../model/components/SubmodelComponent.java | 36 +++++++------------ .../components/SubmodelComponentParams.java | 1 + .../logic/ui/model/wires/MovablePin.java | 4 +-- .../mograsim/logic/ui/model/wires/Pin.java | 5 +-- .../logic/ui/model/wires/WireCrossPoint.java | 2 +- 14 files changed, 42 insertions(+), 39 deletions(-) diff --git a/net.mograsim.logic.ui/FullAdder.json b/net.mograsim.logic.ui/FullAdder.json index 782652d5..b24145f7 100644 --- a/net.mograsim.logic.ui/FullAdder.json +++ b/net.mograsim.logic.ui/FullAdder.json @@ -9,6 +9,7 @@ mograsim version: 0.1.0 "x": 0.0, "y": 5.0 }, + "name": "Input pin #0", "logicWidth": 1 }, { @@ -16,6 +17,7 @@ mograsim version: 0.1.0 "x": 0.0, "y": 15.0 }, + "name": "Input pin #1", "logicWidth": 1 }, { @@ -23,6 +25,7 @@ mograsim version: 0.1.0 "x": 0.0, "y": 25.0 }, + "name": "Input pin #2", "logicWidth": 1 }, { @@ -30,6 +33,7 @@ mograsim version: 0.1.0 "x": 35.0, "y": 5.0 }, + "name": "Output pin #0", "logicWidth": 1 }, { @@ -37,6 +41,7 @@ mograsim version: 0.1.0 "x": 35.0, "y": 15.0 }, + "name": "Output pin #1", "logicWidth": 1 } ], diff --git a/net.mograsim.logic.ui/HalfAdder.json b/net.mograsim.logic.ui/HalfAdder.json index 802ba0d1..b1e8f85d 100644 --- a/net.mograsim.logic.ui/HalfAdder.json +++ b/net.mograsim.logic.ui/HalfAdder.json @@ -9,6 +9,7 @@ mograsim version: 0.1.0 "x": 0.0, "y": 5.0 }, + "name": "A", "logicWidth": 1 }, { @@ -16,6 +17,7 @@ mograsim version: 0.1.0 "x": 0.0, "y": 15.0 }, + "name": "B", "logicWidth": 1 }, { @@ -23,6 +25,7 @@ mograsim version: 0.1.0 "x": 35.0, "y": 5.0 }, + "name": "Y", "logicWidth": 1 }, { @@ -30,6 +33,7 @@ mograsim version: 0.1.0 "x": 35.0, "y": 15.0 }, + "name": "Z", "logicWidth": 1 } ], diff --git a/net.mograsim.logic.ui/Test.json b/net.mograsim.logic.ui/Test.json index 36e1ca9d..651205aa 100644 --- a/net.mograsim.logic.ui/Test.json +++ b/net.mograsim.logic.ui/Test.json @@ -9,6 +9,7 @@ mograsim version: 0.1.0 "x": 0.0, "y": 5.0 }, + "name": "Input pin #0", "logicWidth": 1 } ], diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/AtomicAm2901NANDBased.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/AtomicAm2901NANDBased.java index 16587537..b74f733a 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/AtomicAm2901NANDBased.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/AtomicAm2901NANDBased.java @@ -9,7 +9,6 @@ import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.ui.model.ViewModelModifiable; import net.mograsim.logic.ui.model.wires.Pin; -// TODO make a superclass public class AtomicAm2901NANDBased extends GUIComponent { public final List inputNames; @@ -24,9 +23,9 @@ public class AtomicAm2901NANDBased extends GUIComponent this.outputNames = List.of("Y1", "Y2", "Y3", "Y4", "F=0", "Cn+4", "OVR", "F3_ORAMn+3", "ORAMn", "OQn", "OQn+3"); setSize(50, inputNames.size() * 10); for (int i = 0; i < inputNames.size(); i++) - addPin(new Pin(this, 1, 0, 5 + 10 * i)); + addPin(new Pin(this, "Input pin #" + i, 1, 0, 5 + 10 * i)); for (int i = 0; i < outputNames.size(); i++) - addPin(new Pin(this, 1, 50, 5 + 10 * i)); + addPin(new Pin(this, "Output pin #" + i, 1, 50, 5 + 10 * i)); } @Override diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java index ec397c02..82399c13 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java @@ -28,7 +28,7 @@ public class GUIBitDisplay extends GUIComponent logicObs = (i) -> requestRedraw(); setSize(width, height); - addPin(this.inputPin = new Pin(this, 1, 0, height / 2)); + addPin(this.inputPin = new Pin(this, "", 1, 0, height / 2)); } @Override diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUICustomComponentCreator.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUICustomComponentCreator.java index ea45b61a..2f3e405e 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUICustomComponentCreator.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUICustomComponentCreator.java @@ -100,7 +100,7 @@ public final class GUICustomComponentCreator comp.setSize(params.width, params.height); for (InterfacePinParams iPinParams : params.interfacePins) { - comp.addSubmodelInterface(iPinParams.logicWidth, iPinParams.location.x, iPinParams.location.y); + comp.addSubmodelInterface(iPinParams.name, iPinParams.logicWidth, iPinParams.location.x, iPinParams.location.y); } return comp; } diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java index 8b9bcd90..03423508 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java @@ -30,7 +30,7 @@ public class GUIManualSwitch extends GUIComponent logicObs = (i) -> requestRedraw(); setSize(width, height); - addPin(this.outputPin = new Pin(this, 1, width, height / 2)); + addPin(this.outputPin = new Pin(this, "", 1, width, height / 2)); } @Override diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularGUIGate.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularGUIGate.java index aae03d29..cbb8ab7e 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularGUIGate.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularGUIGate.java @@ -35,7 +35,7 @@ public class SimpleRectangularGUIGate extends GUIComponent this.logicWidth = logicWidth; this.isInverted = isInverted; this.rectWidth = width - (isInverted ? invertedCircleDiam : 0); - this.outputPin = new MovablePin(this, logicWidth, width, 0); + this.outputPin = new MovablePin(this, "Y", logicWidth, width, 0); addPin(outputPin); this.inputPins = new ArrayList<>(); this.inputPinsUnmodifiable = Collections.unmodifiableList(inputPins); @@ -52,7 +52,8 @@ public class SimpleRectangularGUIGate extends GUIComponent else if (oldInputCount < inputCount) for (int i = oldInputCount; i < inputCount; i++) { - Pin pin = new Pin(this, logicWidth, 0, pinDistance / 2 + i * pinDistance); + // TODO what for more than 26 input pins? + Pin pin = new Pin(this, "A" + i, logicWidth, 0, pinDistance / 2 + i * pinDistance); inputPins.add(pin); addPin(pin); } diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularSubmodelComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularSubmodelComponent.java index 51e5b28f..44b402d3 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularSubmodelComponent.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularSubmodelComponent.java @@ -62,7 +62,8 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent else if (oldInputCount < inputCount) for (int i = oldInputCount; i < inputCount; i++) { - Pin submodelPin = addSubmodelInterface(logicWidth, 0, pinDistance / 2 + i * pinDistance); + // TODO pin names + Pin submodelPin = addSubmodelInterface("Input pin #" + i, logicWidth, 0, pinDistance / 2 + i * pinDistance); inputSubmodelPins.add(submodelPin); inputSupermodelPins.add(getSupermodelPin(submodelPin)); } @@ -81,7 +82,8 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent else if (oldOutputCount < outputCount) for (int i = oldOutputCount; i < outputCount; i++) { - Pin submodelPin = addSubmodelInterface(logicWidth, width, pinDistance / 2 + i * pinDistance); + // TODO pin names + Pin submodelPin = addSubmodelInterface("Output pin #" + i, logicWidth, width, pinDistance / 2 + i * pinDistance); outputSubmodelPins.add(submodelPin); outputSupermodelPins.add(getSupermodelPin(submodelPin)); } @@ -119,6 +121,7 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent Point textExtent = gc.textExtent(label); gc.drawText(label, posX + (getBounds().width - textExtent.x) / 2, posY + (getBounds().height - textExtent.y) / 2, true); gc.setFont(oldFont); + // TODO draw pin names } @Override diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java index 16c8c2ad..9fa933bd 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java @@ -21,15 +21,16 @@ import net.mograsim.logic.ui.model.components.SubmodelComponentParams.InnerPinPa import net.mograsim.logic.ui.model.components.SubmodelComponentParams.InnerWireParams; import net.mograsim.logic.ui.model.components.SubmodelComponentParams.InterfacePinParams; import net.mograsim.logic.ui.model.wires.GUIWire; +import net.mograsim.logic.ui.model.wires.MovablePin; import net.mograsim.logic.ui.model.wires.Pin; public abstract class SubmodelComponent extends GUIComponent { protected final ViewModelModifiable submodelModifiable; public final ViewModel submodel; - private final Map submodelPinsPerSupermodelPin; + private final Map submodelPinsPerSupermodelPin; private final Map submodelPinsPerSupermodelPinUnmodifiable; - private final Map supermodelPinsPerSubmodelPin; + private final Map supermodelPinsPerSubmodelPin; private final Map supermodelPinsPerSubmodelPinUnmodifiable; private final SubmodelInterface submodelInterface; @@ -61,7 +62,7 @@ public abstract class SubmodelComponent extends GUIComponent { this.submodelScale = submodelScale; - for (Entry e : supermodelPinsPerSubmodelPin.entrySet()) + for (Entry e : supermodelPinsPerSubmodelPin.entrySet()) e.getKey().setRelPos(e.getValue().getRelX() * submodelScale, e.getValue().getRelY() * submodelScale); requestRedraw();// needed if there is no submodel interface pin @@ -75,12 +76,12 @@ public abstract class SubmodelComponent extends GUIComponent /** * Returns the submodel pin. */ - protected Pin addSubmodelInterface(int logicWidth, double relX, double relY) + protected Pin addSubmodelInterface(String name, int logicWidth, double relX, double relY) { - PinMovable submodelPin = new PinMovable(submodelInterface, logicWidth, relX / submodelScale, relY / submodelScale); + MovablePin submodelPin = new MovablePin(submodelInterface, name, logicWidth, relX / submodelScale, relY / submodelScale); submodelInterface.addPin(submodelPin); - PinMovable supermodelPin = new PinMovable(this, logicWidth, relX, relY); + MovablePin supermodelPin = new MovablePin(this, name, logicWidth, relX, relY); addPin(supermodelPin); submodelPinsPerSupermodelPin.put(supermodelPin, submodelPin); @@ -92,8 +93,8 @@ public abstract class SubmodelComponent extends GUIComponent protected void moveSubmodelInterface(Pin supermodelPin, double relX, double relY) { - PinMovable submodelPin = getSubmodelMovablePin(supermodelPin); - PinMovable supermodelPinMovable = getSupermodelMovablePin(submodelPin); + MovablePin submodelPin = getSubmodelMovablePin(supermodelPin); + MovablePin supermodelPinMovable = getSupermodelMovablePin(submodelPin); submodelPin.setRelPos(relX / submodelScale, relY / submodelScale); supermodelPinMovable.setRelPos(relX, relY); @@ -123,7 +124,7 @@ public abstract class SubmodelComponent extends GUIComponent return getSupermodelMovablePin(submodelPin); } - protected PinMovable getSupermodelMovablePin(Pin submodelPin) + protected MovablePin getSupermodelMovablePin(Pin submodelPin) { return supermodelPinsPerSubmodelPin.get(submodelPin); } @@ -138,7 +139,7 @@ public abstract class SubmodelComponent extends GUIComponent return getSubmodelMovablePin(supermodelPin); } - protected PinMovable getSubmodelMovablePin(Pin supermodelPin) + protected MovablePin getSubmodelMovablePin(Pin supermodelPin) { return submodelPinsPerSupermodelPin.get(supermodelPin); } @@ -195,20 +196,6 @@ public abstract class SubmodelComponent extends GUIComponent return true; } - private static class PinMovable extends Pin - { - public PinMovable(GUIComponent component, int logicWidth, double relX, double relY) - { - super(component, logicWidth, relX, relY); - } - - @Override - protected void setRelPos(double relX, double relY) - { - super.setRelPos(relX, relY); - } - } - /** * @return {@link SubmodelComponentParams}, which describe this {@link SubmodelComponent}. */ @@ -230,6 +217,7 @@ public abstract class SubmodelComponent extends GUIComponent InterfacePinParams iPinParams = new InterfacePinParams(); iPins[i] = iPinParams; iPinParams.location = p.getRelPos(); + iPinParams.name = p.name; iPinParams.logicWidth = p.logicWidth; i++; } diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponentParams.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponentParams.java index 5fd7ab5e..f2403552 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponentParams.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponentParams.java @@ -20,6 +20,7 @@ public class SubmodelComponentParams public static class InterfacePinParams { public Point location; + public String name; public int logicWidth; } diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/MovablePin.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/MovablePin.java index 669bb1be..098d7747 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/MovablePin.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/MovablePin.java @@ -4,9 +4,9 @@ import net.mograsim.logic.ui.model.components.GUIComponent; public class MovablePin extends Pin { - public MovablePin(GUIComponent component, int logicWidth, double relX, double relY) + public MovablePin(GUIComponent component, String name, int logicWidth, double relX, double relY) { - super(component, logicWidth, relX, relY); + super(component, name, logicWidth, relX, relY); } @Override diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java index f8325a09..9be08003 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java @@ -8,10 +8,10 @@ import net.haspamelodica.swt.helper.swtobjectwrappers.Point; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.ui.model.components.GUIComponent; -//TODO add an ID and/or a name public class Pin { public final GUIComponent component; + public final String name; public final int logicWidth; protected double relX; @@ -20,9 +20,10 @@ public class Pin private final List> pinMovedListeners; private final List redrawListeners; - public Pin(GUIComponent component, int logicWidth, double relX, double relY) + public Pin(GUIComponent component, String name, int logicWidth, double relX, double relY) { this.component = component; + this.name = name; this.logicWidth = logicWidth; this.relX = relX; this.relY = relY; diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java index be0f5d56..e48d7756 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java @@ -28,7 +28,7 @@ public class WireCrossPoint extends GUIComponent this.logicWidth = logicWidth; setSize(CIRCLE_DIAM, CIRCLE_DIAM); - addPin(this.pin = new Pin(this, logicWidth, CIRCLE_RADIUS, CIRCLE_RADIUS)); + addPin(this.pin = new Pin(this, "", logicWidth, CIRCLE_RADIUS, CIRCLE_RADIUS)); } public void moveCenterTo(double x, double y) -- 2.17.1