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;
21 private final List<Runnable> redrawListeners;
23 public Pin(GUIComponent component, int logicWidth, double relX, double relY)
25 this.component = component;
26 this.logicWidth = logicWidth;
30 this.pinMovedListeners = new ArrayList<>();
31 this.redrawListeners = new ArrayList<>();
33 component.addComponentMovedListener(c -> callPinMovedListeners());
36 public double getRelX()
41 public double getRelY()
46 public Point getRelPos()
48 return new Point(relX, relY);
53 Rectangle componentBounds = component.getBounds();
54 return new Point(relX + componentBounds.x, relY + componentBounds.y);
57 protected void setRelPos(double relX, double relY)
61 callPinMovedListeners();
62 callRedrawListeners();
66 public void addPinMovedListener (Consumer<? super Pin> listener){pinMovedListeners.add (listener);}
67 public void addRedrawListener (Runnable listener){redrawListeners .add (listener);}
69 public void removePinMovedListener(Consumer<? super Pin> listener){pinMovedListeners.remove(listener);}
70 public void removeRedrawListener (Runnable listener){redrawListeners .remove(listener);}
72 private void callPinMovedListeners() {pinMovedListeners.forEach(l -> l.accept(this));}
73 private void callRedrawListeners () {redrawListeners .forEach(l -> l.run ( ));}