--- /dev/null
+/*******************************************************************************\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