- addZoomedRenderer(gc -> components.forEach(c -> drawComponent(gc, c)));\r
- addZoomedRenderer(gc -> wires.forEach(w -> w.render(gc)));\r
- addListener(SWT.MouseDown, this::mouseDown);\r
- }\r
-\r
- /**\r
- * Add a component to be drawn. Returns the given component for convenience.\r
- * \r
- * @author Daniel Kirschten\r
- */\r
- public <C extends BasicGUIComponent> C addComponent(C component, double x, double y)\r
- {\r
- components.add(component);\r
- componentPositions.put(component, new Point(x, y));\r
- return component;\r
- }\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
+ Consumer<? super GUIComponent> componentAddedListener = c ->\r
+ {\r
+ c.addComponentLookChangedListener(redrawConsumer);\r
+ c.addComponentMovedListener(redrawConsumer);\r
+ c.addPinAddedListener(pinAddedListener);\r
+ c.addPinRemovedListener(pinRemovedListener);\r
+ redrawThreadsafe();\r
+ };\r
+ model.addComponentAddedListener(componentAddedListener);\r
+ model.getComponents().forEach(componentAddedListener);\r
+ model.addComponentRemovedListener(c ->\r
+ {\r
+ c.removeComponentLookChangedListener(redrawConsumer);\r
+ c.removeComponentMovedListener(redrawConsumer);\r
+ c.removePinAddedListener(pinAddedListener);\r
+ c.removePinRemovedListener(pinRemovedListener);\r
+ redrawThreadsafe();\r
+ });\r
+ Consumer<? super GUIWire> wireAddedListener = w ->\r
+ {\r
+ w.addWireLookChangedListener(redrawConsumer);\r
+ redrawThreadsafe();\r
+ };\r
+ model.addWireAddedListener(wireAddedListener);\r
+ model.getWires().forEach(wireAddedListener);\r
+ model.addWireRemovedListener(w ->\r
+ {\r
+ w.removeWireLookChangedListener(redrawConsumer);\r
+ redrawThreadsafe();\r
+ });\r