[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23618] trunk/blender/intern/ghost/intern/ GHOST_SystemCocoa.mm: Cocoa port : added standard menu in OSX menu bar

Damien Plisson damien.plisson at yahoo.fr
Sat Oct 3 20:25:54 CEST 2009


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
  **/
- at interface CocoaAppDelegate : NSObject
+ at 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);





More information about the Bf-blender-cvs mailing list