Pins now have names
[Mograsim.git] / net.mograsim.logic.ui / src / net / mograsim / logic / ui / model / components / SimpleRectangularSubmodelComponent.java
index e2af6f1..44b402d 100644 (file)
@@ -3,18 +3,22 @@ package net.mograsim.logic.ui.model.components;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
 
 import net.haspamelodica.swt.helper.gcs.GeneralGC;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Font;
 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
 import net.mograsim.logic.ui.model.ViewModelModifiable;
 import net.mograsim.logic.ui.model.wires.Pin;
 
 public class SimpleRectangularSubmodelComponent extends SubmodelComponent
 {
+       public static String kLabel = "label", kInCount = "input_count", kOutCount = "output_count", kLogicWidth = "logic_width";
+
        private static final double width = 35;
        private static final double pinDistance = 10;
-       private static final double minHeight = 25;
        private static final double fontHeight = 5;
 
        private final String label;
@@ -58,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));
                        }
@@ -77,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));
                        }
@@ -104,7 +110,7 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent
        }
 
        @Override
-       protected void renderSymbol(GeneralGC gc)
+       protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion)
        {
                double posX = getBounds().x;
                double posY = getBounds().y;
@@ -115,11 +121,26 @@ 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
-       protected void renderOutline(GeneralGC gc)
+       protected void renderOutline(GeneralGC gc, Rectangle visibleRegion)
        {
                gc.drawRectangle(getBounds());
        }
+
+       @Override
+       public SubmodelComponentParams calculateParams()
+       {
+               SubmodelComponentParams ret = super.calculateParams();
+               ret.type = SimpleRectangularSubmodelComponent.class.getSimpleName();
+               Map<String, Object> m = new TreeMap<>();
+               m.put(kLabel, label);
+               m.put(kInCount, inputSupermodelPins.size());
+               m.put(kOutCount, outputSupermodelPins.size());
+               m.put(kLogicWidth, logicWidth);
+               ret.specialized = m;
+               return ret;
+       }
 }
\ No newline at end of file