src/macosx/native/sun/awt/CMenu.m

Print this page




  38 - (id)initWithPeer:(jobject)peer {
  39 AWT_ASSERT_APPKIT_THREAD;
  40     // Create the new NSMenu
  41     self = [super initWithPeer:peer asSeparator:[NSNumber numberWithBool:NO]];
  42     if (self) {
  43         fMenu = [NSMenu javaMenuWithTitle:@""];
  44         [fMenu retain];
  45         [fMenu setAutoenablesItems:NO];
  46     }
  47     return self;
  48 }
  49 
  50 - (void)dealloc {
  51     [fMenu release];
  52     fMenu = nil;
  53     [super dealloc];
  54 }
  55 //- (void)finalize { [super finalize]; }
  56 
  57 - (void)addJavaSubmenu:(CMenu *)submenu {
  58     [ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) onObject:self withObject:submenu waitUntilDone:YES awtMode:YES];
  59 }
  60 
  61 - (void)addJavaMenuItem:(CMenuItem *)theMenuItem {
  62     [ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) onObject:self withObject:theMenuItem waitUntilDone:YES awtMode:YES];
  63 }
  64 
  65 - (void)addNativeItem_OnAppKitThread:(CMenuItem *)itemModified {
  66 AWT_ASSERT_APPKIT_THREAD;
  67     [itemModified addNSMenuItemToMenu:[self menu]];
  68 }
  69 
  70 - (void)setJavaMenuTitle:(NSString *)title {
  71 
  72     if (title) {
  73         [ThreadUtilities performOnMainThread:@selector(setNativeMenuTitle_OnAppKitThread:) onObject:self withObject:title waitUntilDone:YES awtMode:YES];
  74     }
  75 }
  76 
  77 - (void)setNativeMenuTitle_OnAppKitThread:(NSString *)title {
  78 AWT_ASSERT_APPKIT_THREAD;
  79 
  80     [fMenu setTitle:title];
  81     // If we are a submenu we need to set our name in the parent menu's menu item.
  82     NSMenu *parent = [fMenu supermenu];
  83     if (parent) {
  84         NSInteger index = [parent indexOfItemWithSubmenu:fMenu];
  85         NSMenuItem *menuItem = [parent itemAtIndex:index];
  86         [menuItem setTitle:title];
  87     }
  88 }
  89 
  90 - (void)addSeparator {
  91     // Nothing calls this, which is good because we need a CMenuItem here.
  92 }
  93 
  94 - (void)deleteJavaItem:(jint)index {
  95 
  96     [ThreadUtilities performOnMainThread:@selector(deleteNativeJavaItem_OnAppKitThread:) onObject:self withObject:[NSNumber numberWithInt:index] waitUntilDone:YES awtMode:YES];
  97 }
  98 
  99 - (void)deleteNativeJavaItem_OnAppKitThread:(NSNumber *)number {
 100 AWT_ASSERT_APPKIT_THREAD;
 101 
 102     int n = [number intValue];
 103     if (n < [[self menu] numberOfItems]) {
 104         [[self menu] removeItemAtIndex:n];
 105     }
 106 }
 107 
 108 - (void)addNSMenuItemToMenu:(NSMenu *)inMenu {
 109     if (fMenuItem == nil) return;
 110     [fMenuItem setSubmenu:fMenu];
 111     [inMenu addItem:fMenuItem];
 112 }
 113 
 114 - (NSMenu *)menu {
 115     return [[fMenu retain] autorelease];
 116 }


 122         fIsEnabled = [boolNumber boolValue];
 123 
 124         NSMenu* supermenu = [fMenu supermenu];
 125         [[supermenu itemAtIndex:[supermenu indexOfItemWithSubmenu:fMenu]] setEnabled:fIsEnabled];
 126     }
 127 }
 128 
 129 - (NSString *)description {
 130     return [NSString stringWithFormat:@"CMenu[ %@ ]", fMenu];
 131 }
 132 
 133 @end
 134 
 135 CMenu * createCMenu (jobject cPeerObjGlobal) {
 136 
 137     CMenu *aCMenu = nil;
 138 
 139     // We use an array here only to be able to get a return value
 140     NSMutableArray *args = [[NSMutableArray alloc] initWithObjects:[NSValue valueWithBytes:&cPeerObjGlobal objCType:@encode(jobject)], nil];
 141 
 142     [ThreadUtilities performOnMainThread:@selector(_create_OnAppKitThread:) onObject:[CMenu alloc] withObject:args waitUntilDone:YES awtMode:YES];
 143 
 144     aCMenu = (CMenu *)[args objectAtIndex: 0];
 145 
 146     if (aCMenu == nil) {
 147         return 0L;
 148     }
 149 
 150     return aCMenu;
 151 
 152 }
 153 
 154 /*
 155  * Class:     sun_lwawt_macosx_CMenu
 156  * Method:    nativeCreateSubMenu
 157  * Signature: (J)J
 158  */
 159 JNIEXPORT jlong JNICALL
 160 Java_sun_lwawt_macosx_CMenu_nativeCreateSubMenu
 161 (JNIEnv *env, jobject peer, jlong parentMenu)
 162 {




  38 - (id)initWithPeer:(jobject)peer {
  39 AWT_ASSERT_APPKIT_THREAD;
  40     // Create the new NSMenu
  41     self = [super initWithPeer:peer asSeparator:[NSNumber numberWithBool:NO]];
  42     if (self) {
  43         fMenu = [NSMenu javaMenuWithTitle:@""];
  44         [fMenu retain];
  45         [fMenu setAutoenablesItems:NO];
  46     }
  47     return self;
  48 }
  49 
  50 - (void)dealloc {
  51     [fMenu release];
  52     fMenu = nil;
  53     [super dealloc];
  54 }
  55 //- (void)finalize { [super finalize]; }
  56 
  57 - (void)addJavaSubmenu:(CMenu *)submenu {
  58     [ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) on:self withObject:submenu waitUntilDone:YES];
  59 }
  60 
  61 - (void)addJavaMenuItem:(CMenuItem *)theMenuItem {
  62     [ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) on:self withObject:theMenuItem waitUntilDone:YES];
  63 }
  64 
  65 - (void)addNativeItem_OnAppKitThread:(CMenuItem *)itemModified {
  66 AWT_ASSERT_APPKIT_THREAD;
  67     [itemModified addNSMenuItemToMenu:[self menu]];
  68 }
  69 
  70 - (void)setJavaMenuTitle:(NSString *)title {
  71 
  72     if (title) {
  73         [ThreadUtilities performOnMainThread:@selector(setNativeMenuTitle_OnAppKitThread:) on:self withObject:title waitUntilDone:YES];
  74     }
  75 }
  76 
  77 - (void)setNativeMenuTitle_OnAppKitThread:(NSString *)title {
  78 AWT_ASSERT_APPKIT_THREAD;
  79 
  80     [fMenu setTitle:title];
  81     // If we are a submenu we need to set our name in the parent menu's menu item.
  82     NSMenu *parent = [fMenu supermenu];
  83     if (parent) {
  84         NSInteger index = [parent indexOfItemWithSubmenu:fMenu];
  85         NSMenuItem *menuItem = [parent itemAtIndex:index];
  86         [menuItem setTitle:title];
  87     }
  88 }
  89 
  90 - (void)addSeparator {
  91     // Nothing calls this, which is good because we need a CMenuItem here.
  92 }
  93 
  94 - (void)deleteJavaItem:(jint)index {
  95 
  96     [ThreadUtilities performOnMainThread:@selector(deleteNativeJavaItem_OnAppKitThread:) on:self withObject:[NSNumber numberWithInt:index] waitUntilDone:YES];
  97 }
  98 
  99 - (void)deleteNativeJavaItem_OnAppKitThread:(NSNumber *)number {
 100 AWT_ASSERT_APPKIT_THREAD;
 101 
 102     int n = [number intValue];
 103     if (n < [[self menu] numberOfItems]) {
 104         [[self menu] removeItemAtIndex:n];
 105     }
 106 }
 107 
 108 - (void)addNSMenuItemToMenu:(NSMenu *)inMenu {
 109     if (fMenuItem == nil) return;
 110     [fMenuItem setSubmenu:fMenu];
 111     [inMenu addItem:fMenuItem];
 112 }
 113 
 114 - (NSMenu *)menu {
 115     return [[fMenu retain] autorelease];
 116 }


 122         fIsEnabled = [boolNumber boolValue];
 123 
 124         NSMenu* supermenu = [fMenu supermenu];
 125         [[supermenu itemAtIndex:[supermenu indexOfItemWithSubmenu:fMenu]] setEnabled:fIsEnabled];
 126     }
 127 }
 128 
 129 - (NSString *)description {
 130     return [NSString stringWithFormat:@"CMenu[ %@ ]", fMenu];
 131 }
 132 
 133 @end
 134 
 135 CMenu * createCMenu (jobject cPeerObjGlobal) {
 136 
 137     CMenu *aCMenu = nil;
 138 
 139     // We use an array here only to be able to get a return value
 140     NSMutableArray *args = [[NSMutableArray alloc] initWithObjects:[NSValue valueWithBytes:&cPeerObjGlobal objCType:@encode(jobject)], nil];
 141 
 142     [ThreadUtilities performOnMainThread:@selector(_create_OnAppKitThread:) on:[CMenu alloc] withObject:args waitUntilDone:YES];
 143 
 144     aCMenu = (CMenu *)[args objectAtIndex: 0];
 145 
 146     if (aCMenu == nil) {
 147         return 0L;
 148     }
 149 
 150     return aCMenu;
 151 
 152 }
 153 
 154 /*
 155  * Class:     sun_lwawt_macosx_CMenu
 156  * Method:    nativeCreateSubMenu
 157  * Signature: (J)J
 158  */
 159 JNIEXPORT jlong JNICALL
 160 Java_sun_lwawt_macosx_CMenu_nativeCreateSubMenu
 161 (JNIEnv *env, jobject peer, jlong parentMenu)
 162 {