The final restructured version for automatic build using maven tycho
[Mograsim.git] / plugins / net.mograsim.logic.model.editor / src / net / mograsim / logic / model / editor / states / CreateWireState.java
diff --git a/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/CreateWireState.java b/plugins/net.mograsim.logic.model.editor/src/net/mograsim/logic/model/editor/states/CreateWireState.java
new file mode 100644 (file)
index 0000000..1c06c52
--- /dev/null
@@ -0,0 +1,85 @@
+package net.mograsim.logic.model.editor.states;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
+import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas.ZoomedRenderer;
+import net.mograsim.logic.model.editor.Editor;
+import net.mograsim.logic.model.editor.handles.PinHandle;
+import net.mograsim.logic.model.editor.handles.Handle.HandleClickInfo;
+
+public class CreateWireState extends EditorState
+{
+       private final PinHandle origin;
+       private double mX, mY;
+       private ZoomedRenderer drawLine;
+
+       public CreateWireState(Editor session, StateManager manager, PinHandle origin)
+       {
+               super(session, manager);
+               this.origin = origin;
+               mX = origin.getCenterX();
+               mY = origin.getCenterY();
+       }
+
+       @Override
+       public void mouseMoved(double x, double y)
+       {
+               this.mX = x;
+               this.mY = y;
+               editor.gui.logicCanvas.redraw();
+       }
+
+       @Override
+       public void onEntry()
+       {
+               editor.getSelection().clear();
+               drawLine = gc ->
+               {
+                       gc.setLineWidth(1);
+                       gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GREEN));
+                       gc.drawLine((int) origin.getCenterX(), (int) origin.getCenterY(), (int) mX, (int) mY);
+               };
+               editor.gui.logicCanvas.addZoomedRenderer(drawLine);
+               editor.gui.logicCanvas.redraw();
+       }
+
+       @Override
+       public void onExit()
+       {
+               editor.gui.logicCanvas.removeZoomedRenderer(drawLine);
+               editor.gui.logicCanvas.redraw();
+       }
+
+       @Override
+       public boolean clickedHandle(HandleClickInfo handleClickInfo)
+       {
+               switch (handleClickInfo.clicked.getType())
+               {
+               case INTERFACE_PIN:
+               case STATIC_PIN:
+                       try
+                       {
+                               editor.addWire(origin, (PinHandle) handleClickInfo.clicked);
+                       }
+                       catch (IllegalArgumentException e)
+                       {
+                               Shell tmp = new Shell(Display.getCurrent());
+                               editor.dialogManager.openWarningDialog("Warning!", e.getMessage());
+                               tmp.dispose();
+                       }
+                       break;
+               default:
+                       return false;
+               }
+               return true;
+       }
+
+       @Override
+       public void clicked(Point clicked, int stateMask)
+       {
+               manager.setState(new SelectionState(editor, manager));
+       }
+}