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 "ScreenMenu.h" 27 28 #import "com_apple_laf_ScreenMenu.h" 29 #import "java_awt_Event.h" 30 #import "java_awt_event_KeyEvent.h" 31 #import "java_awt_event_InputEvent.h" 32 #import "java_awt_event_MouseEvent.h" 33 34 #import <JavaNativeFoundation/JavaNativeFoundation.h> 35 #import <JavaRuntimeSupport/JavaRuntimeSupport.h> 36 37 #import "ThreadUtilities.h" 38 #import "CMenuBar.h" 39 40 41 static JNF_CLASS_CACHE(sjc_ScreenMenu, "com/apple/laf/ScreenMenu"); 42 43 static jint ns2awtModifiers(NSUInteger keyMods) { 44 jint result = 0; 45 if (keyMods & NSShiftKeyMask) result |= java_awt_Event_SHIFT_MASK; 46 if (keyMods & NSControlKeyMask) result |= java_awt_Event_CTRL_MASK; 47 if (keyMods & NSAlternateKeyMask) result |= java_awt_Event_ALT_MASK; 48 if (keyMods & NSCommandKeyMask) result |= java_awt_Event_META_MASK; 49 return result; 50 } 51 52 static jint ns2awtMouseButton(NSInteger mouseButton) { 53 switch (mouseButton) { 54 case 1: return java_awt_event_InputEvent_BUTTON1_MASK; 55 case 2: return java_awt_event_InputEvent_BUTTON2_MASK; 56 case 3: return java_awt_event_InputEvent_BUTTON3_MASK; 57 } 58 return 0; 59 } 80 @synthesize javaObjectWrapper; 81 82 - (id)initFromMenu:(NSMenu *)aMenu javaObj:(JNFJObjectWrapper *)obj 83 { 84 self = [super init]; 85 if (self) { 86 self.nsmenu = aMenu; 87 self.javaObjectWrapper = obj; 88 } 89 return self; 90 } 91 92 - (NSMenu *)menu { 93 return self.nsmenu; 94 } 95 96 - (void)menuWillOpen:(NSMenu *)menu 97 { 98 if (self.javaObjectWrapper == nil) { 99 #ifdef DEBUG 100 NSLog(@"_javaObject is NULL: (%s - %s : %d)", __FILE__, __FUNCTION__, __LINE__); 101 #endif 102 return; 103 } 104 105 JNIEnv *env = [ThreadUtilities getJNIEnv]; 106 JNF_COCOA_ENTER(env); 107 //NSLog(@"menuWillOpen %@", [menu title]); 108 static JNF_MEMBER_CACHE(jm_ScreenMenu_invokeOpenLater, sjc_ScreenMenu, "invokeOpenLater", "()V"); 109 JNFCallVoidMethod(env, [self.javaObjectWrapper jObject], jm_ScreenMenu_invokeOpenLater); // AWT_THREADING Safe (AWTRunLoopMode) 110 JNF_COCOA_EXIT(env); 111 112 } 113 114 - (void)menuDidClose:(NSMenu *)menu 115 { 116 if (self.javaObjectWrapper == nil) { 117 #ifdef DEBUG 118 NSLog(@"_javaObject is NULL: (%s - %s : %d)", __FILE__, __FUNCTION__, __LINE__); 119 #endif 120 return; 121 } 122 123 JNIEnv *env = [ThreadUtilities getJNIEnv]; 124 JNF_COCOA_ENTER(env); 125 //NSLog(@"menuDidClose %@", [menu title]); 126 static JNF_MEMBER_CACHE(jm_ScreenMenu_invokeMenuClosing, sjc_ScreenMenu, "invokeMenuClosing", "()V"); 127 JNFCallVoidMethod(env, [self.javaObjectWrapper jObject], jm_ScreenMenu_invokeMenuClosing); // AWT_THREADING Safe (AWTRunLoopMode) 128 JNF_COCOA_EXIT(env); 129 } 130 131 132 - (void)handleJavaMenuItemTargetedAtIndex:(NSUInteger)menuIndex rect:(NSRect)rect 133 { 134 if (self.javaObjectWrapper == nil) { 135 #ifdef DEBUG 136 NSLog(@"_javaObject is NULL: (%s - %s : %d)", __FILE__, __FUNCTION__, __LINE__); 137 #endif 138 return; 139 } 140 141 JNIEnv *env = [ThreadUtilities getJNIEnv]; 142 JNF_COCOA_ENTER(env); 143 // Send that to Java so we can test which item was hit. 144 static JNF_MEMBER_CACHE(jm_ScreenMenu_updateSelectedItem, sjc_ScreenMenu, "handleItemTargeted", "(IIIII)V"); 145 JNFCallVoidMethod(env, [self.javaObjectWrapper jObject], jm_ScreenMenu_updateSelectedItem, menuIndex, 146 NSMinY(rect), NSMinX(rect), NSMaxY(rect), NSMaxX(rect)); // AWT_THREADING Safe (AWTRunLoopMode) 147 148 JNF_COCOA_EXIT(env); 149 } 150 151 152 // Called from event handler callback 153 - (void)handleJavaMouseEvent:(NSEvent *)event 154 { 155 NSInteger kind = [event type]; 156 jint javaKind = 0; | 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 "ScreenMenu.h" 27 28 #import "com_apple_laf_ScreenMenu.h" 29 #import "java_awt_Event.h" 30 #import "java_awt_event_KeyEvent.h" 31 #import "java_awt_event_InputEvent.h" 32 #import "java_awt_event_MouseEvent.h" 33 34 #import <JavaNativeFoundation/JavaNativeFoundation.h> 35 #import <JavaRuntimeSupport/JavaRuntimeSupport.h> 36 37 #import "ThreadUtilities.h" 38 #import "CMenuBar.h" 39 40 /* Use THIS_FILE when it is available. */ 41 #ifndef THIS_FILE 42 #define THIS_FILE __FILE__ 43 #endif 44 45 static JNF_CLASS_CACHE(sjc_ScreenMenu, "com/apple/laf/ScreenMenu"); 46 47 static jint ns2awtModifiers(NSUInteger keyMods) { 48 jint result = 0; 49 if (keyMods & NSShiftKeyMask) result |= java_awt_Event_SHIFT_MASK; 50 if (keyMods & NSControlKeyMask) result |= java_awt_Event_CTRL_MASK; 51 if (keyMods & NSAlternateKeyMask) result |= java_awt_Event_ALT_MASK; 52 if (keyMods & NSCommandKeyMask) result |= java_awt_Event_META_MASK; 53 return result; 54 } 55 56 static jint ns2awtMouseButton(NSInteger mouseButton) { 57 switch (mouseButton) { 58 case 1: return java_awt_event_InputEvent_BUTTON1_MASK; 59 case 2: return java_awt_event_InputEvent_BUTTON2_MASK; 60 case 3: return java_awt_event_InputEvent_BUTTON3_MASK; 61 } 62 return 0; 63 } 84 @synthesize javaObjectWrapper; 85 86 - (id)initFromMenu:(NSMenu *)aMenu javaObj:(JNFJObjectWrapper *)obj 87 { 88 self = [super init]; 89 if (self) { 90 self.nsmenu = aMenu; 91 self.javaObjectWrapper = obj; 92 } 93 return self; 94 } 95 96 - (NSMenu *)menu { 97 return self.nsmenu; 98 } 99 100 - (void)menuWillOpen:(NSMenu *)menu 101 { 102 if (self.javaObjectWrapper == nil) { 103 #ifdef DEBUG 104 NSLog(@"_javaObject is NULL: (%s - %s : %d)", THIS_FILE, __FUNCTION__, __LINE__); 105 #endif 106 return; 107 } 108 109 JNIEnv *env = [ThreadUtilities getJNIEnv]; 110 JNF_COCOA_ENTER(env); 111 //NSLog(@"menuWillOpen %@", [menu title]); 112 static JNF_MEMBER_CACHE(jm_ScreenMenu_invokeOpenLater, sjc_ScreenMenu, "invokeOpenLater", "()V"); 113 JNFCallVoidMethod(env, [self.javaObjectWrapper jObject], jm_ScreenMenu_invokeOpenLater); // AWT_THREADING Safe (AWTRunLoopMode) 114 JNF_COCOA_EXIT(env); 115 116 } 117 118 - (void)menuDidClose:(NSMenu *)menu 119 { 120 if (self.javaObjectWrapper == nil) { 121 #ifdef DEBUG 122 NSLog(@"_javaObject is NULL: (%s - %s : %d)", THIS_FILE, __FUNCTION__, __LINE__); 123 #endif 124 return; 125 } 126 127 JNIEnv *env = [ThreadUtilities getJNIEnv]; 128 JNF_COCOA_ENTER(env); 129 //NSLog(@"menuDidClose %@", [menu title]); 130 static JNF_MEMBER_CACHE(jm_ScreenMenu_invokeMenuClosing, sjc_ScreenMenu, "invokeMenuClosing", "()V"); 131 JNFCallVoidMethod(env, [self.javaObjectWrapper jObject], jm_ScreenMenu_invokeMenuClosing); // AWT_THREADING Safe (AWTRunLoopMode) 132 JNF_COCOA_EXIT(env); 133 } 134 135 136 - (void)handleJavaMenuItemTargetedAtIndex:(NSUInteger)menuIndex rect:(NSRect)rect 137 { 138 if (self.javaObjectWrapper == nil) { 139 #ifdef DEBUG 140 NSLog(@"_javaObject is NULL: (%s - %s : %d)", THIS_FILE, __FUNCTION__, __LINE__); 141 #endif 142 return; 143 } 144 145 JNIEnv *env = [ThreadUtilities getJNIEnv]; 146 JNF_COCOA_ENTER(env); 147 // Send that to Java so we can test which item was hit. 148 static JNF_MEMBER_CACHE(jm_ScreenMenu_updateSelectedItem, sjc_ScreenMenu, "handleItemTargeted", "(IIIII)V"); 149 JNFCallVoidMethod(env, [self.javaObjectWrapper jObject], jm_ScreenMenu_updateSelectedItem, menuIndex, 150 NSMinY(rect), NSMinX(rect), NSMaxY(rect), NSMaxX(rect)); // AWT_THREADING Safe (AWTRunLoopMode) 151 152 JNF_COCOA_EXIT(env); 153 } 154 155 156 // Called from event handler callback 157 - (void)handleJavaMouseEvent:(NSEvent *)event 158 { 159 NSInteger kind = [event type]; 160 jint javaKind = 0; |