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