Revision: 23618
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23618
Author:   damien78
Date:     2009-10-03 20:25:54 +0200 (Sat, 03 Oct 2009)

Log Message:
-----------
Cocoa port : added standard menu in OSX menu bar

Modified Paths:
--------------
    trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm

Modified: trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm      2009-10-03 
16:21:47 UTC (rev 23617)
+++ trunk/blender/intern/ghost/intern/GHOST_SystemCocoa.mm      2009-10-03 
18:25:54 UTC (rev 23618)
@@ -409,17 +409,30 @@
  * CocoaAppDelegate
  * ObjC object to capture applicationShouldTerminate, and send quit event
  **/
-...@interface CocoaAppDelegate : NSObject
+...@interface CocoaAppDelegate : NSObject {
+       GHOST_SystemCocoa *systemCocoa;
+}
+-(void)setSystemCocoa:(GHOST_SystemCocoa *)sysCocoa;
 - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication 
*)sender;
 @end
 
 @implementation CocoaAppDelegate : NSObject
+-(void)setSystemCocoa:(GHOST_SystemCocoa *)sysCocoa
+{
+       systemCocoa = sysCocoa;
+}
+
 - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication 
*)sender
 {
        //Note that Cmd+Q is already handled by keyhandler
-    //FIXME: Cocoa_SendQuit();
-       //sys->pushEvent( new GHOST_Event(sys->getMilliSeconds(), 
GHOST_kEventQuit, NULL) );
-    return NSTerminateCancel;
+    //FIXME: Need an event "QuitRequest"
+       int shouldQuit = NSRunAlertPanel(@"Exit Blender", @"Some changes may 
not have been saved. Do you really want to quit ?",
+                                                                        @"No", 
@"Yes", nil);
+       
+       if (shouldQuit == NSAlertAlternateReturn)
+               systemCocoa->pushEvent( new 
GHOST_Event(systemCocoa->getMilliSeconds(), GHOST_kEventQuit, NULL) );
+    
+       return NSTerminateCancel;
 }
 @end
 
@@ -476,12 +489,57 @@
                        [NSApplication sharedApplication];
                        
                        if ([NSApp mainMenu] == nil) {
-                               //FIXME: CreateApplicationMenus();
+                               NSMenu *mainMenubar = [[NSMenu alloc] init];
+                               NSMenuItem *menuItem;
+                               
+                               //Create the application menu
+                               NSMenu *appMenu = [[NSMenu alloc] 
initWithTitle:@"Blender"];
+                               
+                               [appMenu addItemWithTitle:@"About Blender" 
action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
+                               [appMenu addItem:[NSMenuItem separatorItem]];
+                               
+                               menuItem = [appMenu addItemWithTitle:@"Hide 
Blender" action:@selector(hide:) keyEquivalent:@"h"];
+                               [menuItem 
setKeyEquivalentModifierMask:NSCommandKeyMask];
+                                
+                               menuItem = [appMenu addItemWithTitle:@"Hide 
others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
+                               [menuItem 
setKeyEquivalentModifierMask:(NSAlternateKeyMask | NSCommandKeyMask)];
+                               
+                               [appMenu addItemWithTitle:@"Show All" 
action:@selector(unhideAllApplications:) keyEquivalent:@""];
+                               
+                               menuItem = [appMenu addItemWithTitle:@"Quit 
Blender" action:@selector(terminate:) keyEquivalent:@"q"];
+                               [menuItem 
setKeyEquivalentModifierMask:NSCommandKeyMask];
+                               
+                               menuItem = [[NSMenuItem alloc] init];
+                               [menuItem setSubmenu:appMenu];
+                               
+                               [mainMenubar addItem:menuItem];
+                               [menuItem release];
+                               [appMenu release];
+                               
+                               //Create the window menu
+                               NSMenu *windowMenu = [[NSMenu alloc] 
initWithTitle:@"Window"];
+                               
+                               menuItem = [windowMenu 
addItemWithTitle:@"Minimize" action:@selector(performMiniaturize:) 
keyEquivalent:@"m"];
+                               [menuItem 
setKeyEquivalentModifierMask:NSCommandKeyMask];
+                               
+                               [windowMenu addItemWithTitle:@"Zoom" 
action:@selector(performZoom:) keyEquivalent:@""];
+                               
+                               menuItem = [[NSMenuItem alloc] init];
+                               [menuItem setSubmenu:windowMenu];
+                               
+                               [mainMenubar addItem:menuItem];
+                               [menuItem release];
+                               
+                               [NSApp setMainMenu:mainMenubar];
+                               [NSApp setWindowsMenu:windowMenu];
+                               [windowMenu release];
                        }
                        [NSApp finishLaunching];
                }
                if ([NSApp delegate] == nil) {
-                       [NSApp setDelegate:[[CocoaAppDelegate alloc] init]];
+                       CocoaAppDelegate *appDelegate = [[CocoaAppDelegate 
alloc] init];
+                       [appDelegate setSystemCocoa:this];
+                       [NSApp setDelegate:appDelegate];
                }
                
                
@@ -982,6 +1040,9 @@
                                                         [[event 
charactersIgnoringModifiers] characterAtIndex:0]);
                        ascii= convertRomanToLatin((char)[[event characters] 
characterAtIndex:0]);
                        
+                       if ((keyCode == GHOST_kKeyQ) && (m_modifierMask & 
NSCommandKeyMask))
+                               break; //Cmd-Q is directly handled by Cocoa
+                       
                        if ([event type] == NSKeyDown) {
                                pushEvent( new GHOST_EventKey([event 
timestamp], GHOST_kEventKeyDown, window, keyCode, ascii) );
                                //printf("\nKey pressed keyCode=%u ascii=%i 
%c",keyCode,ascii,ascii);


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to