X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=LogicUI%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fui%2Fmodel%2Fwires%2FPin.java;fp=LogicUI%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fui%2Fmodel%2Fwires%2FPin.java;h=f3a78023ffd5c8f2674ae0009243df0a630f401a;hb=0009789a8df6b8d4562b6e1cbfa75102a7516ea8;hp=0000000000000000000000000000000000000000;hpb=a28f7aa0dab4248e99159c5a647676170cb17a4e;p=Mograsim.git diff --git a/LogicUI/src/net/mograsim/logic/ui/model/wires/Pin.java b/LogicUI/src/net/mograsim/logic/ui/model/wires/Pin.java new file mode 100644 index 00000000..f3a78023 --- /dev/null +++ b/LogicUI/src/net/mograsim/logic/ui/model/wires/Pin.java @@ -0,0 +1,68 @@ +package net.mograsim.logic.ui.model.wires; + +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; + +public class Pin +{ + public final GUIComponent component; + public final int logicWidth; + + protected double relX; + protected double relY; + + private final List> pinMovedListeners; + + public Pin(GUIComponent component, int logicWidth, double relX, double relY) + { + this.component = component; + this.logicWidth = logicWidth; + this.relX = relX; + this.relY = relY; + + this.pinMovedListeners = new ArrayList<>(); + + component.addComponentMovedListener(c -> callPinMovedListeners()); + } + + public double getRelX() + { + return relX; + } + + public double getRelY() + { + return relY; + } + + public Point getRelPos() + { + return new Point(relX, relY); + } + + public Point getPos() + { + Rectangle componentBounds = component.getBounds(); + return new Point(relX + componentBounds.x, relY + componentBounds.y); + } + + // @formatter:off + public void addPinMovedListener (Consumer listener){pinMovedListeners.add (listener);} + + public void removePinMovedListener(Consumer listener){pinMovedListeners.remove(listener);} + + private void callPinMovedListeners() {pinMovedListeners.forEach(l -> l.accept(this));} + // @formatter:on + + protected void setRelPos(double relX, double relY) + { + this.relX = relX; + this.relY = relY; + callPinMovedListeners(); + } +} \ No newline at end of file