You need to log in to create posts and topics.
Tutorial_6
1,678 Posts
#1 · September 8, 2011, 3:15 pm
Quote from Forum Archives on September 8, 2011, 3:15 pmPosted by: svanvoorst <svanvoorst@...>
This demo shows how to construct menus in obj-c. Both NSMenuItem and NSMenu are required; each 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 //interfaceEndCBeginCFunction@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 //implementationEndCBeginCCode{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 280id window = [[NSWindow alloc] initWithContentRect:NSMakeRect( 0, 0, _wndW, _wndH )styleMask:NSTitledWindowMask | NSClosableWindowMaskbacking:NSBackingStoreBuffereddefer: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]
Posted by: svanvoorst <svanvoorst@...>
This demo shows how to construct menus in obj-c. Both NSMenuItem and NSMenu are required; each 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]
Click for thumbs down.0Click for thumbs up.0