154a81f479a65736ea9bbaf44dedb5e34c241bae
[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 import net.mograsim.preferences.Preferences;
8
9 public class EditorUserInput
10 {
11         private final EditorGUI gui;
12
13         public EditorUserInput(Editor editor)
14         {
15                 this.gui = editor.gui;
16                 gui.logicCanvas.addListener(SWT.MouseDown, e ->
17                 {
18                         Point clicked = editor.gui.logicCanvas.canvasToWorldCoords(e.x, e.y);
19                         if (e.button == Preferences.current().getInt("net.mograsim.logic.model.button.action"))
20                                 editor.handleManager.click(clicked, e.stateMask);
21                 });
22
23                 gui.logicCanvas.addMouseMoveListener(e ->
24                 {
25                         Point dest = editor.gui.logicCanvas.canvasToWorldCoords(e.x, e.y);
26                         editor.stateManager.mouseMoved(dest.x, dest.y);
27                 });
28
29                 gui.logicCanvas.addListener(SWT.KeyDown, e ->
30                 {
31                         switch (e.keyCode)
32                         {
33                         case 'c':
34                                 if ((e.stateMask & SWT.CTRL) == SWT.CTRL)
35                                         editor.stateManager.copy();
36                                 break;
37                         case 'v':
38                                 if ((e.stateMask & SWT.CTRL) == SWT.CTRL)
39                                         editor.stateManager.paste();
40                                 break;
41                         case 'd':
42                                 if ((e.stateMask & SWT.SHIFT) == SWT.SHIFT)
43                                         editor.stateManager.duplicate();
44                                 break;
45                         case 'g':
46                                 editor.stateManager.grab();
47                                 break;
48                         case 'r':
49                                 editor.stateManager.delete();
50                                 break;
51                         case 's':
52                                 if ((e.stateMask & SWT.CTRL) == SWT.CTRL)
53                                         editor.save();
54                                 break;
55                         case 'a':
56                                 if ((e.stateMask & SWT.SHIFT) == SWT.SHIFT)
57                                         editor.stateManager.add();
58                                 break;
59                         case 'h':
60                                 editor.stateManager.boxSelect();
61                                 break;
62                         default:
63                                 // don't react
64                         }
65                 });
66         }
67
68         public Point getCanvasMousePosition()
69         {
70                 return new Point(gui.logicCanvas.toControl(gui.display.getCursorLocation()));
71         }
72
73         public Point getWorldMousePosition()
74         {
75                 return gui.logicCanvas.canvasToWorldCoords(getCanvasMousePosition());
76         }
77 }