So, we add a new menu item to our menu, invoking the printHello: action (which we'll implement in our custom object):
[menu addItemWithTitle: @"Print Hello" action: @selector (printHello:) keyEquivalent: @"h"];Since our custom object is the application's delegate, we don't need to set explicitly the target: the library can determine it at run-time. In other cases it could be necessary to set a different target, as in:
NSMenuItem *menuItem; id myObject; // <missing code: create myObject etc> menuItem = [menu addItemWithTitle: @"Print Hello" action: @selector (printHello:) keyEquivalent: @"h"]; [menuItem setTarget: myObject];
But in this case, we don't need to set the target explicitly, and the code is simply:
#include <Foundation/Foundation.h> #include <AppKit/AppKit.h> @interface MyDelegate : NSObject - (void) printHello: (id)sender; - (void) applicationWillFinishLaunching: (NSNotification *)not; @end @implementation MyDelegate : NSObject - (void) printHello: (id)sender { printf ("Hello!\n"); } - (void) applicationWillFinishLaunching: (NSNotification *)not { NSMenu *menu; menu = AUTORELEASE ([NSMenu new]); [menu addItemWithTitle: @"Print Hello" action: @selector (printHello:) keyEquivalent: @""]; [menu addItemWithTitle: @"Quit" action: @selector (terminate:) keyEquivalent: @"q"]; [NSApp setMainMenu: menu]; } @end int main (int argc, const char **argv) { [NSApplication sharedApplication]; [NSApp setDelegate: [MyDelegate new]]; return NSApplicationMain (argc, argv); }The GNUmakefile is the same. I hope you appreciate how easy and simple is coding in GNUstep; I encourage you to try it out and enjoy all the fun you of selecting the Print Hello menu item and see the program print out Hello!.