SimpleRectangularSubmodelComponent now supports pin names
authorDaniel Kirschten <daniel.kirschten@gmx.de>
Wed, 19 Jun 2019 10:56:26 +0000 (12:56 +0200)
committerDaniel Kirschten <daniel.kirschten@gmx.de>
Wed, 19 Jun 2019 11:03:14 +0000 (13:03 +0200)
30 files changed:
net.mograsim.logic.ui/src/net/mograsim/logic/ui/examples/JsonExample.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/SimpleRectangularSubmodelComponent.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUI_rsLatch.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIand.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIand41.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIandor414.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIdemux2.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIdff.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIdlatch.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIdlatch4.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIfulladder.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIhalfadder.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUImux1.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUImux1_4.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUInand3.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUInot4.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIor4.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIor_4.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIram2.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIram4.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIsel2_4.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIsel3_4.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/GUIxor.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901ALUFuncDecode.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901ALUInclDecode.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901ALUOneBit.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901DestDecode.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901QReg.java
net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/mi/nandbased/am2901/GUIAm2901SourceDecode.java

index 9cc65b3..793f0f7 100644 (file)
@@ -26,8 +26,8 @@ public class JsonExample
                protected TestComponent(ViewModelModifiable model)
                {
                        super(model, 1, "Test");
-                       setInputCount(1);
                        setSubmodelScale(.4);
+                       setInputPins("Test input pin");
                        GUICustomComponentCreator.create(submodelModifiable, "HalfAdder.json");
                }
        }
index 2f3e405..0f6fc1b 100644 (file)
@@ -80,8 +80,20 @@ public final class GUICustomComponentCreator
                                        (String) m.get(SimpleRectangularSubmodelComponent.kLabel));
                        rect.setSubmodelScale(params.composition.innerScale);
                        rect.setSize(params.width, params.height);
-                       rect.setInputCount(((Number) m.get(SimpleRectangularSubmodelComponent.kInCount)).intValue());
-                       rect.setOutputCount(((Number) m.get(SimpleRectangularSubmodelComponent.kOutCount)).intValue());
+
+                       // TODO names
+                       int inputCount = ((Number) m.get(SimpleRectangularSubmodelComponent.kInCount)).intValue();
+                       String[] inputNames = new String[inputCount];
+                       for (int i = 0; i < inputCount; i++)
+                               inputNames[i] = "Input pin #" + i;
+                       rect.setInputPins(inputNames);
+
+                       int outputCount = ((Number) m.get(SimpleRectangularSubmodelComponent.kOutCount)).intValue();
+                       String[] outputPins = new String[outputCount];
+                       for (int i = 0; i < outputCount; i++)
+                               outputPins[i] = "Output pin #" + i;
+                       rect.setOutputPins(outputPins);
+
                        return rect;
                }
                catch (ClassCastException | NullPointerException e)
index 44b402d..558df24 100644 (file)
@@ -19,7 +19,9 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent
 
        private static final double width = 35;
        private static final double pinDistance = 10;
-       private static final double fontHeight = 5;
+       private static final double pinNameMargin = .5;
+       private static final double labelFontHeight = 5;
+       private static final double pinNameFontHeight = 3.5;
 
        private final String label;
        protected final int logicWidth;
@@ -48,8 +50,9 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent
                this.outputSubmodelPinsUnmodifiable = Collections.unmodifiableList(outputSubmodelPins);
        }
 
