Merge branch 'development' of https://gitlab.lrz.de/lrr-tum/students/eragp-misim...
[Mograsim.git] / net.mograsim.logic.model / src / net / mograsim / logic / model / LogicUICanvas.java
index 2c82d13..51778c1 100644 (file)
@@ -2,6 +2,7 @@ package net.mograsim.logic.model;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Consumer;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Color;
@@ -53,7 +54,7 @@ public class LogicUICanvas extends ZoomableCanvas
                                setBackground(background);// this.setBackground, not gc.setBackground to have the background fill the canvas
                        renderer.render(gc, new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom));
                });
-               model.addRedrawListener(this::redrawThreadsafe);
+               model.setRedrawHandler(this::redrawThreadsafe);
 
                addListener(SWT.MouseDown, this::mouseDown);
 
@@ -83,8 +84,14 @@ public class LogicUICanvas extends ZoomableCanvas
                Combo componentSelector = new Combo(debugShell, SWT.DROP_DOWN | SWT.READ_ONLY);
                componentSelector.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
                List<GUIComponent> componentsByItemIndex = new ArrayList<>();
-               model.addComponentAddedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model));
-               model.addComponentRemovedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model));
+               Consumer<? super GUIComponent> compsChanged = c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model);
+               model.addComponentAddedListener(compsChanged);
+               model.addComponentRemovedListener(compsChanged);
+               debugShell.addListener(SWT.Dispose, e ->
+               {
+                       model.removeComponentAddedListener(compsChanged);
+                       model.removeComponentRemovedListener(compsChanged);
+               });
                recalculateComponentSelector(componentsByItemIndex, componentSelector, model);
                new Label(debugShell, SWT.NONE).setText("Target state ID: ");
                Text stateIDText = new Text(debugShell, SWT.SINGLE | SWT.LEAD | SWT.BORDER);