1 /*
   2  * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 #import "CRobotKeyCode.h"
  27 #import "java_awt_event_KeyEvent.h"
  28 
  29 @implementation CRobotKeyCodeMapping
  30 
  31 @synthesize javaToMacKeyMap;
  32 
  33 + (CRobotKeyCodeMapping *)sharedInstance {
  34     static CRobotKeyCodeMapping *instance = nil;
  35     static dispatch_once_t executeOnce;
  36     
  37     dispatch_once(&executeOnce, ^ {
  38         instance = [[CRobotKeyCodeMapping alloc] init];
  39     });
  40     
  41     return instance;
  42 }
  43 
  44 - (id)init {
  45         self = [super init];
  46         
  47         if (nil != self) {
  48                 
  49                 javaToMacKeyMap = [NSDictionary dictionaryWithObjectsAndKeys:
  50                    [NSNumber numberWithInt:OSX_Delete], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_BACK_SPACE],
  51                    [NSNumber numberWithInt:OSX_kVK_Tab], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_TAB],
  52                    [NSNumber numberWithInt:OSX_kVK_Return], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_ENTER],
  53                    [NSNumber numberWithInt:OSX_kVK_ANSI_KeypadClear], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_CLEAR],
  54                    [NSNumber numberWithInt:OSX_Shift], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_SHIFT],
  55                    [NSNumber numberWithInt:OSX_Control], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_CONTROL],
  56                    [NSNumber numberWithInt:OSX_Option], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_ALT],
  57                    [NSNumber numberWithInt:OSX_CapsLock], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_CAPS_LOCK],
  58                    [NSNumber numberWithInt:OSX_Escape], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_ESCAPE],
  59                    [NSNumber numberWithInt:OSX_kVK_Space], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_SPACE],
  60                    [NSNumber numberWithInt:OSX_PageUp], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_PAGE_UP],
  61                    [NSNumber numberWithInt:OSX_PageDown], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_PAGE_DOWN],
  62                    [NSNumber numberWithInt:OSX_End], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_END],
  63                    [NSNumber numberWithInt:OSX_Home], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_HOME],
  64                    [NSNumber numberWithInt:OSX_LeftArrow], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_LEFT],
  65                    [NSNumber numberWithInt:OSX_UpArrow], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_UP],
  66                    [NSNumber numberWithInt:OSX_RightArrow], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_RIGHT],
  67                    [NSNumber numberWithInt:OSX_DownArrow], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_DOWN],
  68                    [NSNumber numberWithInt:OSX_kVK_ANSI_Comma], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_COMMA],
  69                    [NSNumber numberWithInt:OSX_kVK_ANSI_Minus], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_MINUS],
  70                    [NSNumber numberWithInt:OSX_kVK_ANSI_Period], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_PERIOD],
  71                    [NSNumber numberWithInt:OSX_kVK_ANSI_Slash], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_SLASH],
  72                    
  73                    [NSNumber numberWithInt:OSX_kVK_ANSI_0], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_0],
  74                    [NSNumber numberWithInt:OSX_kVK_ANSI_1], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_1],
  75                    [NSNumber numberWithInt:OSX_kVK_ANSI_2], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_2],
  76                    [NSNumber numberWithInt:OSX_kVK_ANSI_3], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_3],
  77                    [NSNumber numberWithInt:OSX_kVK_ANSI_4], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_4],
  78                    [NSNumber numberWithInt:OSX_kVK_ANSI_5], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_5],
  79                    [NSNumber numberWithInt:OSX_kVK_ANSI_6], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_6],
  80                    [NSNumber numberWithInt:OSX_kVK_ANSI_7], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_7],
  81                    [NSNumber numberWithInt:OSX_kVK_ANSI_8], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_8],
  82                    [NSNumber numberWithInt:OSX_kVK_ANSI_9], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_9],
  83                    
  84                    [NSNumber numberWithInt:OSX_kVK_ANSI_Semicolon], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_SEMICOLON],
  85                    [NSNumber numberWithInt:OSX_kVK_ANSI_Equal], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_EQUALS],
  86                    
  87                    [NSNumber numberWithInt:OSX_kVK_ANSI_A], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_A],
  88                    [NSNumber numberWithInt:OSX_kVK_ANSI_B], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_B],
  89                    [NSNumber numberWithInt:OSX_kVK_ANSI_C], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_C],
  90                    [NSNumber numberWithInt:OSX_kVK_ANSI_D], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_D],
  91                    [NSNumber numberWithInt:OSX_kVK_ANSI_E], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_E],
  92                    [NSNumber numberWithInt:OSX_kVK_ANSI_F], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F],
  93                    [NSNumber numberWithInt:OSX_kVK_ANSI_G], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_G],
  94                    [NSNumber numberWithInt:OSX_kVK_ANSI_H], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_H],
  95                    [NSNumber numberWithInt:OSX_kVK_ANSI_I], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_I],
  96                    [NSNumber numberWithInt:OSX_kVK_ANSI_J], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_J],
  97                    [NSNumber numberWithInt:OSX_kVK_ANSI_K], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_K],
  98                    [NSNumber numberWithInt:OSX_kVK_ANSI_L], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_L],
  99                    [NSNumber numberWithInt:OSX_kVK_ANSI_M], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_M],
 100                    [NSNumber numberWithInt:OSX_kVK_ANSI_N], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_N],
 101                    [NSNumber numberWithInt:OSX_kVK_ANSI_O], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_O],
 102                    [NSNumber numberWithInt:OSX_kVK_ANSI_P], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_P],
 103                    [NSNumber numberWithInt:OSX_kVK_ANSI_Q], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_Q],
 104                    [NSNumber numberWithInt:OSX_kVK_ANSI_R], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_R],
 105                    [NSNumber numberWithInt:OSX_kVK_ANSI_S], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_S],
 106                    [NSNumber numberWithInt:OSX_kVK_ANSI_T], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_T],
 107                    [NSNumber numberWithInt:OSX_kVK_ANSI_U], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_U],
 108                    [NSNumber numberWithInt:OSX_kVK_ANSI_V], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_V],
 109                    [NSNumber numberWithInt:OSX_kVK_ANSI_W], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_W],
 110                    [NSNumber numberWithInt:OSX_kVK_ANSI_X], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_X],
 111                    [NSNumber numberWithInt:OSX_kVK_ANSI_Y], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_Y],
 112                    [NSNumber numberWithInt:OSX_kVK_ANSI_Z], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_Z],
 113                    
 114                    [NSNumber numberWithInt:OSX_kVK_ANSI_LeftBracket], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_OPEN_BRACKET],
 115                    [NSNumber numberWithInt:OSX_kVK_ANSI_Backslash], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_BACK_SLASH],
 116                    [NSNumber numberWithInt:OSX_kVK_ANSI_RightBracket], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_CLOSE_BRACKET],
 117                    
 118                    [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad0], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD0],
 119                    [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad1], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD1],
 120                    [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad2], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD2],
 121                    [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad3], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD3],
 122                    [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad4], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD4],
 123                    [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad5], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD5],
 124                    [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad6], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD6],
 125                    [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad7], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD7],
 126                    [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad8], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD8],
 127                    [NSNumber numberWithInt:OSX_kVK_ANSI_Keypad9], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_NUMPAD9],
 128                    
 129                    [NSNumber numberWithInt:OSX_kVK_ANSI_KeypadMultiply], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_MULTIPLY],
 130                    [NSNumber numberWithInt:OSX_kVK_ANSI_KeypadPlus], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_ADD],
 131                    [NSNumber numberWithInt:OSX_kVK_ANSI_KeypadMinus], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_SUBTRACT],
 132                    [NSNumber numberWithInt:OSX_kVK_ANSI_KeypadDecimal], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_DECIMAL],
 133                    [NSNumber numberWithInt:OSX_kVK_ANSI_KeypadDivide], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_DIVIDE],
 134                    
 135                    [NSNumber numberWithInt:OSX_F1], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F1],
 136                    [NSNumber numberWithInt:OSX_F2], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F2],
 137                    [NSNumber numberWithInt:OSX_F3], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F3],
 138                    [NSNumber numberWithInt:OSX_F4], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F4],
 139                    [NSNumber numberWithInt:OSX_F5], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F5],
 140                    [NSNumber numberWithInt:OSX_F6], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F6],
 141                    [NSNumber numberWithInt:OSX_F7], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F7],
 142                    [NSNumber numberWithInt:OSX_F8], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F8],
 143                    [NSNumber numberWithInt:OSX_F9], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F9],
 144                    [NSNumber numberWithInt:OSX_F10], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F10],
 145                    [NSNumber numberWithInt:OSX_F11], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F11],
 146                    [NSNumber numberWithInt:OSX_F12], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F12],
 147                    
 148                    [NSNumber numberWithInt:OSX_ForwardDelete], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_DELETE],
 149                    [NSNumber numberWithInt:OSX_Help], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_HELP],
 150                    [NSNumber numberWithInt:OSX_Command], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_META],
 151                    [NSNumber numberWithInt:OSX_kVK_ANSI_Grave], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_BACK_QUOTE],
 152                    [NSNumber numberWithInt:OSX_kVK_ANSI_Quote], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_QUOTE],
 153                    
 154                    [NSNumber numberWithInt:OSX_F13], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F13],
 155                    [NSNumber numberWithInt:OSX_F14], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F14],
 156                    [NSNumber numberWithInt:OSX_F15], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F15],
 157                    [NSNumber numberWithInt:OSX_F16], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F16],
 158                    [NSNumber numberWithInt:OSX_F17], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F17],
 159                    [NSNumber numberWithInt:OSX_F18], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F18],
 160                    [NSNumber numberWithInt:OSX_F19], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F19],
 161                    [NSNumber numberWithInt:OSX_F20], [NSNumber numberWithInt:java_awt_event_KeyEvent_VK_F20],
 162                    
 163                    nil];
 164         }
 165         
 166         return self;
 167 }
 168 
 169 - (int)getOSXKeyCodeForJavaKey:(int)javaKey {
 170         
 171     int retval = OSX_Undefined;
 172         
 173     id val = [javaToMacKeyMap objectForKey:[NSNumber numberWithInt:javaKey]];
 174     if (nil != val) {
 175         retval = [val intValue];
 176     }
 177         
 178     return retval;
 179 }
 180 
 181 @end