package era.mi.gui;\r
\r
+import java.util.function.Consumer;\r
+\r
import org.eclipse.swt.SWT;\r
import org.eclipse.swt.widgets.Composite;\r
import org.eclipse.swt.widgets.Event;\r
\r
this.model = model;\r
\r
- model.addComponentAddedListener(c -> redrawThreadsafe());\r
+ Consumer<Object> redrawConsumer = o -> redrawThreadsafe();\r
+ Consumer<Pin> pinAddedListener = p ->\r
+ {\r
+ p.addPinMovedListener(redrawConsumer);\r
+ redrawThreadsafe();\r
+ };\r
+ Consumer<Pin> pinRemovedListener = p ->\r
+ {\r
+ p.removePinMovedListener(redrawConsumer);\r
+ redrawThreadsafe();\r
+ };\r
+ model.addComponentAddedListener(c ->\r
+ {\r
+ c.addComponentChangedListener(redrawConsumer);\r
+ c.addComponentMovedListener(redrawConsumer);\r
+ c.addPinAddedListener(pinAddedListener);\r
+ c.addPinRemovedListener(pinRemovedListener);\r
+ redrawThreadsafe();\r
+ });\r
+ model.addComponentRemovedListener(c ->\r
+ {\r
+ c.removeComponentChangedListener(redrawConsumer);\r
+ c.removeComponentMovedListener(redrawConsumer);\r
+ c.removePinAddedListener(pinAddedListener);\r
+ c.removePinRemovedListener(pinRemovedListener);\r
+ redrawThreadsafe();\r
+ });\r
model.addWireAddedListener(c -> redrawThreadsafe());\r
- model.addComponentRemovedListener(c -> redrawThreadsafe());\r
model.addWireRemovedListener(c -> redrawThreadsafe());\r
\r
addZoomedRenderer(gc ->\r
package era.mi.gui.examples;
-import era.mi.gui.LogicUICanvas;
import era.mi.gui.LogicUIStandalone;
import era.mi.gui.model.ViewModel;
import era.mi.gui.model.components.GUIAndGate;
{
ViewModel model = new ViewModel();
LogicUIStandalone ui = new LogicUIStandalone(model);
- addComponentsAndWires(ui.getLogicUICanvas(), model);
+ addComponentsAndWires(model);
ui.run();
}
- public static void addComponentsAndWires(LogicUICanvas ui, ViewModel model)
+ public static void addComponentsAndWires(ViewModel model)
{
GUIAndGate andGate = new GUIAndGate(model);
andGate.moveTo(10, 10);
private final List<GUIWire> wires;
private final List<GUIWire> wiresUnmodifiable;
- private final List<Consumer<GUIComponent>> componentAddedListeners;
- private final List<Consumer<GUIComponent>> componentRemovedListeners;
- private final List<Consumer<GUIWire>> wireAddedListeners;
- private final List<Consumer<GUIWire>> wireRemovedListeners;
+ private final List<Consumer<? super GUIComponent>> componentAddedListeners;
+ private final List<Consumer<? super GUIComponent>> componentRemovedListeners;
+ private final List<Consumer<? super GUIWire>> wireAddedListeners;
+ private final List<Consumer<? super GUIWire>> wireRemovedListeners;
public ViewModel()
{
}
// @formatter:off
- public void addComponentAddedListener (Consumer<GUIComponent> listener){componentAddedListeners .add (listener);}
- public void addComponentRemovedListener (Consumer<GUIComponent> listener){componentRemovedListeners.add (listener);}
- public void addWireAddedListener (Consumer<GUIWire > listener){wireAddedListeners .add (listener);}
- public void addWireRemovedListener (Consumer<GUIWire > listener){wireRemovedListeners .add (listener);}
+ public void addComponentAddedListener (Consumer<? super GUIComponent> listener){componentAddedListeners .add (listener);}
+ public void addComponentRemovedListener (Consumer<? super GUIComponent> listener){componentRemovedListeners.add (listener);}
+ public void addWireAddedListener (Consumer<? super GUIWire > listener){wireAddedListeners .add (listener);}
+ public void addWireRemovedListener (Consumer<? super GUIWire > listener){wireRemovedListeners .add (listener);}
- public void removeComponentAddedListener (Consumer<GUIComponent> listener){componentAddedListeners .remove(listener);}
- public void removeComponentRemovedListener(Consumer<GUIComponent> listener){componentRemovedListeners.remove(listener);}
- public void removeWireAddedListener (Consumer<GUIWire > listener){wireAddedListeners .remove(listener);}
- public void removeWireRemovedListener (Consumer<GUIWire > listener){wireRemovedListeners .remove(listener);}
+ public void removeComponentAddedListener (Consumer<? super GUIComponent> listener){componentAddedListeners .remove(listener);}
+ public void removeComponentRemovedListener(Consumer<? super GUIComponent> listener){componentRemovedListeners.remove(listener);}
+ public void removeWireAddedListener (Consumer<? super GUIWire > listener){wireAddedListeners .remove(listener);}
+ public void removeWireRemovedListener (Consumer<? super GUIWire > listener){wireRemovedListeners .remove(listener);}
private void callComponentAddedListeners (GUIComponent c) {componentAddedListeners .forEach(l -> l.accept(c));}
private void callComponentRemovedListeners(GUIComponent c) {componentRemovedListeners.forEach(l -> l.accept(c));}
private final List<Pin> pins;
protected final List<Pin> pinsUnmodifiable;
- private final List<Consumer<GUIComponent>> componentChangedListeners;
- private final List<Consumer<GUIComponent>> componentMovedListeners;
- private final List<Consumer<Pin>> pinAddedListeners;
- private final List<Consumer<Pin>> pinRemovedListeners;
+ private final List<Consumer<? super GUIComponent>> componentChangedListeners;
+ private final List<Consumer<? super GUIComponent>> componentMovedListeners;
+ private final List<Consumer<? super Pin>> pinAddedListeners;
+ private final List<Consumer<? super Pin>> pinRemovedListeners;
public GUIComponent(ViewModel model)
{
}
// @formatter:off
- public void addComponentChangedListener (Consumer<GUIComponent> listener) {componentChangedListeners.add (listener);}
- public void addComponentMovedListener (Consumer<GUIComponent> listener) {componentMovedListeners .add (listener);}
- public void addPinAddedListener (Consumer<Pin > listener) {pinAddedListeners .add (listener);}
- public void addPinRemovedListener (Consumer<Pin > listener) {pinRemovedListeners .add (listener);}
-
- public void removeComponentChangedListener(Consumer<GUIComponent> listener) {componentChangedListeners.remove(listener);}
- public void removeComponentMovedListener (Consumer<GUIComponent> listener) {componentMovedListeners .remove(listener);}
- public void removePinAddedListener (Consumer<Pin > listener) {pinAddedListeners .remove(listener);}
- public void removePinRemovedListener (Consumer<Pin > listener) {pinRemovedListeners .remove(listener);}
+ public void addComponentChangedListener (Consumer<? super GUIComponent> listener) {componentChangedListeners.add (listener);}
+ public void addComponentMovedListener (Consumer<? super GUIComponent> listener) {componentMovedListeners .add (listener);}
+ public void addPinAddedListener (Consumer<? super Pin > listener) {pinAddedListeners .add (listener);}
+ public void addPinRemovedListener (Consumer<? super Pin > listener) {pinRemovedListeners .add (listener);}
+
+ public void removeComponentChangedListener(Consumer<? super GUIComponent> listener) {componentChangedListeners.remove(listener);}
+ public void removeComponentMovedListener (Consumer<? super GUIComponent> listener) {componentMovedListeners .remove(listener);}
+ public void removePinAddedListener (Consumer<? super Pin > listener) {pinAddedListeners .remove(listener);}
+ public void removePinRemovedListener (Consumer<? super Pin > listener) {pinRemovedListeners .remove(listener);}
private void callComponentChangedListeners( ) {componentChangedListeners.forEach(l -> l.accept(this));}
private void callComponentMovedListeners ( ) {componentMovedListeners .forEach(l -> l.accept(this));}
protected double relX;
protected double relY;
- private final List<Consumer<Pin>> pinMovedListeners;
+ private final List<Consumer<? super Pin>> pinMovedListeners;
public Pin(GUIComponent component, double relX, double relY)
{
}
// @formatter:off
- public void addPinMovedListener (Consumer<Pin> listener){pinMovedListeners.add (listener);}
+ public void addPinMovedListener (Consumer<? super Pin> listener){pinMovedListeners.add (listener);}
- public void removePinMovedListener(Consumer<Pin> listener){pinMovedListeners.remove(listener);}
+ public void removePinMovedListener(Consumer<? super Pin> listener){pinMovedListeners.remove(listener);}
private void callPinMovedListeners() {pinMovedListeners.forEach(l -> l.accept(this));}
// @formatter:on
-Subproject commit 1b4a52c0491e8d22fe6b2352a11d7d82f14c7074
+Subproject commit 7d47333ed050416991e97421ece07965edb3d7f2