X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.ui%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fui%2Fmodel%2Fcomponents%2FSimpleRectangularSubmodelComponent.java;h=f537eec220296ec27940a7bbc2a22bbe33548367;hb=6074b5904dc7a1c2e4ba37976f37b8b4ad524de5;hp=89a55f01101a3a4bb098d945f0a5605ed1f7090a;hpb=f05390137e98cbbffbbeccb8ed296fdfeeb222b0;p=Mograsim.git 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 89a55f01..f537eec2 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 @@ -2,6 +2,7 @@ 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; @@ -9,6 +10,10 @@ 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.wires.Pin; public class SimpleRectangularSubmodelComponent extends SubmodelComponent @@ -122,4 +127,56 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent { gc.drawRectangle(getBounds()); } + + public ComponentParams calculateParams() + { + ComponentParams params = new ComponentParams(); + params.displayName = label; + params.inputCount = inputSupermodelPins.size(); + params.outputCount = outputSubmodelPins.size(); + params.logicWidth = logicWidth; + params.innerScale = getSubmodelScale(); + + List compList = submodelModifiable.getComponents(); + Iterator 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 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; + return params; + } } \ No newline at end of file