Forum Navigation
Forum breadcrumbs - You are here:WeLoveGod RallysPublic Forums: fbcocoaTutorial_6
You need to log in to create posts and topics.

Tutorial_6

Posted by: svanvoorst <svanvoorst@...>

This demo shows how to construct menus in obj-c.  Both NSMenuItem and NSMenu are requiredeach menuItem has its own method, monitored by a controller.  Also note a custom method which displays an alert for each selection (except the hierarchical submenu).
'------- start --------

/////////////////////////////////////////
// FBtoC Preferences Settings:               //
//   Requires 10.6 Base SDK                   //
//  "Compile As Objective-C" checked    //
//     or Un-REM first line below             //
/////////////////////////////////////////
//compile as "Objective-C"
BeginCDeclaration
@interface AppController : NSObject
{
}
- (void) doAlert: (int) menuNum item: (int)itemNum;
- (void) menu2Item1:(id)sender;
- (void) menu2Item2:(id)sender;
- (void) menu3Item1Submenu1:(id)sender;
- (void) menu3Item2:(id)sender;
@end //interface
EndC
BeginCFunction
@implementation AppController
- (void) doAlert: (int) menuNum item: (int) itemNum
{
   NSAlert *alert = [[NSAlert alloc]init];
   [alert setAlertStyle: NSInformationalAlertStyle];
   NSString *str = [[NSString alloc]initWithFormat:@"You chose menu %d, item %d.", menuNum,itemNum];
   [alert setInformativeText:str];
   [str release];
   [alert runModal];
   [alert release];  
}
- (void) menu2Item1:(id)sender
{
  [self doAlert:2 item:1]; 
}
- (void) menu2Item2:(id)sender
{
  [self doAlert:2 item:2]; 
}
- (void) menu3Item1Submenu1:(id)sender
{
 NSAlert *alert = [[NSAlert alloc]init];
 [alert setAlertStyle: NSInformationalAlertStyle];
 [alert setInformativeText:@"You chose menu 3, item 1, subMenu 1."];
 [alert runModal];
 [alert release]; 
}
- (void) menu3Item2:(id)sender
{
  [self doAlert:3 item:2]; 
}
@end //implementation
EndC
BeginCCode
{
 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
 [NSApplication sharedApplication];
 [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
// --- Create an instance of the controller class --- //
id myController = [[AppController alloc]init];
// ******** Menubar and AppMenu ********//
  id menubar = [[NSMenu new] autorelease];
  id appMenuItem = [[NSMenuItem new] autorelease];
  [menubar addItem:appMenuItem];
  [NSApp setMainMenu:menubar];
  id appMenu = [[NSMenu new] autorelease];
  id quitMenuItem = [[[NSMenuItem alloc] initWithTitle:@"Quit"
        action:@selector(terminate:) keyEquivalent:@"q"] autorelease];
  [appMenu addItem:quitMenuItem];
  [appMenuItem setSubmenu:appMenu];
// ******** Menu 2 ******* //
NSMenuItem *myNewMenu2 = [[[NSMenuItem alloc] init] autorelease];
[menubar addItem:myNewMenu2];
NSMenu *menu2 = [[[NSMenu alloc] initWithTitle:@"Menu 2"] autorelease];
[myNewMenu2 setSubmenu:menu2];
// ******** Menu 2 Item1 ******* //
 id menu2Item1 = [[[NSMenuItem alloc]initWithTitle:@"Item One..."
        action:@selector(menu2Item1:) keyEquivalent:@"o"] autorelease];
 [menu2 addItem:menu2Item1];
 [menu2Item1 setTarget:myController];
// ******** Menu 2 Item2 ******* //
 id menu2Item2 = [[[NSMenuItem alloc]initWithTitle:@"Item Two..."
        action:@selector(menu2Item2:) keyEquivalent:@"t"] autorelease];
 [menu2 addItem:menu2Item2];
 [menu2Item2 setTarget:myController];
// ******** Menu 3 ******** //
NSMenuItem *myNewMenu3 = [[[NSMenuItem alloc] init] autorelease];
[menubar addItem:myNewMenu3];
NSMenu *menu3 = [[[NSMenu alloc] initWithTitle:@"Menu 3"] autorelease];
[myNewMenu3 setSubmenu:menu3];
// ******** Menu 3 Item1 ******* //
 id menu3Item1 = [[[NSMenuItem alloc]initWithTitle:@"Item One"
        action:nil keyEquivalent:@""] autorelease];
 [menu3 addItem:menu3Item1];
// ******* Menu 3 Item1 Submenu1 ********* //
 NSMenuItem *myNewSubmenu1 = [[[NSMenuItem alloc] initWithTitle:@"Submenu 1..." 
    action:@selector(menu3Item1Submenu1:) keyEquivalent:@"9"] autorelease];
 NSMenu *subMenu1 = [[[NSMenu alloc] init] autorelease];
 [menu3Item1 setSubmenu:subMenu1];
 [subMenu1 addItem:myNewSubmenu1];
 [myNewSubmenu1 setTarget:myController];
// ******** Menu 3 Item2 ******* //
 id menu3Item2 = [[[NSMenuItem alloc]initWithTitle:@"Item Two..."
        action:@selector(menu3Item2:) keyEquivalent:@"t"] autorelease];
 [menu3 addItem:menu3Item2];
 [menu3Item2 setTarget:myController];
    
// ******** Window ******** //
  #define _wndW  400
  #define _wndH  280
  id window = [[NSWindow alloc] initWithContentRect:NSMakeRect( 0, 0, _wndW, _wndH )
        styleMask:NSTitledWindowMask | NSClosableWindowMask
           backing:NSBackingStoreBuffered
               defer:NO];
 [window center];
 [window setTitle:@"Menu Building_demo"];
 [window makeKeyAndOrderFront:nil];
// ***** Quit btn ***** //
 NSButton *quitBtn = [[NSButton alloc]initWithFrame:NSMakeRect( _wndW - 130, 30, 95, 30 )];
 [quitBtn setBezelStyle:NSRoundedBezelStyle ];
 [quitBtn setTitle: @"Quit" ];
 [quitBtn setAction:@selector(terminate:)];
 [[window contentView] addSubview: quitBtn];
 [quitBtn release];
[NSApp activateIgnoringOtherApps:YES];
[NSApp run];
[myController release];
[pool drain];
}
EndC

'------ end ----------- 
Steve Van Voorst


To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]