Text no longer jitters
[Mograsim.git] / net.mograsim.logic.model / src / net / mograsim / logic / model / LogicUICanvas.java
index 55fd8cf..115605f 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;
@@ -41,19 +42,19 @@ public class LogicUICanvas extends ZoomableCanvas
 
        public LogicUICanvas(Composite parent, int style, ViewModel model)
        {
-               super(parent, style);
+               super(parent, style, Preferences.current().getBoolean("net.mograsim.logic.model.improvetext"));
 
                this.model = model;
 
                LogicUIRenderer renderer = new LogicUIRenderer(model);
                addZoomedRenderer(gc ->
                {
-                       Color background = Preferences.current().getColor("net.mograsim.logic.ui.color.background");
+                       Color background = Preferences.current().getColor("net.mograsim.logic.model.color.background");
                        if (background != null)
                                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);
@@ -122,7 +129,7 @@ public class LogicUICanvas extends ZoomableCanvas
                                if (radioBit.getSelection())
                                        value = Bit.parse(valueString);
                                else if (radioBitVector.getSelection())
-                                       value = BitVector.parseMSBFirst(valueString);
+                                       value = BitVector.parse(valueString);
                                else
                                        throw new RuntimeException("No value type selected");
                                target.setHighLevelState(stateIDText.getText(), value);
@@ -163,7 +170,8 @@ public class LogicUICanvas extends ZoomableCanvas
 
        private void addComponentSelectorItems(List<GUIComponent> componentsByItemIndex, String base, Combo componentSelector, ViewModel model)
        {
-               for (GUIComponent c : model.getComponentsByName().values())
+               model.getComponentsByName().values().stream().sorted((c1, c2) -> c1.name.compareTo(c2.name)).forEach(c ->
+               {
                        if (!(c instanceof WireCrossPoint || c instanceof SubmodelInterface))
                        {
                                String item = base + c.name;
@@ -172,6 +180,6 @@ public class LogicUICanvas extends ZoomableCanvas
                                if (c instanceof SubmodelComponent)
                                        addComponentSelectorItems(componentsByItemIndex, item + " -> ", componentSelector, ((SubmodelComponent) c).submodel);
                        }
+               });
        }
-
 }
\ No newline at end of file