Next: About this document ... Up: 3 Adding a Button Previous: 3.3 Putting the button

3.4 Source Code

We are ready to show the whole source code (the GNUmakefile is the usual one):
#include <Foundation/Foundation.h>
#include <AppKit/AppKit.h>

@interface MyDelegate : NSObject
  NSWindow *myWindow;
- (void) printHello: (id)sender;
- (void) createMenu;
- (void) createWindow;
- (void) applicationWillFinishLaunching: (NSNotification *)not;
- (void) applicationDidFinishLaunching: (NSNotification *)not;

@implementation MyDelegate : NSObject 
- (void) dealloc
  RELEASE (myWindow);

- (void) printHello: (id)sender
  printf ("Hello!\n");

- (void) createMenu
  NSMenu *menu;

  menu = AUTORELEASE ([NSMenu new]);

  [menu addItemWithTitle: @"Quit"  
        action: @selector (terminate:)  
        keyEquivalent: @"q"];

  [NSApp setMainMenu: menu];

- (void) createWindow
  NSRect rect;
  unsigned int styleMask = NSTitledWindowMask 
                           | NSMiniaturizableWindowMask;
  NSButton *myButton;
  NSSize buttonSize;

  myButton = AUTORELEASE ([NSButton new]);
  [myButton setTitle: @"Print Hello!"];
  [myButton sizeToFit];
  [myButton setTarget: self];
  [myButton setAction: @selector (printHello:)];

  buttonSize = [myButton frame].size;
  rect = NSMakeRect (100, 100, 

  myWindow = [NSWindow alloc];
  myWindow = [myWindow initWithContentRect: rect
                       styleMask: styleMask
                       backing: NSBackingStoreBuffered
                       defer: NO];
  [myWindow setTitle: @"This is a test window"];
  [myWindow setContentView: myButton];

- (void) applicationWillFinishLaunching: (NSNotification *)not
  [self createMenu];
  [self createWindow];

- (void) applicationDidFinishLaunching: (NSNotification *)not;
  [myWindow makeKeyAndOrderFront: nil];

int main (int argc, const char **argv)
  [NSApplication sharedApplication];
  [NSApp setDelegate: [MyDelegate new]];

  return NSApplicationMain (argc, argv);