X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.ui%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fui%2Fmodel%2Fcomponents%2FSubmodelComponent.java;h=cfa505eea7faaa29eeda5f259a202dd413b574bf;hb=29948edc1851d17311c50c7eff34070a0dc36ceb;hp=106c5ffe2d5d83115b4bc742f2291889b54f8803;hpb=b555e4c29e14f455d8ffbc810284c7bb44b459f9;p=Mograsim.git diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java index 106c5ffe..cfa505ee 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/SubmodelComponent.java @@ -15,22 +15,22 @@ import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.ui.LogicUIRenderer; import net.mograsim.logic.ui.model.ViewModel; import net.mograsim.logic.ui.model.ViewModelModifiable; -import net.mograsim.logic.ui.model.components.params.GeneralComponentParams; -import net.mograsim.logic.ui.model.components.params.GeneralComponentParams.InnerComponentParams; -import net.mograsim.logic.ui.model.components.params.SubComponentParams; -import net.mograsim.logic.ui.model.components.params.SubComponentParams.InterfacePinParams; +import net.mograsim.logic.ui.model.components.SubmodelComponentParams.ComponentCompositionParams; +import net.mograsim.logic.ui.model.components.SubmodelComponentParams.ComponentCompositionParams.InnerComponentParams; +import net.mograsim.logic.ui.model.components.SubmodelComponentParams.InnerPinParams; +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; -import net.mograsim.logic.ui.model.components.params.SubComponentParams.InnerPinParams; -import net.mograsim.logic.ui.model.components.params.SubComponentParams.InnerWireParams; public abstract class SubmodelComponent extends GUIComponent { protected final ViewModelModifiable submodelModifiable; public final ViewModel submodel; - private final Map submodelPinsPerSupermodelPin; + private final Map submodelPinsPerSupermodelPin; private final Map submodelPinsPerSupermodelPinUnmodifiable; - private final Map supermodelPinsPerSubmodelPin; + private final Map supermodelPinsPerSubmodelPin; private final Map supermodelPinsPerSubmodelPinUnmodifiable; private final SubmodelInterface submodelInterface; @@ -62,7 +62,7 @@ public abstract class SubmodelComponent extends GUIComponent { this.submodelScale = submodelScale; - for (Entry e : supermodelPinsPerSubmodelPin.entrySet()) + for (Entry e : supermodelPinsPerSubmodelPin.entrySet()) e.getKey().setRelPos(e.getValue().getRelX() * submodelScale, e.getValue().getRelY() * submodelScale); requestRedraw();// needed if there is no submodel interface pin @@ -76,13 +76,13 @@ 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); - addPin(supermodelPin); + MovablePin supermodelPin = new MovablePin(this, name, logicWidth, relX, relY); + super.addPin(supermodelPin); submodelPinsPerSupermodelPin.put(supermodelPin, submodelPin); supermodelPinsPerSubmodelPin.put(submodelPin, supermodelPin); @@ -93,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); @@ -104,7 +104,7 @@ public abstract class SubmodelComponent extends GUIComponent protected void removeSubmodelInterface(Pin supermodelPin) { - removePin(supermodelPin); + super.removePin(supermodelPin); Pin submodelPin = getSubmodelMovablePin(supermodelPin); submodelInterface.removePin(submodelPin); @@ -124,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); } @@ -139,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); } @@ -196,23 +196,12 @@ 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); - } - } - - public SubComponentParams calculateParams() + /** + * @return {@link SubmodelComponentParams}, which describe this {@link SubmodelComponent}. + */ + public SubmodelComponentParams calculateParams() { - SubComponentParams params = new SubComponentParams(); + SubmodelComponentParams params = new SubmodelComponentParams(); params.type = SubmodelComponent.class.getSimpleName(); params.composition = calculateCompositionParams(); @@ -228,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++; } @@ -235,9 +225,9 @@ public abstract class SubmodelComponent extends GUIComponent return params; } - protected GeneralComponentParams calculateCompositionParams() + protected ComponentCompositionParams calculateCompositionParams() { - GeneralComponentParams params = new GeneralComponentParams(); + ComponentCompositionParams params = new ComponentCompositionParams(); params.innerScale = getSubmodelScale(); List compList = submodelModifiable.getComponents(); @@ -279,4 +269,16 @@ public abstract class SubmodelComponent extends GUIComponent params.innerWires = wires; return params; } + + @Override + protected void addPin(Pin pin) + { + throw new UnsupportedOperationException("Can't add pins to a SubmodelComponent directly, call addSubmodelInterface instead"); + } + + @Override + protected void removePin(Pin pin) + { + throw new UnsupportedOperationException("Can't remove pins of a SubmodelComponent directly, call removeSubmodelInterface instead"); + } } \ No newline at end of file