]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.g2d/src/org/simantics/g2d/event/adapter/SWTKeyEventAdapter.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.g2d / src / org / simantics / g2d / event / adapter / SWTKeyEventAdapter.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 /*\r
13  *\r
14  * @author Toni Kalajainen\r
15  */\r
16 package org.simantics.g2d.event.adapter;\r
17 \r
18 import java.awt.event.KeyEvent;\r
19 \r
20 import org.eclipse.swt.SWT;\r
21 import org.eclipse.swt.events.KeyListener;\r
22 import org.simantics.scenegraph.g2d.events.Event;\r
23 import org.simantics.scenegraph.g2d.events.EventDebugPolicy;\r
24 import org.simantics.scenegraph.g2d.events.IEventHandler;\r
25 import org.simantics.scenegraph.g2d.events.IEventQueue;\r
26 import org.simantics.scenegraph.g2d.events.KeyEvent.KeyPressedEvent;\r
27 import org.simantics.scenegraph.g2d.events.KeyEvent.KeyReleasedEvent;\r
28 import org.simantics.scenegraph.g2d.events.adapter.AbstractEventAdapter;\r
29 \r
30 /**\r
31  * Adapts SWT key events to G2D Event\r
32  *\r
33  * @see Event\r
34  * @author Toni Kalajainen\r
35  */\r
36 public class SWTKeyEventAdapter extends AbstractEventAdapter implements KeyListener {\r
37 \r
38     private final boolean DEBUG = EventDebugPolicy.SWT_KEY_EVENT_ADAPTION;\r
39 \r
40     public SWTKeyEventAdapter(Object sender, IEventHandler delegator) {\r
41         super(sender, delegator);\r
42     }\r
43 \r
44     public SWTKeyEventAdapter(Object sender, IEventQueue queue) {\r
45         super(sender, queue);\r
46     }\r
47 \r
48     @Override\r
49     public void keyPressed(org.eclipse.swt.events.KeyEvent e) {\r
50         if (DEBUG)\r
51             System.out.println("SWT key pressed: " + e);\r
52         handleEvent(\r
53                 new KeyPressedEvent(sender, e.time, e.character, adaptSWTKeyCodeToAWTKeyCode(e.keyCode), adaptSWTModifierToAWTModifier(e.stateMask)));\r
54     }\r
55 \r
56     @Override\r
57     public void keyReleased(org.eclipse.swt.events.KeyEvent e) {\r
58         if (DEBUG)\r
59             System.out.println("SWT key released: " + e);\r
60         handleEvent(\r
61                 new KeyReleasedEvent(sender, e.time, e.character, adaptSWTKeyCodeToAWTKeyCode(e.keyCode), adaptSWTModifierToAWTModifier(e.stateMask)));\r
62     }\r
63 \r
64     public static int adaptSWTKeyCodeToAWTKeyCode(int swtKeyCode)\r
65     {\r
66         int c = swtKeyCode;\r
67 \r
68 \r
69         if (swtKeyCode>=KeyEvent.VK_A+0x20 && swtKeyCode<=KeyEvent.VK_Z+0x20)\r
70             return swtKeyCode - 0x20;\r
71 \r
72         switch(swtKeyCode) {\r
73             case SWT.ARROW_UP: return KeyEvent.VK_UP;\r
74             case SWT.ARROW_DOWN: return KeyEvent.VK_DOWN;\r
75             case SWT.ARROW_LEFT: return KeyEvent.VK_LEFT;\r
76             case SWT.ARROW_RIGHT: return KeyEvent.VK_RIGHT;\r
77             case SWT.PAGE_UP: return KeyEvent.VK_PAGE_UP;\r
78             case SWT.PAGE_DOWN: return KeyEvent.VK_PAGE_DOWN;\r
79             case SWT.HOME: return KeyEvent.VK_HOME;\r
80             case SWT.END: return KeyEvent.VK_END;\r
81             case SWT.INSERT: return KeyEvent.VK_INSERT;\r
82             case SWT.F1: return KeyEvent.VK_F1;\r
83             case SWT.F2: return KeyEvent.VK_F2;\r
84             case SWT.F3: return KeyEvent.VK_F3;\r
85             case SWT.F4: return KeyEvent.VK_F4;\r
86             case SWT.F5: return KeyEvent.VK_F5;\r
87             case SWT.F6: return KeyEvent.VK_F6;\r
88             case SWT.F7: return KeyEvent.VK_F7;\r
89             case SWT.F8: return KeyEvent.VK_F8;\r
90             case SWT.F9: return KeyEvent.VK_F9;\r
91             case SWT.F10: return KeyEvent.VK_F10;\r
92             case SWT.F11: return KeyEvent.VK_F11;\r
93             case SWT.F12: return KeyEvent.VK_F12;\r
94             case SWT.F13: return KeyEvent.VK_F13;\r
95             case SWT.F14: return KeyEvent.VK_F14;\r
96             case SWT.F15: return KeyEvent.VK_F15;\r
97             case SWT.KEYPAD_MULTIPLY: return KeyEvent.VK_MULTIPLY;\r
98             case SWT.KEYPAD_ADD: return KeyEvent.VK_ADD;\r
99             case SWT.KEYPAD_SUBTRACT: return KeyEvent.VK_SUBTRACT;\r
100             case SWT.KEYPAD_DECIMAL: return KeyEvent.VK_DECIMAL;\r
101             case SWT.KEYPAD_DIVIDE: return KeyEvent.VK_DIVIDE;\r
102             case SWT.KEYPAD_0: return KeyEvent.VK_NUMPAD0;\r
103             case SWT.KEYPAD_1: return KeyEvent.VK_NUMPAD1;\r
104             case SWT.KEYPAD_2: return KeyEvent.VK_NUMPAD2;\r
105             case SWT.KEYPAD_3: return KeyEvent.VK_NUMPAD3;\r
106             case SWT.KEYPAD_4: return KeyEvent.VK_NUMPAD4;\r
107             case SWT.KEYPAD_5: return KeyEvent.VK_NUMPAD5;\r
108             case SWT.KEYPAD_6: return KeyEvent.VK_NUMPAD6;\r
109             case SWT.KEYPAD_7: return KeyEvent.VK_NUMPAD7;\r
110             case SWT.KEYPAD_8: return KeyEvent.VK_NUMPAD8;\r
111             case SWT.KEYPAD_9: return KeyEvent.VK_NUMPAD9;\r
112             case SWT.KEYPAD_EQUAL: return KeyEvent.VK_EQUALS;\r
113             case SWT.KEYPAD_CR: return KeyEvent.VK_ENTER; // wrong?\r
114             case SWT.HELP: return KeyEvent.VK_HELP;\r
115             case SWT.CAPS_LOCK: return KeyEvent.VK_CAPS_LOCK;\r
116             case SWT.NUM_LOCK: return KeyEvent.VK_NUM_LOCK;\r
117             case SWT.SCROLL_LOCK: return KeyEvent.VK_NUM_LOCK;\r
118             case SWT.PAUSE: return KeyEvent.VK_PAUSE;\r
119             //case SWT.BREAK: return KeyEvent.vk_\r
120             case SWT.PRINT_SCREEN: return KeyEvent.VK_PRINTSCREEN;\r
121 \r
122             case SWT.DEL: return KeyEvent.VK_DELETE;\r
123             case SWT.CR: return KeyEvent.VK_ENTER;\r
124             case SWT.ESC: return KeyEvent.VK_ESCAPE;\r
125             case SWT.TAB: return KeyEvent.VK_TAB;\r
126             case SWT.ALT: return KeyEvent.VK_ALT;\r
127             case SWT.SHIFT: return KeyEvent.VK_SHIFT;\r
128             case SWT.CTRL: return KeyEvent.VK_CONTROL;\r
129             case SWT.COMMAND: return KeyEvent.VK_META;\r
130             case SWT.BS: return KeyEvent.VK_BACK_SPACE;\r
131             //case SWT.: return KeyEvent.VK_;\r
132 \r
133         }\r
134         if (c>=0 && c<255) return c;\r
135 \r
136         // Guess :G\r
137         return c;\r
138     }\r
139 \r
140     public static int adaptSWTModifierToAWTModifier(int swtModifier)\r
141     {\r
142         int c = swtModifier;\r
143         int result = 0;\r
144 \r
145         boolean alt = (c & SWT.ALT) != 0;\r
146         boolean ctrl = (c & SWT.CTRL) != 0;\r
147         boolean shift = (c & SWT.SHIFT) != 0;\r
148         boolean command = (c & SWT.COMMAND) != 0;\r
149 \r
150         if (alt)         result |= KeyEvent.ALT_DOWN_MASK       | KeyEvent.ALT_MASK;\r
151         if (ctrl)        result |= KeyEvent.CTRL_DOWN_MASK      | KeyEvent.CTRL_MASK;\r
152         if (alt && ctrl) result |= KeyEvent.ALT_GRAPH_DOWN_MASK | KeyEvent.ALT_GRAPH_MASK;\r
153         if (shift)       result |= KeyEvent.SHIFT_DOWN_MASK     | KeyEvent.SHIFT_MASK;\r
154         if (command)     result |= KeyEvent.META_DOWN_MASK      | KeyEvent.META_MASK;\r
155 \r
156         return result;\r
157     }\r
158 \r
159 \r
160 }\r