package net.mograsim.logic.model.editor;
-import java.io.IOException;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Optional;
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;
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
{
final Set<ComponentInfo> copyBuffer = new HashSet<>();
public final DeserializedSubmodelComponent toBeEdited;
public final HandleManager handleManager;
- final static Map<GUIComponent, String> identifierPerComponent = new HashMap<>();
public final EditorGUI gui;
public final StateManager stateManager;
private final SaveLoadManager saveManager;
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();
}
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)
{
c.reqMove(newX, newY);
}
}
-
+
public void moveHandles(double x, double y, Map<Handle, Point> handleOffsetMap)
{
Point snapped = new Point(x, y);
for (Handle h : selection)
{
Optional<ComponentInfo> cInfo = h.reqCopy(refPoint);
- if(cInfo.isPresent())
+ if (cInfo.isPresent())
copyBuffer.add(cInfo.get());
}
}
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();
{
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()
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;
}
}
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;
}
}
+ @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) throws IOException
+
+ public static void main(String[] args)
+ {
+ Am2900Loader.setup();
+ openNewEditor();
+// SaveLoadManager.openLoadDialog();
+ }
+
+ public static void openNewEditor()
{
- SaveLoadManager.openLoadDialog();
+ 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()