X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.ui%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fui%2Fmodel%2Fwires%2FPin.java;h=aec2df0816f33cf81aa01d6838101e9ac65fcb5b;hb=f14ea37d69488dd51518a36413af7176916b8bd7;hp=516358360ee4206284beddb896a41b3b4bffbb87;hpb=0cd1108bde5620d8d38001caea12471db3a5e633;p=Mograsim.git diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java index 51635836..aec2df08 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/wires/Pin.java @@ -4,29 +4,31 @@ import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; -import net.mograsim.logic.ui.model.components.GUIComponent; import net.haspamelodica.swt.helper.swtobjectwrappers.Point; -import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; +import net.mograsim.logic.ui.model.components.GUIComponent; -//TODO add an ID and/or a name public class Pin { public final GUIComponent component; + public final String name; public final int logicWidth; protected double relX; protected double relY; private final List> pinMovedListeners; + private final List redrawListeners; - public Pin(GUIComponent component, int logicWidth, double relX, double relY) + public Pin(GUIComponent component, String name, int logicWidth, double relX, double relY) { this.component = component; + this.name = name; this.logicWidth = logicWidth; this.relX = relX; this.relY = relY; this.pinMovedListeners = new ArrayList<>(); + this.redrawListeners = new ArrayList<>(); component.addComponentMovedListener(c -> callPinMovedListeners()); } @@ -48,22 +50,31 @@ public class Pin public Point getPos() { - Rectangle componentBounds = component.getBounds(); - return new Point(relX + componentBounds.x, relY + componentBounds.y); + return new Point(relX + component.getPosX(), relY + component.getPosY()); + } + + protected void setRelPos(double relX, double relY) + { + this.relX = relX; + this.relY = relY; + callPinMovedListeners(); + callRedrawListeners(); } // @formatter:off public void addPinMovedListener (Consumer listener){pinMovedListeners.add (listener);} + public void addRedrawListener (Runnable listener){redrawListeners .add (listener);} public void removePinMovedListener(Consumer listener){pinMovedListeners.remove(listener);} + public void removeRedrawListener (Runnable listener){redrawListeners .remove(listener);} private void callPinMovedListeners() {pinMovedListeners.forEach(l -> l.accept(this));} + private void callRedrawListeners () {redrawListeners .forEach(l -> l.run ( ));} // @formatter:on - protected void setRelPos(double relX, double relY) + @Override + public String toString() { - this.relX = relX; - this.relY = relY; - callPinMovedListeners(); + return "Pin [" + name + ", point=" + getPos() + "]"; } } \ No newline at end of file