1 package net.mograsim.logic.ui.model.wires;
3 import java.util.ArrayList;
5 import java.util.function.Consumer;
7 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
8 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
9 import net.mograsim.logic.ui.model.components.GUIComponent;
13 public final GUIComponent component;
14 public final String name;
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, String name, int logicWidth, double relX, double relY)
25 this.component = component;
27 this.logicWidth = logicWidth;
31 this.pinMovedListeners = new ArrayList<>();
32 this.redrawListeners = new ArrayList<>();
34 component.addComponentMovedListener(c -> callPinMovedListeners());
37 public double getRelX()
42 public double getRelY()
47 public Point getRelPos()
49 return new Point(relX, relY);
54 Rectangle componentBounds = component.getBounds();
55 return new Point(relX + componentBounds.x, relY + componentBounds.y);
58 protected void setRelPos(double relX, double relY)
62 callPinMovedListeners();
63 callRedrawListeners();
67 public void addPinMovedListener (Consumer<? super Pin> listener){pinMovedListeners.add (listener);}
68 public void addRedrawListener (Runnable listener){redrawListeners .add (listener);}
70 public void removePinMovedListener(Consumer<? super Pin> listener){pinMovedListeners.remove(listener);}
71 public void removeRedrawListener (Runnable listener){redrawListeners .remove(listener);}
73 private void callPinMovedListeners() {pinMovedListeners.forEach(l -> l.accept(this));}
74 private void callRedrawListeners () {redrawListeners .forEach(l -> l.run ( ));}