< prev index next >

src/java.desktop/macosx/native/libawt_lwawt/awt/CMenuItem.m

Print this page




  96         static JNF_MEMBER_CACHE(jm_ckHandleAction, jc_CCheckboxMenuItem, "handleAction", "(Z)V");
  97 
  98         // Send the opposite of what's currently checked -- the action
  99         // indicates what state we're going to.
 100         NSInteger state = [sender state];
 101         jboolean newState = (state == NSOnState ? JNI_FALSE : JNI_TRUE);
 102         JNFCallVoidMethod(env, fPeer, jm_ckHandleAction, newState);
 103     } else {
 104         static JNF_CLASS_CACHE(jc_CMenuItem, "sun/lwawt/macosx/CMenuItem");
 105         static JNF_MEMBER_CACHE(jm_handleAction, jc_CMenuItem, "handleAction", "(JI)V"); // AWT_THREADING Safe (event)
 106 
 107         NSUInteger modifiers = [currEvent modifierFlags];
 108         jint javaModifiers = NsKeyModifiersToJavaModifiers(modifiers, NO);
 109 
 110         JNFCallVoidMethod(env, fPeer, jm_handleAction, UTC(currEvent), javaModifiers); // AWT_THREADING Safe (event)
 111     }
 112     JNF_COCOA_EXIT(env);
 113 }
 114 
 115 - (void) setJavaLabel:(NSString *)theLabel shortcut:(NSString *)theKeyEquivalent modifierMask:(jint)modifiers {
 116     
 117     NSUInteger modifierMask = 0;
 118     
 119     if (![theKeyEquivalent isEqualToString:@""]) {
 120         // Force the key equivalent to lower case if not using the shift key.
 121         // Otherwise AppKit will draw a Shift glyph in the menu.
 122         if ((modifiers & java_awt_event_KeyEvent_SHIFT_MASK) == 0) {
 123             theKeyEquivalent = [theKeyEquivalent lowercaseString];
 124         }
 125         
 126         // Hack for the question mark -- SHIFT and / means use the question mark.
 127         if ((modifiers & java_awt_event_KeyEvent_SHIFT_MASK) != 0 &&
 128             [theKeyEquivalent isEqualToString:@"/"])
 129         {
 130             theKeyEquivalent = @"?";
 131             modifiers &= ~java_awt_event_KeyEvent_SHIFT_MASK;
 132         }
 133         
 134         modifierMask = JavaModifiersToNsKeyModifiers(modifiers, NO);
 135     }
 136     
 137     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
 138         [fMenuItem setKeyEquivalent:theKeyEquivalent];
 139         [fMenuItem setKeyEquivalentModifierMask:modifierMask];
 140         [fMenuItem setTitle:theLabel];
 141     }];
 142 }
 143 
 144 - (void) setJavaImage:(NSImage *)theImage {
 145     
 146     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 147         [fMenuItem setImage:theImage];
 148     }];
 149 }
 150 
 151 - (void) setJavaToolTipText:(NSString *)theText {
 152     
 153     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 154         [fMenuItem setToolTip:theText];
 155     }];
 156 }
 157 
 158 
 159 - (void)setJavaEnabled:(BOOL) enabled {
 160     
 161     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 162         @synchronized(self) {
 163             fIsEnabled = enabled;
 164             
 165             // Warning:  This won't work if the parent menu is disabled.
 166             // See [CMenu syncFromJava]. We still need to call it here so
 167             // the NSMenuItem itself gets properly updated.
 168             [fMenuItem setEnabled:fIsEnabled];
 169         }
 170     }];
 171 }
 172 
 173 - (BOOL)isEnabled {
 174     
 175     BOOL enabled = NO;
 176     @synchronized(self) {
 177         enabled = fIsEnabled;
 178     }
 179     return enabled;
 180 }
 181 
 182 
 183 - (void)setJavaState:(BOOL)newState {
 184     
 185     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 186         [fMenuItem setState:(newState ? NSOnState : NSOffState)];
 187     }];
 188 }
 189 
 190 - (void)dealloc {
 191     [fMenuItem setAction:NULL];
 192     [fMenuItem setTarget:nil];
 193     [fMenuItem release];
 194     fMenuItem = nil;
 195     
 196     [super dealloc];
 197 }
 198 
 199 - (void)addNSMenuItemToMenu:(NSMenu *)inMenu {
 200     [inMenu addItem:fMenuItem];
 201 }
 202 
 203 - (NSMenuItem *)menuItem {
 204     return [[fMenuItem retain] autorelease];
 205 }
 206 
 207 - (void)setIsCheckbox {
 208     fIsCheckbox = YES;
 209 }
 210 
 211 - (NSString *)description {
 212     return [NSString stringWithFormat:@"CMenuItem[ %@ ]", fMenuItem];
 213 }
 214 
 215 @end
 216 
 217 /** Convert a Java keycode for SetMenuItemCmd */
 218 static unichar AWTKeyToMacShortcut(jint awtKey, BOOL doShift) {
 219     unichar macKey = 0;
 220     
 221     if ((awtKey >= java_awt_event_KeyEvent_VK_0 && awtKey <= java_awt_event_KeyEvent_VK_9) ||
 222         (awtKey >= java_awt_event_KeyEvent_VK_A && awtKey <= java_awt_event_KeyEvent_VK_Z))
 223     {
 224         // These ranges are the same in ASCII
 225         macKey = awtKey;
 226     } else if (awtKey >= java_awt_event_KeyEvent_VK_F1 && awtKey <= java_awt_event_KeyEvent_VK_F12) {
 227         // Support for F1 - F12 has been around since Java 1.0 and fall into a lower range.
 228         macKey = awtKey - java_awt_event_KeyEvent_VK_F1 + NSF1FunctionKey;
 229     } else if (awtKey >= java_awt_event_KeyEvent_VK_F13 && awtKey <= java_awt_event_KeyEvent_VK_F24) {
 230         // Support for F13-F24 came in Java 1.2 and are at a different range.
 231         macKey = awtKey - java_awt_event_KeyEvent_VK_F13 + NSF13FunctionKey;
 232     } else {
 233         // Special characters
 234         switch (awtKey) {
 235             case java_awt_event_KeyEvent_VK_BACK_QUOTE      : macKey = '`'; break;
 236             case java_awt_event_KeyEvent_VK_QUOTE           : macKey = '\''; break;
 237                 
 238             case java_awt_event_KeyEvent_VK_ESCAPE          : macKey = 0x1B; break;
 239             case java_awt_event_KeyEvent_VK_SPACE           : macKey = ' '; break;
 240             case java_awt_event_KeyEvent_VK_PAGE_UP         : macKey = NSPageUpFunctionKey; break;
 241             case java_awt_event_KeyEvent_VK_PAGE_DOWN       : macKey = NSPageDownFunctionKey; break;
 242             case java_awt_event_KeyEvent_VK_END             : macKey = NSEndFunctionKey; break;
 243             case java_awt_event_KeyEvent_VK_HOME            : macKey = NSHomeFunctionKey; break;
 244                 
 245             case java_awt_event_KeyEvent_VK_LEFT            : macKey = NSLeftArrowFunctionKey; break;
 246             case java_awt_event_KeyEvent_VK_UP              : macKey = NSUpArrowFunctionKey; break;
 247             case java_awt_event_KeyEvent_VK_RIGHT           : macKey = NSRightArrowFunctionKey; break;
 248             case java_awt_event_KeyEvent_VK_DOWN            : macKey = NSDownArrowFunctionKey; break;
 249                 
 250             case java_awt_event_KeyEvent_VK_COMMA           : macKey = ','; break;
 251                 
 252                 // Mac OS doesn't distinguish between the two '-' keys...
 253             case java_awt_event_KeyEvent_VK_MINUS           :
 254             case java_awt_event_KeyEvent_VK_SUBTRACT        : macKey = '-'; break;
 255                 
 256                 // or the two '.' keys...
 257             case java_awt_event_KeyEvent_VK_DECIMAL         :
 258             case java_awt_event_KeyEvent_VK_PERIOD          : macKey = '.'; break;
 259                 
 260                 // or the two '/' keys.
 261             case java_awt_event_KeyEvent_VK_DIVIDE          :
 262             case java_awt_event_KeyEvent_VK_SLASH           : macKey = '/'; break;
 263                 
 264             case java_awt_event_KeyEvent_VK_SEMICOLON       : macKey = ';'; break;
 265             case java_awt_event_KeyEvent_VK_EQUALS          : macKey = '='; break;
 266                 
 267             case java_awt_event_KeyEvent_VK_OPEN_BRACKET    : macKey = '['; break;
 268             case java_awt_event_KeyEvent_VK_BACK_SLASH      : macKey = '\\'; break;
 269             case java_awt_event_KeyEvent_VK_CLOSE_BRACKET   : macKey = ']'; break;
 270                 
 271             case java_awt_event_KeyEvent_VK_MULTIPLY        : macKey = '*'; break;
 272             case java_awt_event_KeyEvent_VK_ADD             : macKey = '+'; break;
 273                 
 274             case java_awt_event_KeyEvent_VK_HELP            : macKey = NSHelpFunctionKey; break;
 275             case java_awt_event_KeyEvent_VK_TAB             : macKey = NSTabCharacter; break;
 276             case java_awt_event_KeyEvent_VK_ENTER           : macKey = NSNewlineCharacter; break;
 277             case java_awt_event_KeyEvent_VK_BACK_SPACE      : macKey = NSBackspaceCharacter; break;
 278             case java_awt_event_KeyEvent_VK_DELETE          : macKey = NSDeleteCharacter; break;
 279             case java_awt_event_KeyEvent_VK_CLEAR           : macKey = NSClearDisplayFunctionKey; break;
 280             case java_awt_event_KeyEvent_VK_AMPERSAND       : macKey = '&'; break;
 281             case java_awt_event_KeyEvent_VK_ASTERISK        : macKey = '*'; break;
 282             case java_awt_event_KeyEvent_VK_QUOTEDBL        : macKey = '\"'; break;
 283             case java_awt_event_KeyEvent_VK_LESS            : macKey = '<'; break;
 284             case java_awt_event_KeyEvent_VK_GREATER         : macKey = '>'; break;
 285             case java_awt_event_KeyEvent_VK_BRACELEFT       : macKey = '{'; break;
 286             case java_awt_event_KeyEvent_VK_BRACERIGHT      : macKey = '}'; break;
 287             case java_awt_event_KeyEvent_VK_AT              : macKey = '@'; break;
 288             case java_awt_event_KeyEvent_VK_COLON           : macKey = ':'; break;
 289             case java_awt_event_KeyEvent_VK_CIRCUMFLEX      : macKey = '^'; break;
 290             case java_awt_event_KeyEvent_VK_DOLLAR          : macKey = '$'; break;
 291             case java_awt_event_KeyEvent_VK_EXCLAMATION_MARK : macKey = '!'; break;
 292             case java_awt_event_KeyEvent_VK_LEFT_PARENTHESIS : macKey = '('; break;
 293             case java_awt_event_KeyEvent_VK_NUMBER_SIGN     : macKey = '#'; break;


 297         }
 298     }
 299     return macKey;
 300 }
 301 
 302 /*
 303  * Class:     sun_lwawt_macosx_CMenuItem
 304  * Method:    nativeSetLabel
 305  * Signature: (JLjava/lang/String;CII)V
 306  */
 307 JNIEXPORT void JNICALL
 308 Java_sun_lwawt_macosx_CMenuItem_nativeSetLabel
 309 (JNIEnv *env, jobject peer,
 310  jlong menuItemObj, jstring label,
 311  jchar shortcutKey, jint shortcutKeyCode, jint mods)
 312 {
 313     JNF_COCOA_ENTER(env);
 314     NSString *theLabel = JNFJavaToNSString(env, label);
 315     NSString *theKeyEquivalent = nil;
 316     unichar macKey = shortcutKey;
 317     
 318     if (macKey == 0) {
 319         macKey = AWTKeyToMacShortcut(shortcutKeyCode, (mods & java_awt_event_KeyEvent_SHIFT_MASK) != 0);
 320     }
 321     
 322     if (macKey != 0) {
 323         unichar equivalent[1] = {macKey};
 324         theKeyEquivalent = [NSString stringWithCharacters:equivalent length:1];
 325     } else {
 326         theKeyEquivalent = @"";
 327     }
 328     
 329     [((CMenuItem *)jlong_to_ptr(menuItemObj)) setJavaLabel:theLabel shortcut:theKeyEquivalent modifierMask:mods];
 330     JNF_COCOA_EXIT(env);
 331 }
 332 
 333 /*
 334  * Class:     sun_lwawt_macosx_CMenuItem
 335  * Method:    nativeSetTooltip
 336  * Signature: (JLjava/lang/String;)V
 337  */
 338 JNIEXPORT void JNICALL
 339 Java_sun_lwawt_macosx_CMenuItem_nativeSetTooltip
 340 (JNIEnv *env, jobject peer, jlong menuItemObj, jstring tooltip)
 341 {
 342     JNF_COCOA_ENTER(env);
 343     NSString *theTooltip = JNFJavaToNSString(env, tooltip);
 344     [((CMenuItem *)jlong_to_ptr(menuItemObj)) setJavaToolTipText:theTooltip];
 345     JNF_COCOA_EXIT(env);
 346 }
 347 
 348 /*


 351  * Signature: (JJ)V
 352  */
 353 JNIEXPORT void JNICALL
 354 Java_sun_lwawt_macosx_CMenuItem_nativeSetImage
 355 (JNIEnv *env, jobject peer, jlong menuItemObj, jlong image)
 356 {
 357     JNF_COCOA_ENTER(env);
 358     [((CMenuItem *)jlong_to_ptr(menuItemObj)) setJavaImage:(NSImage*)jlong_to_ptr(image)];
 359     JNF_COCOA_EXIT(env);
 360 }
 361 
 362 /*
 363  * Class:     sun_lwawt_macosx_CMenuItem
 364  * Method:    nativeCreate
 365  * Signature: (JZ)J
 366  */
 367 JNIEXPORT jlong JNICALL
 368 Java_sun_lwawt_macosx_CMenuItem_nativeCreate
 369 (JNIEnv *env, jobject peer, jlong parentCMenuObj, jboolean isSeparator)
 370 {
 371     
 372     __block CMenuItem *aCMenuItem = nil;
 373     BOOL asSeparator = (isSeparator == JNI_TRUE) ? YES: NO;
 374     CMenu *parentCMenu = (CMenu *)jlong_to_ptr(parentCMenuObj);
 375     JNF_COCOA_ENTER(env);
 376     
 377     jobject cPeerObjGlobal = (*env)->NewGlobalRef(env, peer);
 378 
 379     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
 380         aCMenuItem = [[CMenuItem alloc] initWithPeer: cPeerObjGlobal
 381                                          asSeparator: asSeparator];
 382         // the CMenuItem is released in CMenuComponent.dispose()
 383     }];
 384     
 385     if (aCMenuItem == nil) {
 386         return 0L;
 387     }
 388     
 389     // and add it to the parent item.
 390     [parentCMenu addJavaMenuItem: aCMenuItem];
 391     
 392     // setLabel will be called after creation completes.
 393     
 394     JNF_COCOA_EXIT(env);
 395     return ptr_to_jlong(aCMenuItem);
 396 }
 397 
 398 /*
 399  * Class:     sun_lwawt_macosx_CMenuItem
 400  * Method:    nativeSetEnabled
 401  * Signature: (JZ)V
 402  */
 403 JNIEXPORT void JNICALL
 404 Java_sun_lwawt_macosx_CMenuItem_nativeSetEnabled
 405 (JNIEnv *env, jobject peer, jlong menuItemObj, jboolean enable)
 406 {
 407     JNF_COCOA_ENTER(env);
 408     CMenuItem *item = (CMenuItem *)jlong_to_ptr(menuItemObj);
 409     [item setJavaEnabled: (enable == JNI_TRUE)];
 410     JNF_COCOA_EXIT(env);
 411 }
 412 
 413 /*




  96         static JNF_MEMBER_CACHE(jm_ckHandleAction, jc_CCheckboxMenuItem, "handleAction", "(Z)V");
  97 
  98         // Send the opposite of what's currently checked -- the action
  99         // indicates what state we're going to.
 100         NSInteger state = [sender state];
 101         jboolean newState = (state == NSOnState ? JNI_FALSE : JNI_TRUE);
 102         JNFCallVoidMethod(env, fPeer, jm_ckHandleAction, newState);
 103     } else {
 104         static JNF_CLASS_CACHE(jc_CMenuItem, "sun/lwawt/macosx/CMenuItem");
 105         static JNF_MEMBER_CACHE(jm_handleAction, jc_CMenuItem, "handleAction", "(JI)V"); // AWT_THREADING Safe (event)
 106 
 107         NSUInteger modifiers = [currEvent modifierFlags];
 108         jint javaModifiers = NsKeyModifiersToJavaModifiers(modifiers, NO);
 109 
 110         JNFCallVoidMethod(env, fPeer, jm_handleAction, UTC(currEvent), javaModifiers); // AWT_THREADING Safe (event)
 111     }
 112     JNF_COCOA_EXIT(env);
 113 }
 114 
 115 - (void) setJavaLabel:(NSString *)theLabel shortcut:(NSString *)theKeyEquivalent modifierMask:(jint)modifiers {
 116 
 117     NSUInteger modifierMask = 0;
 118 
 119     if (![theKeyEquivalent isEqualToString:@""]) {
 120         // Force the key equivalent to lower case if not using the shift key.
 121         // Otherwise AppKit will draw a Shift glyph in the menu.
 122         if ((modifiers & java_awt_event_KeyEvent_SHIFT_MASK) == 0) {
 123             theKeyEquivalent = [theKeyEquivalent lowercaseString];
 124         }
 125 
 126         // Hack for the question mark -- SHIFT and / means use the question mark.
 127         if ((modifiers & java_awt_event_KeyEvent_SHIFT_MASK) != 0 &&
 128             [theKeyEquivalent isEqualToString:@"/"])
 129         {
 130             theKeyEquivalent = @"?";
 131             modifiers &= ~java_awt_event_KeyEvent_SHIFT_MASK;
 132         }
 133 
 134         modifierMask = JavaModifiersToNsKeyModifiers(modifiers, NO);
 135     }
 136 
 137     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
 138         [fMenuItem setKeyEquivalent:theKeyEquivalent];
 139         [fMenuItem setKeyEquivalentModifierMask:modifierMask];
 140         [fMenuItem setTitle:theLabel];
 141     }];
 142 }
 143 
 144 - (void) setJavaImage:(NSImage *)theImage {
 145 
 146     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 147         [fMenuItem setImage:theImage];
 148     }];
 149 }
 150 
 151 - (void) setJavaToolTipText:(NSString *)theText {
 152 
 153     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 154         [fMenuItem setToolTip:theText];
 155     }];
 156 }
 157 
 158 
 159 - (void)setJavaEnabled:(BOOL) enabled {
 160 
 161     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 162         @synchronized(self) {
 163             fIsEnabled = enabled;
 164 
 165             // Warning:  This won't work if the parent menu is disabled.
 166             // See [CMenu syncFromJava]. We still need to call it here so
 167             // the NSMenuItem itself gets properly updated.
 168             [fMenuItem setEnabled:fIsEnabled];
 169         }
 170     }];
 171 }
 172 
 173 - (BOOL)isEnabled {
 174 
 175     BOOL enabled = NO;
 176     @synchronized(self) {
 177         enabled = fIsEnabled;
 178     }
 179     return enabled;
 180 }
 181 
 182 
 183 - (void)setJavaState:(BOOL)newState {
 184 
 185     [ThreadUtilities performOnMainThreadWaiting:NO block:^(){
 186         [fMenuItem setState:(newState ? NSOnState : NSOffState)];
 187     }];
 188 }
 189 
 190 - (void)dealloc {
 191     [fMenuItem setAction:NULL];
 192     [fMenuItem setTarget:nil];
 193     [fMenuItem release];
 194     fMenuItem = nil;
 195 
 196     [super dealloc];
 197 }
 198 
 199 - (void)addNSMenuItemToMenu:(NSMenu *)inMenu {
 200     [inMenu addItem:fMenuItem];
 201 }
 202 
 203 - (NSMenuItem *)menuItem {
 204     return [[fMenuItem retain] autorelease];
 205 }
 206 
 207 - (void)setIsCheckbox {
 208     fIsCheckbox = YES;
 209 }
 210 
 211 - (NSString *)description {
 212     return [NSString stringWithFormat:@"CMenuItem[ %@ ]", fMenuItem];
 213 }
 214 
 215 @end
 216 
 217 /** Convert a Java keycode for SetMenuItemCmd */
 218 static unichar AWTKeyToMacShortcut(jint awtKey, BOOL doShift) {
 219     unichar macKey = 0;
 220 
 221     if ((awtKey >= java_awt_event_KeyEvent_VK_0 && awtKey <= java_awt_event_KeyEvent_VK_9) ||
 222         (awtKey >= java_awt_event_KeyEvent_VK_A && awtKey <= java_awt_event_KeyEvent_VK_Z))
 223     {
 224         // These ranges are the same in ASCII
 225         macKey = awtKey;
 226     } else if (awtKey >= java_awt_event_KeyEvent_VK_F1 && awtKey <= java_awt_event_KeyEvent_VK_F12) {
 227         // Support for F1 - F12 has been around since Java 1.0 and fall into a lower range.
 228         macKey = awtKey - java_awt_event_KeyEvent_VK_F1 + NSF1FunctionKey;
 229     } else if (awtKey >= java_awt_event_KeyEvent_VK_F13 && awtKey <= java_awt_event_KeyEvent_VK_F24) {
 230         // Support for F13-F24 came in Java 1.2 and are at a different range.
 231         macKey = awtKey - java_awt_event_KeyEvent_VK_F13 + NSF13FunctionKey;
 232     } else {
 233         // Special characters
 234         switch (awtKey) {
 235             case java_awt_event_KeyEvent_VK_BACK_QUOTE      : macKey = '`'; break;
 236             case java_awt_event_KeyEvent_VK_QUOTE           : macKey = '\''; break;
 237 
 238             case java_awt_event_KeyEvent_VK_ESCAPE          : macKey = 0x1B; break;
 239             case java_awt_event_KeyEvent_VK_SPACE           : macKey = ' '; break;
 240             case java_awt_event_KeyEvent_VK_PAGE_UP         : macKey = NSPageUpFunctionKey; break;
 241             case java_awt_event_KeyEvent_VK_PAGE_DOWN       : macKey = NSPageDownFunctionKey; break;
 242             case java_awt_event_KeyEvent_VK_END             : macKey = NSEndFunctionKey; break;
 243             case java_awt_event_KeyEvent_VK_HOME            : macKey = NSHomeFunctionKey; break;
 244 
 245             case java_awt_event_KeyEvent_VK_LEFT            : macKey = NSLeftArrowFunctionKey; break;
 246             case java_awt_event_KeyEvent_VK_UP              : macKey = NSUpArrowFunctionKey; break;
 247             case java_awt_event_KeyEvent_VK_RIGHT           : macKey = NSRightArrowFunctionKey; break;
 248             case java_awt_event_KeyEvent_VK_DOWN            : macKey = NSDownArrowFunctionKey; break;
 249 
 250             case java_awt_event_KeyEvent_VK_COMMA           : macKey = ','; break;
 251 
 252                 // Mac OS doesn't distinguish between the two '-' keys...
 253             case java_awt_event_KeyEvent_VK_MINUS           :
 254             case java_awt_event_KeyEvent_VK_SUBTRACT        : macKey = '-'; break;
 255 
 256                 // or the two '.' keys...
 257             case java_awt_event_KeyEvent_VK_DECIMAL         :
 258             case java_awt_event_KeyEvent_VK_PERIOD          : macKey = '.'; break;
 259 
 260                 // or the two '/' keys.
 261             case java_awt_event_KeyEvent_VK_DIVIDE          :
 262             case java_awt_event_KeyEvent_VK_SLASH           : macKey = '/'; break;
 263 
 264             case java_awt_event_KeyEvent_VK_SEMICOLON       : macKey = ';'; break;
 265             case java_awt_event_KeyEvent_VK_EQUALS          : macKey = '='; break;
 266 
 267             case java_awt_event_KeyEvent_VK_OPEN_BRACKET    : macKey = '['; break;
 268             case java_awt_event_KeyEvent_VK_BACK_SLASH      : macKey = '\\'; break;
 269             case java_awt_event_KeyEvent_VK_CLOSE_BRACKET   : macKey = ']'; break;
 270 
 271             case java_awt_event_KeyEvent_VK_MULTIPLY        : macKey = '*'; break;
 272             case java_awt_event_KeyEvent_VK_ADD             : macKey = '+'; break;
 273 
 274             case java_awt_event_KeyEvent_VK_HELP            : macKey = NSHelpFunctionKey; break;
 275             case java_awt_event_KeyEvent_VK_TAB             : macKey = NSTabCharacter; break;
 276             case java_awt_event_KeyEvent_VK_ENTER           : macKey = NSNewlineCharacter; break;
 277             case java_awt_event_KeyEvent_VK_BACK_SPACE      : macKey = NSBackspaceCharacter; break;
 278             case java_awt_event_KeyEvent_VK_DELETE          : macKey = NSDeleteCharacter; break;
 279             case java_awt_event_KeyEvent_VK_CLEAR           : macKey = NSClearDisplayFunctionKey; break;
 280             case java_awt_event_KeyEvent_VK_AMPERSAND       : macKey = '&'; break;
 281             case java_awt_event_KeyEvent_VK_ASTERISK        : macKey = '*'; break;
 282             case java_awt_event_KeyEvent_VK_QUOTEDBL        : macKey = '\"'; break;
 283             case java_awt_event_KeyEvent_VK_LESS            : macKey = '<'; break;
 284             case java_awt_event_KeyEvent_VK_GREATER         : macKey = '>'; break;
 285             case java_awt_event_KeyEvent_VK_BRACELEFT       : macKey = '{'; break;
 286             case java_awt_event_KeyEvent_VK_BRACERIGHT      : macKey = '}'; break;
 287             case java_awt_event_KeyEvent_VK_AT              : macKey = '@'; break;
 288             case java_awt_event_KeyEvent_VK_COLON           : macKey = ':'; break;
 289             case java_awt_event_KeyEvent_VK_CIRCUMFLEX      : macKey = '^'; break;
 290             case java_awt_event_KeyEvent_VK_DOLLAR          : macKey = '$'; break;
 291             case java_awt_event_KeyEvent_VK_EXCLAMATION_MARK : macKey = '!'; break;
 292             case java_awt_event_KeyEvent_VK_LEFT_PARENTHESIS : macKey = '('; break;
 293             case java_awt_event_KeyEvent_VK_NUMBER_SIGN     : macKey = '#'; break;


 297         }
 298     }
 299     return macKey;
 300 }
 301 
 302 /*
 303  * Class:     sun_lwawt_macosx_CMenuItem
 304  * Method:    nativeSetLabel
 305  * Signature: (JLjava/lang/String;CII)V
 306  */
 307 JNIEXPORT void JNICALL
 308 Java_sun_lwawt_macosx_CMenuItem_nativeSetLabel
 309 (JNIEnv *env, jobject peer,
 310  jlong menuItemObj, jstring label,
 311  jchar shortcutKey, jint shortcutKeyCode, jint mods)
 312 {
 313     JNF_COCOA_ENTER(env);
 314     NSString *theLabel = JNFJavaToNSString(env, label);
 315     NSString *theKeyEquivalent = nil;
 316     unichar macKey = shortcutKey;
 317 
 318     if (macKey == 0) {
 319         macKey = AWTKeyToMacShortcut(shortcutKeyCode, (mods & java_awt_event_KeyEvent_SHIFT_MASK) != 0);
 320     }
 321 
 322     if (macKey != 0) {
 323         unichar equivalent[1] = {macKey};
 324         theKeyEquivalent = [NSString stringWithCharacters:equivalent length:1];
 325     } else {
 326         theKeyEquivalent = @"";
 327     }
 328 
 329     [((CMenuItem *)jlong_to_ptr(menuItemObj)) setJavaLabel:theLabel shortcut:theKeyEquivalent modifierMask:mods];
 330     JNF_COCOA_EXIT(env);
 331 }
 332 
 333 /*
 334  * Class:     sun_lwawt_macosx_CMenuItem
 335  * Method:    nativeSetTooltip
 336  * Signature: (JLjava/lang/String;)V
 337  */
 338 JNIEXPORT void JNICALL
 339 Java_sun_lwawt_macosx_CMenuItem_nativeSetTooltip
 340 (JNIEnv *env, jobject peer, jlong menuItemObj, jstring tooltip)
 341 {
 342     JNF_COCOA_ENTER(env);
 343     NSString *theTooltip = JNFJavaToNSString(env, tooltip);
 344     [((CMenuItem *)jlong_to_ptr(menuItemObj)) setJavaToolTipText:theTooltip];
 345     JNF_COCOA_EXIT(env);
 346 }
 347 
 348 /*


 351  * Signature: (JJ)V
 352  */
 353 JNIEXPORT void JNICALL
 354 Java_sun_lwawt_macosx_CMenuItem_nativeSetImage
 355 (JNIEnv *env, jobject peer, jlong menuItemObj, jlong image)
 356 {
 357     JNF_COCOA_ENTER(env);
 358     [((CMenuItem *)jlong_to_ptr(menuItemObj)) setJavaImage:(NSImage*)jlong_to_ptr(image)];
 359     JNF_COCOA_EXIT(env);
 360 }
 361 
 362 /*
 363  * Class:     sun_lwawt_macosx_CMenuItem
 364  * Method:    nativeCreate
 365  * Signature: (JZ)J
 366  */
 367 JNIEXPORT jlong JNICALL
 368 Java_sun_lwawt_macosx_CMenuItem_nativeCreate
 369 (JNIEnv *env, jobject peer, jlong parentCMenuObj, jboolean isSeparator)
 370 {
 371 
 372     __block CMenuItem *aCMenuItem = nil;
 373     BOOL asSeparator = (isSeparator == JNI_TRUE) ? YES: NO;
 374     CMenu *parentCMenu = (CMenu *)jlong_to_ptr(parentCMenuObj);
 375     JNF_COCOA_ENTER(env);
 376 
 377     jobject cPeerObjGlobal = (*env)->NewGlobalRef(env, peer);
 378 
 379     [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
 380         aCMenuItem = [[CMenuItem alloc] initWithPeer: cPeerObjGlobal
 381                                          asSeparator: asSeparator];
 382         // the CMenuItem is released in CMenuComponent.dispose()
 383     }];
 384 
 385     if (aCMenuItem == nil) {
 386         return 0L;
 387     }
 388 
 389     // and add it to the parent item.
 390     [parentCMenu addJavaMenuItem: aCMenuItem];
 391 
 392     // setLabel will be called after creation completes.
 393 
 394     JNF_COCOA_EXIT(env);
 395     return ptr_to_jlong(aCMenuItem);
 396 }
 397 
 398 /*
 399  * Class:     sun_lwawt_macosx_CMenuItem
 400  * Method:    nativeSetEnabled
 401  * Signature: (JZ)V
 402  */
 403 JNIEXPORT void JNICALL
 404 Java_sun_lwawt_macosx_CMenuItem_nativeSetEnabled
 405 (JNIEnv *env, jobject peer, jlong menuItemObj, jboolean enable)
 406 {
 407     JNF_COCOA_ENTER(env);
 408     CMenuItem *item = (CMenuItem *)jlong_to_ptr(menuItemObj);
 409     [item setJavaEnabled: (enable == JNI_TRUE)];
 410     JNF_COCOA_EXIT(env);
 411 }
 412 
 413 /*


< prev index next >