Fixed a bug in Am2900; created dlatch8/80; relayouted some components
[Mograsim.git] / net.mograsim.logic.model.editor / src / net / mograsim / logic / model / editor / states / CreateWireState.java
1 package net.mograsim.logic.model.editor.states;
2
3 import org.eclipse.swt.SWT;
4 import org.eclipse.swt.widgets.Display;
5 import org.eclipse.swt.widgets.Shell;
6
7 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
8 import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas.ZoomedRenderer;
9 import net.mograsim.logic.model.editor.Editor;
10 import net.mograsim.logic.model.editor.handles.PinHandle;
11 import net.mograsim.logic.model.editor.handles.Handle.HandleClickInfo;
12
13 public class CreateWireState extends EditorState
14 {
15         private final PinHandle origin;
16         private double mX, mY;
17         private ZoomedRenderer drawLine;
18
19         public CreateWireState(Editor session, StateManager manager, PinHandle origin)
20         {
21                 super(session, manager);
22                 this.origin = origin;
23                 mX = origin.getCenterX();
24                 mY = origin.getCenterY();
25         }
26
27         @Override
28         public void mouseMoved(double x, double y)
29         {
30                 this.mX = x;
31                 this.mY = y;
32                 editor.gui.logicCanvas.redraw();
33         }
34
35         @Override
36         public void onEntry()
37         {
38                 editor.getSelection().clear();
39                 drawLine = gc ->
40                 {
41                         gc.setLineWidth(1);
42                         gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GREEN));
43                         gc.drawLine((int) origin.getCenterX(), (int) origin.getCenterY(), (int) mX, (int) mY);
44                 };
45                 editor.gui.logicCanvas.addZoomedRenderer(drawLine);
46                 editor.gui.logicCanvas.redraw();
47         }
48
49         @Override
50         public void onExit()
51         {
52                 editor.gui.logicCanvas.removeZoomedRenderer(drawLine);
53                 editor.gui.logicCanvas.redraw();
54         }
55
56         @Override
57         public boolean clickedHandle(HandleClickInfo handleClickInfo)
58         {
59                 switch (handleClickInfo.clicked.getType())
60                 {
61                 case INTERFACE_PIN:
62                 case STATIC_PIN:
63                         try
64                         {
65                                 editor.addWire(origin, (PinHandle) handleClickInfo.clicked);
66                         }
67                         catch (IllegalArgumentException e)
68                         {
69                                 Shell tmp = new Shell(Display.getCurrent());
70                                 editor.dialogManager.openWarningDialog("Warning!", e.getMessage());
71                                 tmp.dispose();
72                         }
73                         break;
74                 default:
75                         return false;
76                 }
77                 return true;
78         }
79
80         @Override
81         public void clicked(Point clicked, int stateMask)
82         {
83                 manager.setState(new SelectionState(editor, manager));
84         }
85 }