/**
* Code copied from class swingwt\awt\event\KeyEvent.java
* in project swingwt http://swingwt.sourceforge.net
*
* Usage:
* JXGrabKey.getInstance().registerAWTHotkey(1,
* KeyCodeTranslator.translateSWTModifiers(SWT.CTRL),
* KeyCodeTranslator.translateSWTKey(SWT.F8));
*/
private static class KeyCodeTranslator {
/** Returns the AWT modifier code for an SWT modifier */
public static int translateSWTModifiers(int swtModifiers) {
int awtModifiers = 0;
if ((swtModifiers & SWT.CTRL) > 0)
awtModifiers = awtModifiers | java.awt.event.InputEvent.CTRL_MASK;
if ((swtModifiers & SWT.SHIFT) > 0)
awtModifiers = awtModifiers | java.awt.event.InputEvent.SHIFT_MASK;
if ((swtModifiers & SWT.ALT) > 0)
awtModifiers = awtModifiers | java.awt.event.InputEvent.ALT_MASK;
if ((swtModifiers & SWT.BUTTON1) > 0)
awtModifiers = awtModifiers | java.awt.event.InputEvent.BUTTON1_DOWN_MASK;
if ((swtModifiers & SWT.BUTTON2) > 0)
awtModifiers = awtModifiers | java.awt.event.InputEvent.BUTTON2_DOWN_MASK;
if ((swtModifiers & SWT.BUTTON3) > 0)
awtModifiers = awtModifiers | java.awt.event.InputEvent.BUTTON3_DOWN_MASK;
if ((swtModifiers & SWT.COMMAND) > 0)
awtModifiers = awtModifiers | java.awt.event.InputEvent.META_MASK;
return awtModifiers;
}
/** Returns the AWT key code for an SWT key */
public static int translateSWTKey(int swtKey) {
int awt = 0;
for (int i = 1; i < translationMap.length; i += 2) {
if (translationMap[i] == swtKey) {
awt = translationMap[i - 1];
break;
}
}
return awt;
}
/** Returns the SWT key code for an AWT key */
public static int translateAWTKey(int awtKey) {
int swt = 0;
for (int i = 0; i < translationMap.length; i += 2) {
if (translationMap[i] == awtKey) {
swt = translationMap[i + 1];
break;
}
}
return swt;
}
private static final int VK_ENTER = '\n';
private static final int VK_BACK_SPACE = '\b';
private static final int VK_TAB = '\t';
private static final int VK_CANCEL = 0x03;
private static final int VK_CLEAR = 0x0C;
private static final int VK_SHIFT = 0x10;
private static final int VK_CONTROL = 0x11;
private static final int VK_ALT = 0x12;
private static final int VK_PAUSE = 0x13;
private static final int VK_CAPS_LOCK = 0x14;
private static final int VK_ESCAPE = 0x1B;
private static final int VK_SPACE = 0x20;
private static final int VK_PAGE_UP = 0x21;
private static final int VK_PAGE_DOWN = 0x22;
private static final int VK_END = 0x23;
private static final int VK_HOME = 0x24;
private static final int VK_LEFT = 0x25;
private static final int VK_UP = 0x26;
private static final int VK_RIGHT = 0x27;
private static final int VK_DOWN = 0x28;
private static final int VK_COMMA = 0x2C;
private static final int VK_MINUS = 0x2D;
private static final int VK_PERIOD = 0x2E;
private static final int VK_SLASH = 0x2F;
private static final int VK_0 = 0x30;
private static final int VK_1 = 0x31;
private static final int VK_2 = 0x32;
private static final int VK_3 = 0x33;
private static final int VK_4 = 0x34;
private static final int VK_5 = 0x35;
private static final int VK_6 = 0x36;
private static final int VK_7 = 0x37;
private static final int VK_8 = 0x38;
private static final int VK_9 = 0x39;
private static final int VK_SEMICOLON = 0x3B;
private static final int VK_EQUALS = 0x3D;
private static final int VK_A = 0x41;
private static final int VK_B = 0x42;
private static final int VK_C = 0x43;
private static final int VK_D = 0x44;
private static final int VK_E = 0x45;
private static final int VK_F = 0x46;
private static final int VK_G = 0x47;
private static final int VK_H = 0x48;
private static final int VK_I = 0x49;
private static final int VK_J = 0x4A;
private static final int VK_K = 0x4B;
private static final int VK_L = 0x4C;
private static final int VK_M = 0x4D;
private static final int VK_N = 0x4E;
private static final int VK_O = 0x4F;
private static final int VK_P = 0x50;
private static final int VK_Q = 0x51;
private static final int VK_R = 0x52;
private static final int VK_S = 0x53;
private static final int VK_T = 0x54;
private static final int VK_U = 0x55;
private static final int VK_V = 0x56;
private static final int VK_W = 0x57;
private static final int VK_X = 0x58;
private static final int VK_Y = 0x59;
private static final int VK_Z = 0x5A;
private static final int VK_OPEN_BRACKET = 0x5B;
private static final int VK_BACK_SLASH = 0x5C;
private static final int VK_CLOSE_BRACKET = 0x5D;
private static final int VK_NUMPAD0 = 0x60;
private static final int VK_NUMPAD1 = 0x61;
private static final int VK_NUMPAD2 = 0x62;
private static final int VK_NUMPAD3 = 0x63;
private static final int VK_NUMPAD4 = 0x64;
private static final int VK_NUMPAD5 = 0x65;
private static final int VK_NUMPAD6 = 0x66;
private static final int VK_NUMPAD7 = 0x67;
private static final int VK_NUMPAD8 = 0x68;
private static final int VK_NUMPAD9 = 0x69;
private static final int VK_MULTIPLY = 0x6A;
private static final int VK_ADD = 0x6B;
private static final int VK_SEPARATOR = 0x6C;
private static final int VK_SUBTRACT = 0x6D;
private static final int VK_DECIMAL = 0x6E;
private static final int VK_DIVIDE = 0x6F;
private static final int VK_DELETE = 0x7F;
private static final int VK_NUM_LOCK = 0x90;
private static final int VK_SCROLL_LOCK = 0x91;
private static final int VK_F1 = 0x70;
private static final int VK_F2 = 0x71;
private static final int VK_F3 = 0x72;
private static final int VK_F4 = 0x73;
private static final int VK_F5 = 0x74;
private static final int VK_F6 = 0x75;
private static final int VK_F7 = 0x76;
private static final int VK_F8 = 0x77;
private static final int VK_F9 = 0x78;
private static final int VK_F10 = 0x79;
private static final int VK_F11 = 0x7A;
private static final int VK_F12 = 0x7B;
private static final int VK_PRINTSCREEN = 0x9A;
private static final int VK_INSERT = 0x9B;
private static final int VK_HELP = 0x9C;
private static final int VK_META = 0x9D;
private static final int VK_BACK_QUOTE = 0xC0;
private static final int VK_QUOTE = 0xDE;
private static final int VK_KP_UP = 0xE0;
private static final int VK_KP_DOWN = 0xE1;
private static final int VK_KP_LEFT = 0xE2;
private static final int VK_KP_RIGHT = 0xE3;
private static final int VK_AMPERSAND = 0x96;
private static final int VK_ASTERISK = 0x97;
private static final int VK_QUOTEDBL = 0x98;
private static final int VK_LESS = 0x99;
private static final int VK_GREATER = 0xa0;
private static final int VK_BRACELEFT = 0xa1;
private static final int VK_BRACERIGHT = 0xa2;
private static final int VK_AT = 0x0200;
private static final int VK_COLON = 0x0201;
private static final int VK_CIRCUMFLEX = 0x0202;
private static final int VK_DOLLAR = 0x0203;
private static final int VK_EURO_SIGN = 0x0204;
private static final int VK_EXCLAMATION_MARK = 0x0205;
private static final int VK_INVERTED_EXCLAMATION_MARK = 0x0206;
private static final int VK_LEFT_PARENTHESIS = 0x0207;
private static final int VK_NUMBER_SIGN = 0x0208;
private static final int VK_PLUS = 0x0209;
private static final int VK_RIGHT_PARENTHESIS = 0x020A;
private static final int VK_UNDERSCORE = 0x020B;
private static final int SWTVK_A = 'A';
private static final int SWTVK_B = 'B';
private static final int SWTVK_C = 'C';
private static final int SWTVK_D = 'D';
private static final int SWTVK_E = 'E';
private static final int SWTVK_F = 'F';
private static final int SWTVK_G = 'G';
private static final int SWTVK_H = 'H';
private static final int SWTVK_I = 'I';
private static final int SWTVK_J = 'J';
private static final int SWTVK_K = 'K';
private static final int SWTVK_L = 'L';
private static final int SWTVK_M = 'M';
private static final int SWTVK_N = 'N';
private static final int SWTVK_O = 'O';
private static final int SWTVK_P = 'P';
private static final int SWTVK_Q = 'Q';
private static final int SWTVK_R = 'R';
private static final int SWTVK_S = 'S';
private static final int SWTVK_T = 'T';
private static final int SWTVK_U = 'U';
private static final int SWTVK_V = 'V';
private static final int SWTVK_W = 'W';
private static final int SWTVK_X = 'X';
private static final int SWTVK_Y = 'Y';
private static final int SWTVK_Z = 'Z';
private static final int SWTVK_SPACE = ' ';
private static final int SWTVK_0 = '0';
private static final int SWTVK_1 = '1';
private static final int SWTVK_2 = '2';
private static final int SWTVK_3 = '3';
private static final int SWTVK_4 = '4';
private static final int SWTVK_5 = '5';
private static final int SWTVK_6 = '6';
private static final int SWTVK_7 = '7';
private static final int SWTVK_8 = '8';
private static final int SWTVK_9 = '9';
private static final int SWTVK_SEMICOLON = ';';
private static final int SWTVK_EQUALS = '=';
private static final int SWTVK_COMMA = ',';
private static final int SWTVK_MINUS = '-';
private static final int SWTVK_PERIOD = '.';
private static final int SWTVK_SLASH = '/';
private static final int SWTVK_OPEN_BRACKET = '(';
private static final int SWTVK_BACK_SLASH = '\\';
private static final int SWTVK_CLOSE_BRACKET = ')';
private static final int SWTVK_UNDERSCORE = '_';
private static final int SWTVK_ADD = '+';
private static final int SWTVK_PLUS = '+';
private static final int SWTVK_NUMBER_SIGN = '+';
private static final int SWTVK_MULTIPLY = '*';
private static final int SWTVK_SUBTRACT = '-';
private static final int SWTVK_DECIMAL = '.';
private static final int SWTVK_DIVIDE = '.';
private static final int SWTVK_BACK_QUOTE = '`';
private static final int SWTVK_QUOTE = '\'';
private static final int SWTVK_AMPERSAND = '&';
private static final int SWTVK_ASTERISK = '*';
private static final int SWTVK_QUOTEDBL = '"';
private static final int SWTVK_LESS = '<';
private static final int SWTVK_GREATER = '>';
private static final int SWTVK_BRACELEFT = '{';
private static final int SWTVK_BRACERIGHT = '}';
private static final int SWTVK_AT = '@';
private static final int SWTVK_CIRCUMFLEX = '~';
private static final int SWTVK_DOLLAR = '$';
private static final int SWTVK_EURO_SIGN = '$';
private static final int SWTVK_EXCLAMATION_MARK = '!';
private static final int SWTVK_INVERTED_EXCLAMATION_MARK = '!';
private static final int SWTVK_LEFT_PARENTHESIS = '(';
private static final int SWTVK_RIGHT_PARENTHESIS = ')';
private static final int SWTVK_COLON = ':';
private static final int SWTVK_TAB = '\t';
private static final int SWTVK_F1 = SWT.F1;
private static final int SWTVK_F2 = SWT.F2;
private static final int SWTVK_F3 = SWT.F3;
private static final int SWTVK_F4 = SWT.F4;
private static final int SWTVK_F5 = SWT.F5;
private static final int SWTVK_F6 = SWT.F6;
private static final int SWTVK_F7 = SWT.F7;
private static final int SWTVK_F8 = SWT.F8;
private static final int SWTVK_F9 = SWT.F9;
private static final int SWTVK_F10 = SWT.F10;
private static final int SWTVK_F11 = SWT.F11;
private static final int SWTVK_F12 = SWT.F12;
private static final int SWTVK_ENTER = SWT.CR;
private static final int SWTVK_BACK_SPACE = 8;
private static final int SWTVK_DELETE = SWT.DEL;
private static final int SWTVK_ESCAPE = SWT.ESC;
// NOTE: I think this is right... should use the arrow ids instead of left/right/etc (intended for alignment)
private static final int SWTVK_LEFT = SWT.ARROW_LEFT;
private static final int SWTVK_RIGHT = SWT.ARROW_RIGHT;
private static final int SWTVK_UP = SWT.ARROW_UP;
private static final int SWTVK_DOWN = SWT.ARROW_DOWN;
private static final int SWTVK_HOME = SWT.HOME;
private static final int SWTVK_END = SWT.END;
/*
private static final int SWTVK_LEFT = SWT.LEFT;
private static final int SWTVK_KP_LEFT = SWT.LEFT;
private static final int SWTVK_RIGHT = SWT.RIGHT;
private static final int SWTVK_KP_RIGHT = SWT.RIGHT;
private static final int SWTVK_UP = SWT.UP;
private static final int SWTVK_KP_UP = SWT.UP;
private static final int SWTVK_DOWN = SWT.DOWN;
private static final int SWTVK_KP_DOWN = SWT.DOWN;
private static final int SWTVK_HOME = SWT.HOME;
private static final int SWTVK_END = SWT.END;
*/
private static final int SWTVK_PAGE_UP = SWT.PAGE_UP;
private static final int SWTVK_PAGE_DOWN = SWT.PAGE_DOWN;
private static final int SWTVK_INSERT = SWT.INSERT;
private static final int SWTVK_SHIFT = SWT.SHIFT;
private static final int SWTVK_CONTROL = SWT.CONTROL;
private static final int SWTVK_ALT = SWT.ALT;
private static final int SWTVK_META = SWT.ALT;
private static final int SWTVK_CANCEL = SWT.CANCEL;
private static final int SWTVK_CLEAR = SWT.NONE;
private static final int SWTVK_PAUSE = SWT.PAUSE;
private static final int SWTVK_CAPS_LOCK = SWT.CAPS_LOCK;
private static final int SWTVK_SEPARATOR = SWT.SEPARATOR;
private static final int SWTVK_NUM_LOCK = SWT.NUM_LOCK;
private static final int SWTVK_SCROLL_LOCK = SWT.SCROLL_LOCK;
private static final int SWTVK_PRINTSCREEN = SWT.PRINT_SCREEN;
private static final int SWTVK_HELP = SWT.HELP;
/** Map of SWT key constants to AWT constants. This is to
* ensure binary compatibility for existing Swing/AWT apps.
*/
private static int[] translationMap = new int[] {
VK_ENTER, SWTVK_ENTER,
VK_BACK_SPACE, SWTVK_BACK_SPACE,
VK_TAB, SWTVK_TAB,
VK_CANCEL, SWTVK_CANCEL,
VK_CLEAR, SWTVK_CLEAR,
VK_SHIFT, SWTVK_SHIFT,
VK_CONTROL, SWTVK_CONTROL,
VK_ALT, SWTVK_ALT,
VK_PAUSE, SWTVK_PAUSE,
VK_CAPS_LOCK, SWTVK_CAPS_LOCK,
VK_ESCAPE, SWTVK_ESCAPE,
VK_SPACE, SWTVK_SPACE,
VK_PAGE_UP, SWTVK_PAGE_UP,
VK_PAGE_DOWN, SWTVK_PAGE_DOWN,
VK_END, SWTVK_END,
VK_HOME, SWTVK_HOME,
VK_LEFT, SWTVK_LEFT,
VK_UP, SWTVK_UP,
VK_RIGHT, SWTVK_RIGHT,
VK_DOWN, SWTVK_DOWN,
VK_COMMA, SWTVK_COMMA,
VK_MINUS, SWTVK_MINUS,
VK_PERIOD, SWTVK_PERIOD,
VK_SLASH, SWTVK_SLASH,
VK_0, SWTVK_0,
VK_1, SWTVK_1,
VK_2, SWTVK_2,
VK_3, SWTVK_3,
VK_4, SWTVK_4,
VK_5, SWTVK_5,
VK_6, SWTVK_6,
VK_7, SWTVK_7,
VK_8, SWTVK_8,
VK_9, SWTVK_9,
VK_SEMICOLON, SWTVK_SEMICOLON,
VK_EQUALS, SWTVK_EQUALS,
VK_A, SWTVK_A,
VK_B, SWTVK_B,
VK_C, SWTVK_C,
VK_D, SWTVK_D,
VK_E, SWTVK_E,
VK_F, SWTVK_F,
VK_G, SWTVK_G,
VK_H, SWTVK_H,
VK_I, SWTVK_I,
VK_J, SWTVK_J,
VK_K, SWTVK_K,
VK_L, SWTVK_L,
VK_M, SWTVK_M,
VK_N, SWTVK_N,
VK_O, SWTVK_O,
VK_P, SWTVK_P,
VK_Q, SWTVK_Q,
VK_R, SWTVK_R,
VK_S, SWTVK_S,
VK_T, SWTVK_T,
VK_U, SWTVK_U,
VK_V, SWTVK_V,
VK_W, SWTVK_W,
VK_X, SWTVK_X,
VK_Y, SWTVK_Y,
VK_Z, SWTVK_Z,
VK_OPEN_BRACKET, SWTVK_OPEN_BRACKET,
VK_BACK_SLASH, SWTVK_BACK_SLASH,
VK_CLOSE_BRACKET, SWTVK_CLOSE_BRACKET,
VK_NUMPAD0, SWTVK_0,
VK_NUMPAD1, SWTVK_1,
VK_NUMPAD2, SWTVK_2,
VK_NUMPAD3, SWTVK_3,
VK_NUMPAD4, SWTVK_4,
VK_NUMPAD5, SWTVK_5,
VK_NUMPAD6, SWTVK_6,
VK_NUMPAD7, SWTVK_7,
VK_NUMPAD8, SWTVK_8,
VK_NUMPAD9, SWTVK_9,
VK_MULTIPLY, SWTVK_MULTIPLY,
VK_ADD, SWTVK_ADD,
VK_SEPARATOR, SWTVK_SEPARATOR,
VK_SUBTRACT, SWTVK_SUBTRACT,
VK_DECIMAL, SWTVK_DECIMAL,
VK_DIVIDE, SWTVK_DIVIDE,
VK_DELETE, SWTVK_DELETE,
VK_NUM_LOCK, SWTVK_NUM_LOCK,
VK_SCROLL_LOCK, SWTVK_SCROLL_LOCK,
VK_F1, SWTVK_F1,
VK_F2, SWTVK_F2,
VK_F3, SWTVK_F3,
VK_F4, SWTVK_F4,
VK_F5, SWTVK_F5,
VK_F6, SWTVK_F6,
VK_F7, SWTVK_F7,
VK_F8, SWTVK_F8,
VK_F9, SWTVK_F9,
VK_F10, SWTVK_F10,
VK_F11, SWTVK_F11,
VK_F12, SWTVK_F12,
VK_PRINTSCREEN, SWTVK_PRINTSCREEN,
VK_INSERT, SWTVK_INSERT,
VK_HELP, SWTVK_HELP,
VK_META, SWTVK_META,
VK_BACK_QUOTE, SWTVK_BACK_QUOTE,
VK_QUOTE, SWTVK_QUOTE,
VK_KP_UP, SWTVK_UP,
VK_KP_DOWN, SWTVK_DOWN,
VK_KP_LEFT, SWTVK_LEFT,
VK_KP_RIGHT, SWTVK_RIGHT,
VK_AMPERSAND, SWTVK_AMPERSAND,
VK_ASTERISK, SWTVK_ASTERISK,
VK_QUOTEDBL, SWTVK_QUOTEDBL,
VK_LESS, SWTVK_LESS,
VK_GREATER, SWTVK_GREATER,
VK_BRACELEFT, SWTVK_BRACELEFT,
VK_BRACERIGHT, SWTVK_BRACERIGHT,
VK_AT, SWTVK_AT,
VK_COLON, SWTVK_COLON,
VK_CIRCUMFLEX, SWTVK_CIRCUMFLEX,
VK_DOLLAR, SWTVK_DOLLAR,
VK_EURO_SIGN, SWTVK_EURO_SIGN,
VK_EXCLAMATION_MARK, SWTVK_EXCLAMATION_MARK,
VK_INVERTED_EXCLAMATION_MARK, SWTVK_INVERTED_EXCLAMATION_MARK,
VK_LEFT_PARENTHESIS, SWTVK_LEFT_PARENTHESIS,
VK_NUMBER_SIGN, SWTVK_NUMBER_SIGN,
VK_PLUS, SWTVK_PLUS,
VK_RIGHT_PARENTHESIS, SWTVK_RIGHT_PARENTHESIS,
VK_UNDERSCORE, SWTVK_UNDERSCORE,
VK_A, SWTVK_A + 32,
VK_B, SWTVK_B + 32,
VK_C, SWTVK_C + 32,
VK_D, SWTVK_D + 32,
VK_E, SWTVK_E + 32,
VK_F, SWTVK_F + 32,
VK_G, SWTVK_G + 32,
VK_H, SWTVK_H + 32,
VK_I, SWTVK_I + 32,
VK_J, SWTVK_J + 32,
VK_K, SWTVK_K + 32,
VK_L, SWTVK_L + 32,
VK_M, SWTVK_M + 32,
VK_N, SWTVK_N + 32,
VK_O, SWTVK_O + 32,
VK_P, SWTVK_P + 32,
VK_Q, SWTVK_Q + 32,
VK_R, SWTVK_R + 32,
VK_S, SWTVK_S + 32,
VK_T, SWTVK_T + 32,
VK_U, SWTVK_U + 32,
VK_V, SWTVK_V + 32,
VK_W, SWTVK_W + 32,
VK_X, SWTVK_X + 32,
VK_Y, SWTVK_Y + 32,
VK_Z, SWTVK_Z + 32,
};
}