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