Adjusted editor to changes made in logic.model
[Mograsim.git] / net.mograsim.logic.model.editor / src / net / mograsim / logic / model / editor / Editor.java
index 36dcbc7..e4c9292 100644 (file)
@@ -1,5 +1,6 @@
 package net.mograsim.logic.model.editor;
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
@@ -7,7 +8,9 @@ import java.util.Optional;
 import java.util.Set;
 
 import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
+import com.google.gson.JsonNull;
+import com.google.gson.JsonParser;
+import com.google.gson.JsonSyntaxException;
 
 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
 import net.mograsim.logic.model.editor.handles.ComponentHandle;
@@ -15,6 +18,8 @@ import net.mograsim.logic.model.editor.handles.Handle;
 import net.mograsim.logic.model.editor.handles.HandleManager;
 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;
@@ -31,15 +36,17 @@ public final class Editor
        public final EditorGUI gui;
        public final StateManager stateManager;
        private final SaveLoadManager saveManager;
-       Snapping snapping = Snapping.ABSOLUTE;
+       private Snapping snapping = Snapping.ABSOLUTE;
        private double snapX = 5, snapY = 5;
        public final DialogManager dialogManager;
+       public final EditorUserInput userInput;
 
        public Editor(DeserializedSubmodelComponent toBeEdited)
        {
                this.toBeEdited = toBeEdited;
                handleManager = new HandleManager(this);
                gui = new EditorGUI(this);
+               userInput = new EditorUserInput(this);
                stateManager = new StateManager(this);
                handleManager.init();
                saveManager = new SaveLoadManager(this);
@@ -131,10 +138,28 @@ public final class Editor
 
        public void addComponent(double x, double y)
        {
-               GUIComponent c = addComponent(gui.getAddListSelected(), new JsonObject());
-               selection.clear();
-               selection.add(handleManager.getHandle(c));
-               moveSelection(x, y);
+               boolean successful = false;
+               JsonElement params = JsonNull.INSTANCE;
+               outer:
+               while(!successful)
+               {
+                       String selected = gui.getAddListSelected();
+                       try
+                       {
+                               GUIComponent c = addComponent(selected, params);
+                               selection.clear();
+                               selection.add(handleManager.getHandle(c));
+                               moveSelection(x, y);
+                               successful = true;
+                       }
+                       catch(UnsupportedOperationException | JsonSyntaxException | NumberFormatException e)
+                       {
+                               String result = DialogManager.openMultiLineTextDialog("Add component", "Create", "Cancel", "Parameters:");
+                               if(result == null)
+                                       break outer;
+                               params = new JsonParser().parse(result);
+                       }
+               }
        }
        
        private GUIComponent addComponent(String identifier, JsonElement params)
@@ -185,19 +210,6 @@ public final class Editor
                }
        }
 
-       public Point getCanvasMousePosition()
-       {
-               //TODO
-               org.eclipse.swt.graphics.Point canvasLoc = gui.logicCanvas.getLocation(),
-                               mouseLoc = gui.display.getCursorLocation(), shellLoc = gui.shell.getLocation();
-               return new Point(mouseLoc.x - shellLoc.x - canvasLoc.x, mouseLoc.y - shellLoc.y - canvasLoc.y);
-       }
-
-       public Point getWorldMousePosition()
-       {
-               return gui.logicCanvas.canvasToWorldCoords(getCanvasMousePosition());
-       }
-
        public void addWire(PinHandle a, PinHandle b)
        {
                new GUIWire(toBeEdited.getSubmodelModifiable(), a.getPin(), b.getPin(), new Point[0]);
@@ -206,10 +218,26 @@ public final class Editor
        public static enum Snapping
        {
                OFF, ABSOLUTE;
+               
+               @Override
+               public String toString()
+               {
+                       return super.toString().toLowerCase();
+               }
        }
        
-       public static void main(String[] args)
+       public static void main(String[] args) throws IOException
        {
                SaveLoadManager.openLoadDialog();
        }
+
+       public Snapping getSnapping()
+       {
+               return snapping;
+       }
+
+       public void setSnapping(Snapping snapping)
+       {
+               this.snapping = snapping;
+       }
 }