-       protected void setInputCount(int inputCount)
+       protected void setInputPins(String... pinNames)
        {
+               int inputCount = pinNames.length;
                int oldInputCount = inputSupermodelPins.size();
                double height = Math.max(inputCount, outputSupermodelPins.size()) * pinDistance;
                setSize(width, height);
@@ -57,36 +60,55 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent
                        while (inputSupermodelPins.size() > inputCount)
                        {
                                inputSubmodelPins.remove(inputCount);
-                               removePin(inputSupermodelPins.remove(inputCount));
+                               removeSubmodelInterface(inputSupermodelPins.remove(inputCount));
                        }
                else if (oldInputCount < inputCount)
                        for (int i = oldInputCount; i < inputCount; i++)
                        {
-                               // TODO pin names
-                               Pin submodelPin = addSubmodelInterface("Input pin #" + i, logicWidth, 0, pinDistance / 2 + i * pinDistance);
+                               Pin submodelPin = addSubmodelInterface(pinNames[i], logicWidth, 0, pinDistance / 2 + i * pinDistance);
                                inputSubmodelPins.add(submodelPin);
                                inputSupermodelPins.add(getSupermodelPin(submodelPin));
                        }
+               for (int i = 0; i < Math.min(oldInputCount, inputCount); i++)
+               {
+                       if (!inputSubmodelPins.get(i).name.equals(pinNames[i]))
+                       {
+                               removeSubmodelInterface(inputSupermodelPins.get(i));
+                               Pin submodelPin = addSubmodelInterface(pinNames[i], logicWidth, 0, pinDistance / 2 + i * pinDistance);
+                               inputSubmodelPins.set(i, submodelPin);
+                               inputSupermodelPins.set(i, getSupermodelPin(submodelPin));
+                       }
+               }
        }
 
-       protected void setOutputCount(int outputCount)
+       protected void setOutputPins(String... pinNames)
        {
+               int outputCount = pinNames.length;
                int oldOutputCount = outputSupermodelPins.size();
                setSize(width, Math.max(inputSupermodelPins.size(), outputCount) * pinDistance);
                if (oldOutputCount > outputCount)
                        while (outputSupermodelPins.size() > outputCount)
                        {
                                outputSubmodelPins.remove(outputCount);
-                               removePin(outputSupermodelPins.get(outputCount));
+                               removeSubmodelInterface(outputSupermodelPins.get(outputCount));
                        }
                else if (oldOutputCount < outputCount)
                        for (int i = oldOutputCount; i < outputCount; i++)
                        {
-                               // TODO pin names
-                               Pin submodelPin = addSubmodelInterface("Output pin #" + i, logicWidth, width, pinDistance / 2 + i * pinDistance);
+                               Pin submodelPin = addSubmodelInterface(pinNames[i], logicWidth, width, pinDistance / 2 + i * pinDistance);
                                outputSubmodelPins.add(submodelPin);
                                outputSupermodelPins.add(getSupermodelPin(submodelPin));
                        }
+               for (int i = 0; i < Math.min(oldOutputCount, outputCount); i++)
+               {
+                       if (!outputSubmodelPins.get(i).name.equals(pinNames[i]))
+                       {
+                               removeSubmodelInterface(outputSupermodelPins.get(i));
+                               Pin submodelPin = addSubmodelInterface(pinNames[i], logicWidth, width, pinDistance / 2 + i * pinDistance);
+                               outputSubmodelPins.set(i, submodelPin);
+                               outputSupermodelPins.set(i, getSupermodelPin(submodelPin));
+                       }
+               }
        }
 
        public List<Pin> getInputPins()
@@ -116,12 +138,24 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent
                double posY = getBounds().y;
 
                Font oldFont = gc.getFont();
-               Font labelFont = new Font(oldFont.getName(), fontHeight, oldFont.getStyle());
-               gc.setFont(labelFont);
+               gc.setFont(new Font(oldFont.getName(), labelFontHeight, oldFont.getStyle()));
                Point textExtent = gc.textExtent(label);
                gc.drawText(label, posX + (getBounds().width - textExtent.x) / 2, posY + (getBounds().height - textExtent.y) / 2, true);
