Small changes; mainly in the listener system:
authorDaniel Kirschten <daniel.kirschten@gmx.de>
Tue, 28 May 2019 12:51:19 +0000 (14:51 +0200)
committerDaniel Kirschten <daniel.kirschten@gmx.de>
Tue, 28 May 2019 12:51:19 +0000 (14:51 +0200)
-Listeners now are Consumer<? super X> instead of Consumer<X>
-LogicUICanvas adds/removes listeners to not miss changes in the model
-Updated to new SWTHelper version

LogicUI/src/era/mi/gui/LogicUICanvas.java
LogicUI/src/era/mi/gui/examples/Playground.java
LogicUI/src/era/mi/gui/model/ViewModel.java
LogicUI/src/era/mi/gui/model/components/GUIComponent.java
LogicUI/src/era/mi/gui/model/wires/Pin.java
SWTHelper

index 0b7641e..0e2a606 100644 (file)
@@ -1,5 +1,7 @@
 package era.mi.gui;
 
+import java.util.function.Consumer;
+
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Event;
@@ -27,9 +29,34 @@ public class LogicUICanvas extends ZoomableCanvas
 
                this.model = model;
 
-               model.addComponentAddedListener(c -> redrawThreadsafe());
+               Consumer<Object> redrawConsumer = o -> redrawThreadsafe();
+               Consumer<Pin> pinAddedListener = p ->
+               {
+                       p.addPinMovedListener(redrawConsumer);
+                       redrawThreadsafe();
+               };
+               Consumer<Pin> pinRemovedListener = p ->
+               {
+                       p.removePinMovedListener(redrawConsumer);
+                       redrawThreadsafe();
+               };
+               model.addComponentAddedListener(c ->
+               {
+                       c.addComponentChangedListener(redrawConsumer);
+                       c.addComponentMovedListener(redrawConsumer);
+                       c.addPinAddedListener(pinAddedListener);
+                       c.addPinRemovedListener(pinRemovedListener);
+                       redrawThreadsafe();
+               });
+               model.addComponentRemovedListener(c ->
+               {
+                       c.removeComponentChangedListener(redrawConsumer);
+                       c.removeComponentMovedListener(redrawConsumer);
+                       c.removePinAddedListener(pinAddedListener);
+                       c.removePinRemovedListener(pinRemovedListener);
+                       redrawThreadsafe();
+               });
                model.addWireAddedListener(c -> redrawThreadsafe());
-               model.addComponentRemovedListener(c -> redrawThreadsafe());
                model.addWireRemovedListener(c -> redrawThreadsafe());
 
                addZoomedRenderer(gc ->
index 74da19c..f556759 100644 (file)
@@ -1,6 +1,5 @@
 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;
@@ -17,11 +16,11 @@ public class Playground
        {
                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);
index 4eb81e8..7eb55c1 100644 (file)
@@ -15,10 +15,10 @@ public class ViewModel
        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()
        {
@@ -92,15 +92,15 @@ public class 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));}
index e266afb..9b8aa03 100644 (file)
@@ -17,10 +17,10 @@ public abstract class GUIComponent
        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)
        {
@@ -76,15 +76,15 @@ public abstract class GUIComponent
        }
 
        // @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));}
index cf59640..44ea374 100644 (file)
@@ -15,7 +15,7 @@ public class Pin
        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)
        {
@@ -50,9 +50,9 @@ public class Pin
        }
 
        // @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
index 1b4a52c..7d47333 160000 (submodule)
--- a/SWTHelper
+++ b/SWTHelper
@@ -1 +1 @@
-Subproject commit 1b4a52c0491e8d22fe6b2352a11d7d82f14c7074
+Subproject commit 7d47333ed050416991e97421ece07965edb3d7f2