X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2FLogicUICanvas.java;h=34cfb09949a5d468308c18de23eeae4499a74eff;hb=440a9a9dc9532ea88d475b0dee9ecc58260016cc;hp=c4a8c2d4eddceacfe9b713cd6b5ba11b27fbea66;hpb=269b34bc8e58453170ad4bb34266eb2d78d5627a;p=Mograsim.git diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java index c4a8c2d4..34cfb099 100644 --- a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUICanvas.java @@ -27,8 +27,7 @@ import net.mograsim.logic.core.types.BitVector; 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.ModelWireCrossPoint; +import net.mograsim.logic.model.snippets.highlevelstatehandlers.DefaultHighLevelStateHandler; import net.mograsim.preferences.Preferences; /** @@ -54,7 +53,11 @@ 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.setRedrawHandler(this::redrawThreadsafe); + model.setRedrawHandler(() -> + { + if (!isDisposed()) + redrawThreadsafe(); + }); addListener(SWT.MouseDown, this::mouseDown); @@ -64,7 +67,7 @@ public class LogicUICanvas extends ZoomableCanvas private void mouseDown(Event e) { - if (e.button == 1) + if (e.button == Preferences.current().getInt("net.mograsim.logic.model.button.action")) { Point click = canvasToWorldCoords(e.x, e.y); for (ModelComponent component : model.getComponentsByName().values()) @@ -165,6 +168,7 @@ public class LogicUICanvas extends ZoomableCanvas get.addListener(SWT.Selection, getAction); stateIDText.addListener(SWT.DefaultSelection, getAction); debugShell.open(); + addDisposeListener(e -> debugShell.dispose()); } private void compsChanged(Consumer compAdded, Consumer compRemoved, ModelComponent c, @@ -216,21 +220,24 @@ public class LogicUICanvas extends ZoomableCanvas recalculateQueued.set(false); componentsByItemIndex.clear(); componentSelector.setItems(); - addComponentSelectorItems(componentsByItemIndex, "", componentSelector, model); + addComponentSelectorItems(componentsByItemIndex, "", componentSelector, model, + Preferences.current().getInt("net.mograsim.logic.model.debug.hlsshelldepth") - 1); } private void addComponentSelectorItems(List componentsByItemIndex, String base, Combo componentSelector, - LogicModel model) + LogicModel model, int depth) { model.getComponentsByName().values().stream().sorted((c1, c2) -> c1.getName().compareTo(c2.getName())).forEach(c -> { - if (!(c instanceof ModelWireCrossPoint || c instanceof SubmodelInterface)) + if (!(c.getHighLevelStateHandler() instanceof DefaultHighLevelStateHandler)) { String item = base + c.getName(); componentsByItemIndex.add(c); componentSelector.add(item); - if (c instanceof SubmodelComponent) - addComponentSelectorItems(componentsByItemIndex, item + " -> ", componentSelector, ((SubmodelComponent) c).submodel); + // this causes negative numbers to result in infinite depth + if (depth != 0 && c instanceof SubmodelComponent) + addComponentSelectorItems(componentsByItemIndex, item + " -> ", componentSelector, ((SubmodelComponent) c).submodel, + depth - 1); } }); }