1 package net.mograsim.logic.ui.model.wires;
3 import java.util.ArrayList;
5 import java.util.function.Consumer;
7 import net.mograsim.logic.ui.model.components.GUIComponent;
8 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
9 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
13 public final GUIComponent component;
14 public final int logicWidth;
16 protected double relX;
17 protected double relY;
19 private final List<Consumer<? super Pin>> pinMovedListeners;
21 public Pin(GUIComponent component, int logicWidth, double relX, double relY)
23 this.component = component;
24 this.logicWidth = logicWidth;
28 this.pinMovedListeners = new ArrayList<>();
30 component.addComponentMovedListener(c -> callPinMovedListeners());
33 public double getRelX()
38 public double getRelY()
43 public Point getRelPos()
45 return new Point(relX, relY);
50 Rectangle componentBounds = component.getBounds();
51 return new Point(relX + componentBounds.x, relY + componentBounds.y);
55 public void addPinMovedListener (Consumer<? super Pin> listener){pinMovedListeners.add (listener);}
57 public void removePinMovedListener(Consumer<? super Pin> listener){pinMovedListeners.remove(listener);}
59 private void callPinMovedListeners() {pinMovedListeners.forEach(l -> l.accept(this));}
62 protected void setRelPos(double relX, double relY)
66 callPinMovedListeners();