Pins now have names
authorDaniel Kirschten <daniel.kirschten@gmx.de>
Tue, 18 Jun 2019 16:01:32 +0000 (18:01 +0200)
committerDaniel Kirschten <daniel.kirschten@gmx.de>
Tue, 18 Jun 2019 16:02:26 +0000 (18:02 +0200)
14 files changed:
net.mograsim.logic.ui/FullAdder.json
net.mograsim.logic.ui/HalfAdder.json
net.mograsim.logic.ui/Test.json
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/AtomicAm2901NANDBased.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIBitDisplay.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUICustomComponentCreator.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/GUIManualSwitch.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularGUIGate.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SimpleRectangularSubmodelComponent.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponentParams.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/MovablePin.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/WireCrossPoint.java

index 782652d..b24145f 100644 (file)
@@ -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
     }
   ],
index 802ba0d..b1e8f85 100644 (file)
@@ -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
     }
   ],
index 36e1ca9..651205a 100644 (file)
@@ -9,6 +9,7 @@ mograsim version: 0.1.0
         "x": 0.0,
         "y": 5.0
       },
+      "name": "Input pin #0",
       "logicWidth": 1
     }
   ],
index 1658753..b74f733 100644 (file)
@@ -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<String> 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
index ec397c0..82399c1 100644 (file)
@@ -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
index ea45b61..2f3e405 100644 (file)
@@ -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;
        }
index 8b9bcd9..0342350 100644 (file)
@@ -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
index aae03d2..cbb8ab7 100644 (file)
@@ -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);
                        }
index 51e5b28..44b402d 100644 (file)
@@ -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
index 16c8c2a..9fa933b 100644 (file)
@@ -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<PinMovable, PinMovable> submodelPinsPerSupermodelPin;
+       private final Map<MovablePin, MovablePin> submodelPinsPerSupermodelPin;
        private final Map<Pin, Pin> submodelPinsPerSupermodelPinUnmodifiable;
-       private final Map<PinMovable, PinMovable> supermodelPinsPerSubmodelPin;
+       private final Map<MovablePin, MovablePin> supermodelPinsPerSubmodelPin;
        private final Map<Pin, Pin> supermodelPinsPerSubmodelPinUnmodifiable;
        private final SubmodelInterface submodelInterface;
 
@@ -61,7 +62,7 @@ public abstract class SubmodelComponent extends GUIComponent
        {
                this.submodelScale = submodelScale;
 
-               for (Entry<PinMovable, PinMovable> e : supermodelPinsPerSubmodelPin.entrySet())
+               for (Entry<MovablePin, MovablePin> 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++;
                }
index 5fd7ab5..f240355 100644 (file)
@@ -20,6 +20,7 @@ public class SubmodelComponentParams
        public static class InterfacePinParams
        {
                public Point location;
+               public String name;
                public int logicWidth;
        }
 
index 669bb1b..098d774 100644 (file)
@@ -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
index f8325a0..9be0800 100644 (file)
@@ -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<Consumer<? super Pin>> pinMovedListeners;
        private final List<Runnable> 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;
index 32f04ae..d5e633d 100644 (file)
@@ -28,7 +28,7 @@ public class WireCrossPoint extends GUIComponent
 \r
                this.logicWidth = logicWidth;\r
                setSize(CIRCLE_DIAM, CIRCLE_DIAM);\r
-               addPin(this.pin = new Pin(this, logicWidth, CIRCLE_RADIUS, CIRCLE_RADIUS));\r
+               addPin(this.pin = new Pin(this, "", logicWidth, CIRCLE_RADIUS, CIRCLE_RADIUS));\r
        }\r
 \r
        public void moveCenterTo(double x, double y)\r