General SubmodelComponents can now be saved to a json format
[Mograsim.git] / net.mograsim.logic.ui / src / net / mograsim / logic / ui / model / components / SimpleRectangularSubmodelComponent.java
index f537eec..3373553 100644 (file)
@@ -2,7 +2,6 @@ package net.mograsim.logic.ui.model.components;
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 
 import net.haspamelodica.swt.helper.gcs.GeneralGC;
@@ -10,10 +9,7 @@ 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.components.ComponentParams.InnerComponentParams;
-import net.mograsim.logic.ui.model.components.ComponentParams.InnerPinParams;
-import net.mograsim.logic.ui.model.components.ComponentParams.InnerWireParams;
-import net.mograsim.logic.ui.model.wires.GUIWire;
+import net.mograsim.logic.ui.model.components.params.RectComponentParams;
 import net.mograsim.logic.ui.model.wires.Pin;
 
 public class SimpleRectangularSubmodelComponent extends SubmodelComponent
@@ -128,55 +124,14 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent
                gc.drawRectangle(getBounds());
        }
 
-       public ComponentParams calculateParams()
+       public RectComponentParams calculateRectParams()
        {
-               ComponentParams params = new ComponentParams();
+               RectComponentParams params = new RectComponentParams();
                params.displayName = label;
                params.inputCount = inputSupermodelPins.size();
                params.outputCount = outputSubmodelPins.size();
                params.logicWidth = logicWidth;
-               params.innerScale = getSubmodelScale();
-
-               List<GUIComponent> compList = submodelModifiable.getComponents();
-               Iterator<GUIComponent> componentIt = compList.iterator();
-               componentIt.next(); // Skip inner SubmodelInterface
-               InnerComponentParams[] comps = new InnerComponentParams[compList.size() - 1];
-               int i = 0;
-               while (componentIt.hasNext())
-               {
-                       GUIComponent component = componentIt.next();
-                       InnerComponentParams inner = new InnerComponentParams();
-                       comps[i] = inner;
-                       inner.logicWidth = component.getPins().get(0).logicWidth; // This could be done a little more elegantly
-                       Rectangle bounds = component.getBounds();
-                       inner.pos = new Point(bounds.x, bounds.y);
-                       if (component instanceof GUICustomComponent)
-                               inner.type = "file:" + ((GUICustomComponent) component).getPath();
-                       else
-                               inner.type = "class:" + component.getClass().getCanonicalName();
-                       i++;
-               }
-               params.subComps = comps;
-
-               List<GUIWire> wireList = submodelModifiable.getWires();
-               InnerWireParams wires[] = new InnerWireParams[wireList.size()];
-               i = 0;
-               for (GUIWire wire : wireList)
-               {
-                       InnerWireParams inner = new InnerWireParams();
-                       wires[i] = inner;
-                       InnerPinParams pin1Params = new InnerPinParams(), pin2Params = new InnerPinParams();
-
-                       pin1Params.pinIndex = wire.getPin1().component.getPins().indexOf(wire.getPin1());
-                       pin1Params.compId = compList.indexOf(wire.getPin1().component);
-                       pin2Params.pinIndex = wire.getPin2().component.getPins().indexOf(wire.getPin2());
-                       pin2Params.compId = compList.indexOf(wire.getPin2().component);
-                       inner.pin1 = pin1Params;
-                       inner.pin2 = pin2Params;
-                       inner.path = wire.getPath();
-                       i++;
-               }
-               params.innerWires = wires;
+               params.composition = calculateCompositionParams();
                return params;
        }
 }
\ No newline at end of file