--- /dev/null
+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));
+ }
+}