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 {
|