X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2FLogicUICanvas.java;h=b0174373d0e92451840d58b17b43262e45c38a7d;hb=3a52b6bffe52db5dd5ca907b4b3dfd368a58e14f;hp=609bf74fca3af0c7aa36268a95fabcc541eca972;hpb=47ea68ed5c444dd14864412639f6a6fd60ab8a0f;p=Mograsim.git diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java index 609bf74f..b0174373 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java @@ -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; @@ -21,11 +22,11 @@ import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas; import net.mograsim.logic.core.types.Bit; import net.mograsim.logic.core.types.BitVector; -import net.mograsim.logic.model.model.ViewModel; -import net.mograsim.logic.model.model.components.GUIComponent; +import net.mograsim.logic.model.model.LogicModel; +import net.mograsim.logic.model.model.components.ModelComponent; import net.mograsim.logic.model.model.components.submodels.SubmodelComponent; import net.mograsim.logic.model.model.components.submodels.SubmodelInterface; -import net.mograsim.logic.model.model.wires.WireCrossPoint; +import net.mograsim.logic.model.model.wires.ModelWireCrossPoint; import net.mograsim.preferences.Preferences; /** @@ -37,23 +38,23 @@ public class LogicUICanvas extends ZoomableCanvas { private static final boolean OPEN_DEBUG_SETHIGHLEVELSTATE_SHELL = false; - private final ViewModel model; + private final LogicModel model; - public LogicUICanvas(Composite parent, int style, ViewModel model) + public LogicUICanvas(Composite parent, int style, LogicModel 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); @@ -66,7 +67,7 @@ public class LogicUICanvas extends ZoomableCanvas if (e.button == 1) { Point click = canvasToWorldCoords(e.x, e.y); - for (GUIComponent component : model.getComponentsByName().values()) + for (ModelComponent component : model.getComponentsByName().values()) if (component.getBounds().contains(click) && component.clicked(click.x, click.y)) { redraw(); @@ -75,16 +76,22 @@ public class LogicUICanvas extends ZoomableCanvas } } - private void openDebugSetHighLevelStateShell(ViewModel model) + private void openDebugSetHighLevelStateShell(LogicModel model) { Shell debugShell = new Shell(); debugShell.setLayout(new GridLayout(2, false)); new Label(debugShell, SWT.NONE).setText("Target component: "); Combo componentSelector = new Combo(debugShell, SWT.DROP_DOWN | SWT.READ_ONLY); componentSelector.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - List componentsByItemIndex = new ArrayList<>(); - model.addComponentAddedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model)); - model.addComponentRemovedListener(c -> recalculateComponentSelector(componentsByItemIndex, componentSelector, model)); + List componentsByItemIndex = new ArrayList<>(); + Consumer 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); @@ -116,7 +123,7 @@ public class LogicUICanvas extends ZoomableCanvas int componentIndex = componentSelector.getSelectionIndex(); if (componentIndex < 0 || componentIndex >= componentsByItemIndex.size()) throw new RuntimeException("No component selected"); - GUIComponent target = componentsByItemIndex.get(componentIndex); + ModelComponent target = componentsByItemIndex.get(componentIndex); String valueString = valueText.getText(); Object value; if (radioBit.getSelection()) @@ -154,17 +161,18 @@ public class LogicUICanvas extends ZoomableCanvas debugShell.open(); } - private void recalculateComponentSelector(List componentsByItemIndex, Combo componentSelector, ViewModel model) + private void recalculateComponentSelector(List componentsByItemIndex, Combo componentSelector, LogicModel model) { componentsByItemIndex.clear(); componentSelector.setItems(); addComponentSelectorItems(componentsByItemIndex, "", componentSelector, model); } - private void addComponentSelectorItems(List componentsByItemIndex, String base, Combo componentSelector, ViewModel model) + private void addComponentSelectorItems(List componentsByItemIndex, String base, Combo componentSelector, LogicModel model) { - for (GUIComponent c : model.getComponentsByName().values()) - if (!(c instanceof WireCrossPoint || c instanceof SubmodelInterface)) + model.getComponentsByName().values().stream().sorted((c1, c2) -> c1.name.compareTo(c2.name)).forEach(c -> + { + if (!(c instanceof ModelWireCrossPoint || c instanceof SubmodelInterface)) { String item = base + c.name; componentsByItemIndex.add(c); @@ -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