- MovablePin submodelPin = new MovablePin(submodelInterface, name, logicWidth, relX / submodelScale, relY / submodelScale);
- submodelInterface.addPin(submodelPin);
+ super.addPin(supermodelPin);// do this first to be fail-fast if the supermodel does not belong to this component
+
+ String name = supermodelPin.name;
+ MovablePin submodelPin = new MovablePin(submodelInterface, name, supermodelPin.logicWidth, supermodelPin.getRelX() / submodelScale,
+ supermodelPin.getRelY() / submodelScale);
+
+ submodelPin.addPinMovedListener(p ->
+ {
+ double newRelX = p.getRelX() * submodelScale;
+ double newRelY = p.getRelY() * submodelScale;
+ if (supermodelPin.getRelX() != newRelX || supermodelPin.getRelY() != newRelY)
+ supermodelPin.setRelPos(newRelX, newRelY);
+ });
+ supermodelPin.addPinMovedListener(p ->
+ {
+ double newRelX = p.getRelX() / submodelScale;
+ double newRelY = p.getRelY() / submodelScale;
+ if (submodelPin.getRelX() != newRelX || submodelPin.getRelY() != newRelY)
+ submodelPin.setRelPos(newRelX, newRelY);
+ });