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;
11 //TODO add an ID and/or a name
14 public final GUIComponent component;
15 public final int logicWidth;
17 protected double relX;
18 protected double relY;
20 private final List<Consumer<? super Pin>> pinMovedListeners;
22 public Pin(GUIComponent component, int logicWidth, double relX, double relY)
24 this.component = component;
25 this.logicWidth = logicWidth;
29 this.pinMovedListeners = new ArrayList<>();
31 component.addComponentMovedListener(c -> callPinMovedListeners());
34 public double getRelX()
39 public double getRelY()
44 public Point getRelPos()
46 return new Point(relX, relY);
51 Rectangle componentBounds = component.getBounds();
52 return new Point(relX + componentBounds.x, relY + componentBounds.y);
56 public void addPinMovedListener (Consumer<? super Pin> listener){pinMovedListeners.add (listener);}
58 public void removePinMovedListener(Consumer<? super Pin> listener){pinMovedListeners.remove(listener);}
60 private void callPinMovedListeners() {pinMovedListeners.forEach(l -> l.accept(this));}
63 protected void setRelPos(double relX, double relY)
67 callPinMovedListeners();