X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.model.editor%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Feditor%2FEditor.java;h=90baafb5778142cd26a2b2011e79ef68ad542e0f;hb=8bed58cd47f4e53a0a83e066d38864aa6875502f;hp=e213d1f36731c9749a24b4eabe8998a356bbb6b5;hpb=b1432755d8bbf5a32811af08faf6383c6c540359;p=Mograsim.git diff --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Editor.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Editor.java index e213d1f3..90baafb5 100644 --- a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Editor.java +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/Editor.java @@ -1,6 +1,5 @@ package net.mograsim.logic.model.editor; -import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Optional; @@ -12,6 +11,7 @@ import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; import net.haspamelodica.swt.helper.swtobjectwrappers.Point; +import net.mograsim.logic.model.am2900.Am2900Loader; import net.mograsim.logic.model.editor.handles.ComponentHandle; import net.mograsim.logic.model.editor.handles.Handle; import net.mograsim.logic.model.editor.handles.HandleManager; @@ -19,11 +19,14 @@ import net.mograsim.logic.model.editor.handles.PinHandle; import net.mograsim.logic.model.editor.states.StateManager; import net.mograsim.logic.model.editor.ui.DialogManager; import net.mograsim.logic.model.editor.ui.EditorGUI; -import net.mograsim.logic.model.model.ViewModelModifiable; -import net.mograsim.logic.model.model.components.GUIComponent; -import net.mograsim.logic.model.model.wires.GUIWire; +import net.mograsim.logic.model.model.LogicModelModifiable; +import net.mograsim.logic.model.model.components.ModelComponent; +import net.mograsim.logic.model.model.wires.ModelWire; import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent; -import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator; +import net.mograsim.logic.model.serializing.IndirectModelComponentCreator; +import net.mograsim.logic.model.snippets.highlevelstatehandlers.DefaultHighLevelStateHandler; +import net.mograsim.logic.model.snippets.outlinerenderers.DefaultOutlineRenderer; +import net.mograsim.logic.model.snippets.symbolrenderers.DefaultSymbolRenderer; public final class Editor { @@ -31,7 +34,6 @@ public final class Editor final Set copyBuffer = new HashSet<>(); public final DeserializedSubmodelComponent toBeEdited; public final HandleManager handleManager; - final static Map identifierPerComponent = new HashMap<>(); public final EditorGUI gui; public final StateManager stateManager; private final SaveLoadManager saveManager; @@ -51,12 +53,10 @@ public final class Editor saveManager = new SaveLoadManager(this); dialogManager = new DialogManager(gui.shell); - toBeEdited.submodel.addComponentRemovedListener(c -> identifierPerComponent.remove(c)); - gui.open(); } - - public ViewModelModifiable getSubmodel() + + public LogicModelModifiable getSubmodel() { return toBeEdited.getSubmodelModifiable(); } @@ -66,8 +66,8 @@ public final class Editor return selection; } - //TODO: Remove this error prone method: Relative offset may change between multiple moves, - //because Handles have different ways of responding to reqMove(...), causing strange behaviour + // TODO: Remove this error prone method: Relative offset may change between multiple moves, + // because Handles have different ways of responding to reqMove(...), causing strange behaviour @Deprecated public void moveSelection(double x, double y) { @@ -83,7 +83,7 @@ public final class Editor c.reqMove(newX, newY); } } - + public void moveHandles(double x, double y, Map handleOffsetMap) { Point snapped = new Point(x, y); @@ -112,7 +112,7 @@ public final class Editor for (Handle h : selection) { Optional cInfo = h.reqCopy(refPoint); - if(cInfo.isPresent()) + if (cInfo.isPresent()) copyBuffer.add(cInfo.get()); } } @@ -122,19 +122,19 @@ public final class Editor selection.clear(); for (ComponentInfo info : copyBuffer) { - GUIComponent comp = addComponent(info.identifier, info.params); + ModelComponent comp = addComponent(info.identifier, info.params); ComponentHandle h = handleManager.getHandle(comp); h.reqMove(info.relX, info.relY); selection.add(h); } moveSelection(x, y); } - + public void save() { saveManager.save(); } - + public void saveAs() { saveManager.openSaveAsDialog(); @@ -144,39 +144,31 @@ public final class Editor { boolean successful = false; JsonElement params = JsonNull.INSTANCE; - outer: - while(!successful) + outer: while (!successful) { String selected = gui.getAddListSelected(); try { - GUIComponent c = addComponent(selected, params); + ModelComponent c = addComponent(selected, params); selection.clear(); selection.add(handleManager.getHandle(c)); moveSelection(x, y); successful = true; } - catch(UnsupportedOperationException | JsonSyntaxException | NumberFormatException e) + catch (@SuppressWarnings("unused") UnsupportedOperationException | JsonSyntaxException | NumberFormatException + | NullPointerException e) { String result = DialogManager.openMultiLineTextDialog("Add component", "Create", "Cancel", "Parameters:"); - if(result == null) + if (result == null) break outer; params = new JsonParser().parse(result); } } } - - private GUIComponent addComponent(String identifier, JsonElement params) - { - GUIComponent comp = IndirectGUIComponentCreator.createComponent(toBeEdited.getSubmodelModifiable(), identifier, - params); - identifierPerComponent.put(comp, identifier); - return comp; - } - - public static String getIdentifier(GUIComponent c) + + private ModelComponent addComponent(String identifier, JsonElement params) { - return identifierPerComponent.get(c); + return IndirectModelComponentCreator.createComponent(toBeEdited.getSubmodelModifiable(), identifier, params); } public void duplicate() @@ -193,8 +185,10 @@ public final class Editor case OFF: break; case ABSOLUTE: - newP.x -= newP.x % snapX; - newP.y -= newP.y % snapY; + newP.x = (int) (newP.x / snapX + .5) * snapX; + newP.y = (int) (newP.y / snapY + .5) * snapY; + break; + default: break; } } @@ -204,7 +198,7 @@ public final class Editor public final double relX, relY; public final String identifier; public final JsonElement params; - + public ComponentInfo(double relX, double relY, String identifier, JsonElement params) { this.relX = relX; @@ -214,25 +208,37 @@ public final class Editor } } + @SuppressWarnings("unused") public void addWire(PinHandle a, PinHandle b) { - new GUIWire(toBeEdited.getSubmodelModifiable(), a.getPin(), b.getPin(), new Point[0]); + new ModelWire(toBeEdited.getSubmodelModifiable(), a.getPin(), b.getPin(), new Point[0]); } public static enum Snapping { OFF, ABSOLUTE; - + @Override public String toString() { return super.toString().toLowerCase(); } } - + public static void main(String[] args) { - SaveLoadManager.openLoadDialog(); + Am2900Loader.setup(); + openNewEditor(); +// SaveLoadManager.openLoadDialog(); + } + + public static void openNewEditor() + { + DeserializedSubmodelComponent toBeEdited = new DeserializedSubmodelComponent(new LogicModelModifiable(), null, null, null); + toBeEdited.setOutlineRenderer(new DefaultOutlineRenderer(toBeEdited)); + toBeEdited.setSymbolRenderer(new DefaultSymbolRenderer(toBeEdited)); + toBeEdited.setHighLevelStateHandler(new DefaultHighLevelStateHandler()); + new Editor(toBeEdited); } public Snapping getSnapping()