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 AWT_ASSERT_NOT_APPKIT_THREAD; 59 [ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) onObject:self withObject:submenu waitUntilDone:YES awtMode:YES]; 60 } 61 62 - (void)addJavaMenuItem:(CMenuItem *)theMenuItem { 63 AWT_ASSERT_NOT_APPKIT_THREAD; 64 [ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) onObject:self withObject:theMenuItem waitUntilDone:YES awtMode:YES]; 65 } 66 67 - (void)addNativeItem_OnAppKitThread:(CMenuItem *)itemModified { 68 AWT_ASSERT_APPKIT_THREAD; 69 [itemModified addNSMenuItemToMenu:[self menu]]; 70 } 71 72 - (void)setJavaMenuTitle:(NSString *)title { 73 AWT_ASSERT_NOT_APPKIT_THREAD; 74 75 if (title) { 76 [ThreadUtilities performOnMainThread:@selector(setNativeMenuTitle_OnAppKitThread:) onObject:self withObject:title waitUntilDone:YES awtMode:YES]; 77 } 78 } 79 80 - (void)setNativeMenuTitle_OnAppKitThread:(NSString *)title { 81 AWT_ASSERT_APPKIT_THREAD; 82 83 [fMenu setTitle:title]; 84 // If we are a submenu we need to set our name in the parent menu's menu item. 85 NSMenu *parent = [fMenu supermenu]; 86 if (parent) { 87 NSInteger index = [parent indexOfItemWithSubmenu:fMenu]; 88 NSMenuItem *menuItem = [parent itemAtIndex:index]; 89 [menuItem setTitle:title]; 90 } 91 } 92 93 - (void)addSeparator { 94 // Nothing calls this, which is good because we need a CMenuItem here. 95 } 96 97 - (void)deleteJavaItem:(jint)index { 98 AWT_ASSERT_NOT_APPKIT_THREAD; 99 100 [ThreadUtilities performOnMainThread:@selector(deleteNativeJavaItem_OnAppKitThread:) onObject:self withObject:[NSNumber numberWithInt:index] waitUntilDone:YES awtMode:YES]; 101 } 102 103 - (void)deleteNativeJavaItem_OnAppKitThread:(NSNumber *)number { 104 AWT_ASSERT_APPKIT_THREAD; 105 106 int n = [number intValue]; 107 if (n < [[self menu] numberOfItems]) { 108 [[self menu] removeItemAtIndex:n]; 109 } 110 } 111 112 - (void)addNSMenuItemToMenu:(NSMenu *)inMenu { 113 if (fMenuItem == nil) return; 114 [fMenuItem setSubmenu:fMenu]; 115 [inMenu addItem:fMenuItem]; 116 } 117 118 - (NSMenu *)menu { | 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 { |