+               gc.setFont(new Font(oldFont.getName(), pinNameFontHeight, oldFont.getStyle()));
+               for (int i = 0; i < inputSupermodelPins.size(); i++)
+               {
+                       String pinName = inputSupermodelPins.get(i).name;
+                       textExtent = gc.textExtent(pinName);
+                       gc.drawText(pinName, posX + pinNameMargin, posY + i * pinDistance + (pinDistance - textExtent.y) / 2, true);
+               }
+               for (int i = 0; i < outputSupermodelPins.size(); i++)
+               {
+                       String pinName = outputSupermodelPins.get(i).name;
+                       textExtent = gc.textExtent(pinName);
+                       gc.drawText(pinName, posX + width - textExtent.x - pinNameMargin, posY + i * pinDistance + (pinDistance - textExtent.y) / 2,
+                                       true);
+               }
                gc.setFont(oldFont);
-               // TODO draw pin names
        }
 
        @Override
index ce56eb8..e381847 100644 (file)
@@ -14,8 +14,8 @@ public class GUI_rsLatch extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "_rsLatch");
                setSubmodelScale(.4);
-               setInputCount(2);
-               setOutputCount(2);
+               setInputPins("_S", "_R");
+               setOutputPins("Q", "_Q");
                initSubmodelComponents();
        }
 
index d41228b..cb7f6b6 100644 (file)
@@ -14,8 +14,8 @@ public class GUIand extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIand");
                setSubmodelScale(.4);
-               setInputCount(2);
-               setOutputCount(1);
+               setInputPins("A", "B");
+               setOutputPins("Y");
                initSubmodelComponents();
        }
 
index 7ec4b49..45ba337 100644 (file)
@@ -13,8 +13,8 @@ public class GUIand41 extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIand41");
                setSubmodelScale(.4);
-               setInputCount(5);
-               setOutputCount(4);
+               setInputPins("A1", "A2", "A3", "A4", "B");
+               setOutputPins("Y1", "Y2", "Y3", "Y4");
                initSubmodelComponents();
        }
 
index e8a6415..aa2c076 100644 (file)
@@ -12,8 +12,8 @@ public class GUIandor414 extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIandor414");
                setSubmodelScale(.4);
-               setInputCount(9);
-               setOutputCount(4);
+               setInputPins("C1", "C2", "C3", "C4", "A1", "A2", "A3", "A4", "B");
+               setOutputPins("Y1", "Y2", "Y3", "Y4");
                initSubmodelComponents();
        }
 
index e7d7e21..172ca3a 100644 (file)
@@ -14,8 +14,8 @@ public class GUIdemux2 extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIdemux2");
                setSubmodelScale(.4);
-               setInputCount(2);
-               setOutputCount(4);
+               setInputPins("S0", "S1");
+               setOutputPins("Y00", "Y01", "Y10", "Y11");
                initSubmodelComponents();
        }
 
index 1464b3a..3341906 100644 (file)
@@ -14,8 +14,8 @@ public class GUIdff extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIdff");
                setSubmodelScale(.2);
-               setInputCount(2);
-               setOutputCount(2);
+               setInputPins("C", "D");
+               setOutputPins("Q", "_Q");
                initSubmodelComponents();
        }
 
index 5fae335..c859194 100644 (file)
@@ -14,8 +14,8 @@ public class GUIdlatch extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIdlatch");
                setSubmodelScale(.4);
-               setInputCount(2);
-               setOutputCount(2);
+               setInputPins("D", "E");
+               setOutputPins("Q", "_Q");
                initSubmodelComponents();
        }
 
index 672b0ec..9ad80c4 100644 (file)
@@ -13,8 +13,8 @@ public class GUIdlatch4 extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIdlatch4");
                setSubmodelScale(.4);
-               setInputCount(5);
-               setOutputCount(4);
+               setInputPins("D1", "D2", "D3", "D4", "C");
+               setOutputPins("Q1", "Q2", "Q3", "Q4");
                initSubmodelComponents();
        }
 
index ef4c54e..1f424a9 100644 (file)
@@ -13,8 +13,8 @@ public class GUIfulladder extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIfulladder");
                setSubmodelScale(.4);
-               setInputCount(3);
-               setOutputCount(2);
+               setInputPins("A", "B", "C");
+               setOutputPins("Y", "Z");
                initSubmodelComponents();
        }
 
