X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.model.editor%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Feditor%2FSaveLoadManager.java;h=1e3d271535dd5cd187dffbbfc372c623e66d1a2c;hb=500d5825bb557014eed80819f59a58b43ff71b05;hp=1ba1d252bfd4e048a66cbf6bbec677cc263e40ed;hpb=cff9e65dd62147eb44fa688d18db0032f5977f07;p=Mograsim.git diff --git a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/SaveLoadManager.java b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/SaveLoadManager.java index 1ba1d252..1e3d2715 100644 --- a/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/SaveLoadManager.java +++ b/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/SaveLoadManager.java @@ -1,12 +1,20 @@ package net.mograsim.logic.model.editor; import java.io.IOException; +import java.util.Map; +import java.util.Map.Entry; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.FileDialog; +import org.eclipse.swt.widgets.Shell; -import net.mograsim.logic.model.editor.ui.DialogManager.InteractiveDialog; import net.mograsim.logic.model.model.ViewModelModifiable; import net.mograsim.logic.model.serializing.DeserializedSubmodelComponent; -import net.mograsim.logic.model.serializing.SubmodelComponentDeserializer; -import net.mograsim.logic.model.util.JsonHandler; +import net.mograsim.logic.model.serializing.IdentifierGetter; +import net.mograsim.logic.model.serializing.IndirectGUIComponentCreator; +import net.mograsim.logic.model.serializing.SubmodelComponentSerializer; +import net.mograsim.logic.model.snippets.SubmodelComponentSnippetSuppliers; +import net.mograsim.logic.model.snippets.highlevelstatehandlers.standard.StandardHighLevelStateHandlerSnippetSuppliers; public class SaveLoadManager { @@ -28,12 +36,15 @@ public class SaveLoadManager public void openSaveAsDialog() { - InteractiveDialog d = new InteractiveDialog("Save as...", "Save", "Cancel", "Path"); - d.open(); - - if(InteractiveDialog.InteractiveDialogState.ACCEPTED.equals(d.getState())) + Shell fdShell = new Shell(); + FileDialog fd = new FileDialog(fdShell, SWT.SAVE); + fd.setText("Save as..."); + fd.setFilterExtensions(new String[] { "*.json" }); + String result = fd.open(); + fdShell.dispose(); + if (result != null) { - savePath = d.getText(); + savePath = result; innerSave(); } } @@ -42,13 +53,21 @@ public class SaveLoadManager { try { - JsonHandler.writeJson(editor.toBeEdited.calculateParams(c -> - { - if (Editor.identifierPerComponent.containsKey(c)) - return Editor.identifierPerComponent.get(c); - return "class:" + c.getClass().getCanonicalName(); - }), savePath); - } catch (IOException e) + IdentifierGetter idGetter = new IdentifierGetter(); + idGetter.componentIDs = c -> getStandardID(c, IndirectGUIComponentCreator.getStandardComponentIDs(), true); + idGetter.symbolRendererIDs = h -> getStandardID(h, + SubmodelComponentSnippetSuppliers.symbolRendererSupplier.getStandardSnippetIDs()); + idGetter.outlineRendererIDs = h -> getStandardID(h, + SubmodelComponentSnippetSuppliers.outlineRendererSupplier.getStandardSnippetIDs()); + idGetter.highLevelStateHandlerIDs = h -> getStandardID(h, + SubmodelComponentSnippetSuppliers.highLevelStateHandlerSupplier.getStandardSnippetIDs()); + idGetter.atomicHighLevelStateHandlerIDs = h -> getStandardID(h, + StandardHighLevelStateHandlerSnippetSuppliers.atomicHandlerSupplier.getStandardSnippetIDs()); + idGetter.subcomponentHighLevelStateHandlerIDs = h -> getStandardID(h, + StandardHighLevelStateHandlerSnippetSuppliers.subcomponentHandlerSupplier.getStandardSnippetIDs()); + SubmodelComponentSerializer.serialize(editor.toBeEdited, idGetter, savePath); + } + catch (IOException e) { savePath = null; System.err.println("Failed to save component!"); @@ -56,14 +75,30 @@ public class SaveLoadManager } } - public static void openLoadDialog() + private static String getStandardID(Object o, Map standardIDs) + { + return getStandardID(o, standardIDs, false); + } + + private static String getStandardID(Object o, Map standardIDs, boolean standardIDsHaveClassConcatenated) + { + String verboseID = (standardIDsHaveClassConcatenated ? "class:" : "") + o.getClass().getCanonicalName(); + return standardIDs.entrySet().stream().filter(e -> e.getValue().equals(verboseID)).map(Entry::getKey).findAny() + .orElseGet(() -> (standardIDsHaveClassConcatenated ? "" : "class:") + verboseID); + } + + public static void openLoadDialog() throws IOException { - InteractiveDialog load = new InteractiveDialog("Load Component...", "Load", "Cancel", "Path"); - load.open(); - if(InteractiveDialog.InteractiveDialogState.ACCEPTED.equals(load.getState())) + Shell fdShell = new Shell(); + FileDialog fd = new FileDialog(fdShell, SWT.OPEN); + fd.setText("Load component..."); + fd.setFilterExtensions(new String[] { "*.json" }); + String result = fd.open(); + fdShell.dispose(); + if (result != null) { - new Editor((DeserializedSubmodelComponent) SubmodelComponentDeserializer - .create(new ViewModelModifiable(), load.getText())); + new Editor((DeserializedSubmodelComponent) IndirectGUIComponentCreator.createComponent(new ViewModelModifiable(), + "file:" + result)); } } }