]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.g2d/src/org/simantics/g2d/event/adapter/SWTKeyEventAdapter.java b/bundles/org.simantics.g2d/src/org/simantics/g2d/event/adapter/SWTKeyEventAdapter.java
new file mode 100644 (file)
index 0000000..3175147
--- /dev/null
@@ -0,0 +1,160 @@
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+/*\r
+ *\r
+ * @author Toni Kalajainen\r
+ */\r
+package org.simantics.g2d.event.adapter;\r
+\r
+import java.awt.event.KeyEvent;\r
+\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.events.KeyListener;\r
+import org.simantics.scenegraph.g2d.events.Event;\r
+import org.simantics.scenegraph.g2d.events.EventDebugPolicy;\r
+import org.simantics.scenegraph.g2d.events.IEventHandler;\r
+import org.simantics.scenegraph.g2d.events.IEventQueue;\r
+import org.simantics.scenegraph.g2d.events.KeyEvent.KeyPressedEvent;\r
+import org.simantics.scenegraph.g2d.events.KeyEvent.KeyReleasedEvent;\r
+import org.simantics.scenegraph.g2d.events.adapter.AbstractEventAdapter;\r
+\r
+/**\r
+ * Adapts SWT key events to G2D Event\r
+ *\r
+ * @see Event\r
+ * @author Toni Kalajainen\r
+ */\r
+public class SWTKeyEventAdapter extends AbstractEventAdapter implements KeyListener {\r
+\r
+    private final boolean DEBUG = EventDebugPolicy.SWT_KEY_EVENT_ADAPTION;\r
+\r
+    public SWTKeyEventAdapter(Object sender, IEventHandler delegator) {\r
+        super(sender, delegator);\r
+    }\r
+\r
+    public SWTKeyEventAdapter(Object sender, IEventQueue queue) {\r
+        super(sender, queue);\r
+    }\r
+\r
+    @Override\r
+    public void keyPressed(org.eclipse.swt.events.KeyEvent e) {\r
+        if (DEBUG)\r
+            System.out.println("SWT key pressed: " + e);\r
+        handleEvent(\r
+                new KeyPressedEvent(sender, e.time, e.character, adaptSWTKeyCodeToAWTKeyCode(e.keyCode), adaptSWTModifierToAWTModifier(e.stateMask)));\r
+    }\r
+\r
+    @Override\r
+    public void keyReleased(org.eclipse.swt.events.KeyEvent e) {\r
+        if (DEBUG)\r
+            System.out.println("SWT key released: " + e);\r
+        handleEvent(\r
+                new KeyReleasedEvent(sender, e.time, e.character, adaptSWTKeyCodeToAWTKeyCode(e.keyCode), adaptSWTModifierToAWTModifier(e.stateMask)));\r
+    }\r
+\r
+    public static int adaptSWTKeyCodeToAWTKeyCode(int swtKeyCode)\r
+    {\r
+        int c = swtKeyCode;\r
+\r
+\r
+        if (swtKeyCode>=KeyEvent.VK_A+0x20 && swtKeyCode<=KeyEvent.VK_Z+0x20)\r
+            return swtKeyCode - 0x20;\r
+\r
+        switch(swtKeyCode) {\r
+            case SWT.ARROW_UP: return KeyEvent.VK_UP;\r
+            case SWT.ARROW_DOWN: return KeyEvent.VK_DOWN;\r
+            case SWT.ARROW_LEFT: return KeyEvent.VK_LEFT;\r
+            case SWT.ARROW_RIGHT: return KeyEvent.VK_RIGHT;\r
+            case SWT.PAGE_UP: return KeyEvent.VK_PAGE_UP;\r
+            case SWT.PAGE_DOWN: return KeyEvent.VK_PAGE_DOWN;\r
+            case SWT.HOME: return KeyEvent.VK_HOME;\r
+            case SWT.END: return KeyEvent.VK_END;\r
+            case SWT.INSERT: return KeyEvent.VK_INSERT;\r
+            case SWT.F1: return KeyEvent.VK_F1;\r
+            case SWT.F2: return KeyEvent.VK_F2;\r
+            case SWT.F3: return KeyEvent.VK_F3;\r
+            case SWT.F4: return KeyEvent.VK_F4;\r
+            case SWT.F5: return KeyEvent.VK_F5;\r
+            case SWT.F6: return KeyEvent.VK_F6;\r
+            case SWT.F7: return KeyEvent.VK_F7;\r
+            case SWT.F8: return KeyEvent.VK_F8;\r
+            case SWT.F9: return KeyEvent.VK_F9;\r
+            case SWT.F10: return KeyEvent.VK_F10;\r
+            case SWT.F11: return KeyEvent.VK_F11;\r
+            case SWT.F12: return KeyEvent.VK_F12;\r
+            case SWT.F13: return KeyEvent.VK_F13;\r
+            case SWT.F14: return KeyEvent.VK_F14;\r
+            case SWT.F15: return KeyEvent.VK_F15;\r
+            case SWT.KEYPAD_MULTIPLY: return KeyEvent.VK_MULTIPLY;\r
+            case SWT.KEYPAD_ADD: return KeyEvent.VK_ADD;\r
+            case SWT.KEYPAD_SUBTRACT: return KeyEvent.VK_SUBTRACT;\r
+            case SWT.KEYPAD_DECIMAL: return KeyEvent.VK_DECIMAL;\r
+            case SWT.KEYPAD_DIVIDE: return KeyEvent.VK_DIVIDE;\r
+            case SWT.KEYPAD_0: return KeyEvent.VK_NUMPAD0;\r
+            case SWT.KEYPAD_1: return KeyEvent.VK_NUMPAD1;\r
+            case SWT.KEYPAD_2: return KeyEvent.VK_NUMPAD2;\r
+            case SWT.KEYPAD_3: return KeyEvent.VK_NUMPAD3;\r
+            case SWT.KEYPAD_4: return KeyEvent.VK_NUMPAD4;\r
+            case SWT.KEYPAD_5: return KeyEvent.VK_NUMPAD5;\r
+            case SWT.KEYPAD_6: return KeyEvent.VK_NUMPAD6;\r
+            case SWT.KEYPAD_7: return KeyEvent.VK_NUMPAD7;\r
+            case SWT.KEYPAD_8: return KeyEvent.VK_NUMPAD8;\r
+            case SWT.KEYPAD_9: return KeyEvent.VK_NUMPAD9;\r
+            case SWT.KEYPAD_EQUAL: return KeyEvent.VK_EQUALS;\r
+            case SWT.KEYPAD_CR: return KeyEvent.VK_ENTER; // wrong?\r
+            case SWT.HELP: return KeyEvent.VK_HELP;\r
+            case SWT.CAPS_LOCK: return KeyEvent.VK_CAPS_LOCK;\r
+            case SWT.NUM_LOCK: return KeyEvent.VK_NUM_LOCK;\r
+            case SWT.SCROLL_LOCK: return KeyEvent.VK_NUM_LOCK;\r
+            case SWT.PAUSE: return KeyEvent.VK_PAUSE;\r
+            //case SWT.BREAK: return KeyEvent.vk_\r
+            case SWT.PRINT_SCREEN: return KeyEvent.VK_PRINTSCREEN;\r
+\r
+            case SWT.DEL: return KeyEvent.VK_DELETE;\r
+            case SWT.CR: return KeyEvent.VK_ENTER;\r
+            case SWT.ESC: return KeyEvent.VK_ESCAPE;\r
+            case SWT.TAB: return KeyEvent.VK_TAB;\r
+            case SWT.ALT: return KeyEvent.VK_ALT;\r
+            case SWT.SHIFT: return KeyEvent.VK_SHIFT;\r
+            case SWT.CTRL: return KeyEvent.VK_CONTROL;\r
+            case SWT.COMMAND: return KeyEvent.VK_META;\r
+            case SWT.BS: return KeyEvent.VK_BACK_SPACE;\r
+            //case SWT.: return KeyEvent.VK_;\r
+\r
+        }\r
+        if (c>=0 && c<255) return c;\r
+\r
+        // Guess :G\r
+        return c;\r
+    }\r
+\r
+    public static int adaptSWTModifierToAWTModifier(int swtModifier)\r
+    {\r
+        int c = swtModifier;\r
+        int result = 0;\r
+\r
+        boolean alt = (c & SWT.ALT) != 0;\r
+        boolean ctrl = (c & SWT.CTRL) != 0;\r
+        boolean shift = (c & SWT.SHIFT) != 0;\r
+        boolean command = (c & SWT.COMMAND) != 0;\r
+\r
+        if (alt)         result |= KeyEvent.ALT_DOWN_MASK       | KeyEvent.ALT_MASK;\r
+        if (ctrl)        result |= KeyEvent.CTRL_DOWN_MASK      | KeyEvent.CTRL_MASK;\r
+        if (alt && ctrl) result |= KeyEvent.ALT_GRAPH_DOWN_MASK | KeyEvent.ALT_GRAPH_MASK;\r
+        if (shift)       result |= KeyEvent.SHIFT_DOWN_MASK     | KeyEvent.SHIFT_MASK;\r
+        if (command)     result |= KeyEvent.META_DOWN_MASK      | KeyEvent.META_MASK;\r
+\r
+        return result;\r
+    }\r
+\r
+\r
+}\r