index a75d162..ed05f89 100644 (file)
@@ -14,8 +14,8 @@ public class GUIhalfadder extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIhalfadder");
                setSubmodelScale(.4);
-               setInputCount(2);
-               setOutputCount(2);
+               setInputPins("A", "B");
+               setOutputPins("Y", "_Z");
                initSubmodelComponents();
        }
 
index 2c33f44..0b920d6 100644 (file)
@@ -14,8 +14,8 @@ public class GUImux1 extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUImux1");
                setSubmodelScale(.4);
-               setInputCount(3);
-               setOutputCount(1);
+               setInputPins("S0", "I0", "I1");
+               setOutputPins("Y");
                initSubmodelComponents();
        }
 
index 5ec7f88..e648e1c 100644 (file)
@@ -13,8 +13,8 @@ public class GUImux1_4 extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUImux1_4");
                setSubmodelScale(.4);
-               setInputCount(9);
-               setOutputCount(4);
+               setInputPins("S0", "I0_1", "I0_2", "I0_3", "I0_4", "I1_1", "I1_2", "I1_3", "I1_4");
+               setOutputPins("Y1", "Y2", "Y3", "Y4");
                initSubmodelComponents();
        }
 
index 73dbe28..10ee1e2 100644 (file)
@@ -14,8 +14,8 @@ public class GUInand3 extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUInand3");
                setSubmodelScale(.4);
-               setInputCount(3);
-               setOutputCount(1);
+               setInputPins("A", "B", "C");
+               setOutputPins("Y");
                initSubmodelComponents();
        }
 
index 6bdeb05..75e6398 100644 (file)
@@ -14,8 +14,8 @@ public class GUInot4 extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUInot4");
                setSubmodelScale(.4);
-               setInputCount(4);
-               setOutputCount(4);
+               setInputPins("A1", "A2", "A3", "A4");
+               setOutputPins("Y1", "Y2", "Y3", "Y4");
                initSubmodelComponents();
        }
 
index cda2b32..5c41b9b 100644 (file)
@@ -14,8 +14,8 @@ public class GUIor4 extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIor4");
                setSubmodelScale(.2);
-               setInputCount(4);
-               setOutputCount(1);
+               setInputPins("A1", "A2", "A3", "A4");
+               setOutputPins("Y");
                initSubmodelComponents();
        }
 
index 95d8642..9da8c8c 100644 (file)
@@ -14,8 +14,8 @@ public class GUIor_4 extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIor_4");
                setSubmodelScale(.4);
-               setInputCount(8);
-               setOutputCount(4);
+               setInputPins("A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4");
+               setOutputPins("Y1", "Y2", "Y3", "Y4");
                initSubmodelComponents();
        }
 
index b12a22c..8517745 100644 (file)
@@ -13,8 +13,8 @@ public class GUIram2 extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIram2");
                setSubmodelScale(.1);
-               setInputCount(9);
-               setOutputCount(8);
+               setInputPins("A0", "A1", "B0", "B1", "WE", "D1", "D2", "D3", "D4");
+               setOutputPins("QA1", "QA2", "QA3", "QA4", "QB1", "QB2", "QB3", "QB4");
                initSubmodelComponents();
        }
 
index 699f13e..601dffa 100644 (file)
@@ -13,8 +13,8 @@ public class GUIram4 extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIram4");
                setSubmodelScale(.1);
-               setInputCount(13);
-               setOutputCount(8);
+               setInputPins("A0", "A1", "A2", "A3", "B0", "B1", "B2", "B3", "WE", "D1", "D2", "D3", "D4");
+               setOutputPins("QA1", "QA2", "QA3", "QA4", "QB1", "QB2", "QB3", "QB4");
                initSubmodelComponents();
        }
 
index 39d2e59..f20bbb1 100644 (file)
@@ -14,8 +14,8 @@ public class GUIsel2_4 extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIsel2_4");
                setSubmodelScale(.4);
