333efcd17e148d63a9913235260b2c7449768b70
[Mograsim.git] / plugins / net.mograsim.logic.model.editor / src / net / mograsim / logic / model / editor / EditorUserInput.java
1 package net.mograsim.logic.model.editor;
2
3 import org.eclipse.swt.SWT;
4
5 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
6 import net.mograsim.logic.model.editor.ui.EditorGUI;
7
8 public class EditorUserInput
9 {
10         private final EditorGUI gui;
11
12         public EditorUserInput(Editor editor)
13         {
14                 this.gui = editor.gui;
15                 gui.logicCanvas.addListener(SWT.MouseDown, e ->
16                 {
17                         Point clicked = editor.gui.logicCanvas.canvasToWorldCoords(e.x, e.y);
18                         switch (e.button)
19                         {
20                         case 1:
21                                 editor.handleManager.click(clicked, e.stateMask);
22                                 break;
23                         default:
24                                 // don't react
25                         }
26
27                 });
28
29                 gui.logicCanvas.addMouseMoveListener(e ->
30                 {
31                         Point dest = editor.gui.logicCanvas.canvasToWorldCoords(e.x, e.y);
32                         editor.stateManager.mouseMoved(dest.x, dest.y);
33                 });
34
35                 gui.logicCanvas.addListener(SWT.KeyDown, e ->
36                 {
37                         switch (e.keyCode)
38                         {
39                         case 'c':
40                                 if ((e.stateMask & SWT.CTRL) == SWT.CTRL)
41                                         editor.stateManager.copy();
42                                 break;
43                         case 'v':
44                                 if ((e.stateMask & SWT.CTRL) == SWT.CTRL)
45                                         editor.stateManager.paste();
46                                 break;
47                         case 'd':
48                                 if ((e.stateMask & SWT.SHIFT) == SWT.SHIFT)
49                                         editor.stateManager.duplicate();
50                                 break;
51                         case 'g':
52                                 editor.stateManager.grab();
53                                 break;
54                         case 'r':
55                                 editor.stateManager.delete();
56                                 break;
57                         case 's':
58                                 if ((e.stateMask & SWT.CTRL) == SWT.CTRL)
59                                         editor.save();
60                                 break;
61                         case 'a':
62                                 if ((e.stateMask & SWT.SHIFT) == SWT.SHIFT)
63                                         editor.stateManager.add();
64                                 break;
65                         case 'h':
66                                 editor.stateManager.boxSelect();
67                                 break;
68                         default:
69                                 // don't react
70                         }
71                 });
72         }
73
74         public Point getCanvasMousePosition()
75         {
76                 return new Point(gui.logicCanvas.toControl(gui.display.getCursorLocation()));
77         }
78
79         public Point getWorldMousePosition()
80         {
81                 return gui.logicCanvas.canvasToWorldCoords(getCanvasMousePosition());
82         }
83 }