-               setInputCount(10);
-               setOutputCount(4);
+               setInputPins("SA", "SB", "A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4");
+               setOutputPins("Y1", "Y2", "Y3", "Y4");
                initSubmodelComponents();
        }
 
index 8b3d38c..5892e04 100644 (file)
@@ -14,8 +14,8 @@ public class GUIsel3_4 extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIsel3_4");
                setSubmodelScale(.2);
-               setInputCount(15);
-               setOutputCount(4);
+               setInputPins("SA", "SB", "SC", "A1", "A2", "A3", "A4", "B1", "B2", "B3", "B4", "C1", "C2", "C3", "C4");
+               setOutputPins("Y1", "Y2", "Y3", "Y4");
                initSubmodelComponents();
        }
 
index f32eee4..c8adf05 100644 (file)
@@ -14,8 +14,8 @@ public class GUIxor extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIxor");
                setSubmodelScale(.4);
-               setInputCount(2);
-               setOutputCount(1);
+               setInputPins("A", "B");
+               setOutputPins("Y");
                initSubmodelComponents();
        }
 
index 48e2939..0f5b139 100644 (file)
@@ -16,8 +16,8 @@ public class GUIAm2901ALUFuncDecode extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIAm2901ALUFuncDecode");
                setSubmodelScale(.25);
-               setInputCount(3);
-               setOutputCount(3);
+               setInputPins("I5", "I4", "I3");
+               setOutputPins("CinE", "L", "SBE");
                initSubmodelComponents();
        }
 
index cb11ea4..47dcc8e 100644 (file)
@@ -14,8 +14,8 @@ public class GUIAm2901ALUInclDecode extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIAm2901ALUInclDecode");
                setSubmodelScale(.25);
-               setInputCount(12);
-               setOutputCount(6);
+               setInputPins("I5", "I4", "I3", "Cn", "R1", "R2", "R3", "R4", "S1", "S2", "S3", "S4");
+               setOutputPins("F1", "F2", "F3", "F4", "Cnplus4", "OVR");
                initSubmodelComponents();
        }
 
index 7199b7c..eca9c64 100644 (file)
@@ -18,8 +18,8 @@ public class GUIAm2901ALUOneBit extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIAm2901ALUOneBit");
                setSubmodelScale(.2);
-               setInputCount(9);
-               setOutputCount(2);
+               setInputPins("Cin", "CoutE", "CinE", "R", "RN", "S", "SN", "FN", "L");
+               setOutputPins("Cout", "F");
                initSubmodelComponents();
        }
 
index 98c5782..0afde14 100644 (file)
@@ -14,8 +14,8 @@ public class GUIAm2901DestDecode extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIAm2901DestDecode");
                setSubmodelScale(.25);
-               setInputCount(3);
-               setOutputCount(6);
+               setInputPins("I8", "I7", "I6");
+               setOutputPins("NSH", "RSH", "RAMWE", "YF", "LSH", "QWE");
                initSubmodelComponents();
        }
 
index 3d802f8..0ea3f21 100644 (file)
@@ -15,8 +15,8 @@ public class GUIAm2901QReg extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "GUIAm2901QReg");
                setSubmodelScale(.4);
-               setInputCount(6);
-               setOutputCount(4);
+               setInputPins("C", "WE", "D1", "D2", "D3", "D4");
+               setOutputPins("Q1", "Q2", "Q3", "Q4");
                initSubmodelComponents();
        }
 
index b66427e..374f3e1 100644 (file)
@@ -14,8 +14,8 @@ public class GUIAm2901SourceDecode extends SimpleRectangularSubmodelComponent
        {
                super(model, 1, "Am2901SourceDecode");
                setSubmodelScale(.25);
-               setInputCount(3);
-               setOutputCount(5);
+               setInputPins("I2", "I1", "I0");
+               setOutputPins("SQ", "RA", "SB", "SA", "RD");
                initSubmodelComponents();
        }