Annotation of Examples/AppKit/BreakApp/BreakApp.m, revision 1.1.1.1

1.1       root        1: /*
                      2:  * BreakApp.m, subclass of Application for BreakApp.
                      3:  * Author: Ali Ozer
                      4:  * Written for 1.0 July 89.
                      5:  * Modified for 2.0 Sept 90; separated the panels into their own .nib files.
                      6:  * Modified for 3.0 March 92
                      7:  *
                      8:  * This class manages the windows & such for the BreakApp application.
                      9:  *
                     10:  *  You may freely copy, distribute and reuse the code in this example.
                     11:  *  NeXT disclaims any warranty of any kind, expressed or implied,
                     12:  *  as to its fitness for any particular use.
                     13:  */
                     14: 
                     15: #import <appkit/appkit.h>
                     16: #import <libc.h>
                     17: 
                     18: #import "BreakApp.h"
                     19: #import "BreakView.h"
                     20: 
                     21: 
                     22: @implementation BreakApp
                     23: 
                     24: + new
                     25: {
                     26:     self = [super new];
                     27:     [self setDelegate:self];   // For appDidHide:
                     28:     return self;
                     29: }
                     30:    
                     31: // appDidInit is called as the first thing in the run loop of the 
                     32: // application. At this point, everything is created, but we haven't entered
                     33: // the event loop yet. appDidInit: initializes a few things and
                     34: // calls the gotoFirstLevel: method of the BreakView instance to get
                     35: // started on a new game.
                     36: 
                     37: - appDidInit:app 
                     38: {
                     39:     NXRect gameWindowFrame, controlWindowFrame;
                     40: 
                     41:     [gameWindow setDelegate:self];                     // For windowDidMiniaturize:
                     42:     [gameWindow setExcludedFromWindowsMenu:YES];       // We do this by hand (in IB)
                     43:     [controlWindow removeFromEventMask:NX_KEYDOWNMASK|NX_KEYUPMASK];
                     44: 
                     45:     // Put the control window right next to the game window (game window is
                     46:     // set to come up "right" automatically on different sized screens).
                     47:     [gameWindow getFrame:&gameWindowFrame];
                     48:     [controlWindow getFrame:&controlWindowFrame];
                     49:     NX_Y(&controlWindowFrame) = NX_MAXY(&gameWindowFrame) - NX_HEIGHT(&controlWindowFrame);
                     50:     NX_X(&controlWindowFrame) = NX_X(&gameWindowFrame) - NX_WIDTH(&controlWindowFrame) - 2.0;
                     51:     [controlWindow moveTo:NX_X(&controlWindowFrame) :NX_Y(&controlWindowFrame)];
                     52: 
                     53:     [game gotoFirstLevel:self];
                     54: 
                     55:     [controlWindow orderFront:self];
                     56:     [gameWindow makeKeyAndOrderFront:self];
                     57: 
                     58:     return self;
                     59: }
                     60: 
                     61: // appDidHide is called when the application is hidden. It doesn't
                     62: // make sense to run the game while the application is running, also,
                     63: // in case the boss walks by you want to be able to hit just Command-h and
                     64: // have the game hide and pause at the same time. This way the boss won't
                     65: // ask where "ping-ping" noises are coming from and you will not have lost
                     66: // a high-score game.
                     67: 
                     68: - appDidHide:app
                     69: {
                     70:    [game stop:self];
                     71:    return self;
                     72: }
                     73: 
                     74: // We do pretty much the same if the user miniaturizes the game window.
                     75: 
                     76: - windowDidMiniaturize:window
                     77: {
                     78:    if (window == gameWindow) [game stop:self];
                     79:    return self;
                     80: }
                     81: 
                     82: // printGame: allows us to print the game window. We could've just connected
                     83: // the "Print..." menu item to the window's smartPrintPSCode:; however, we
                     84: // wanted to be able to change the title to reflect the status.
                     85: 
                     86: - printGame:sender
                     87: {
                     88:     char *savedTitle = NXCopyStringBuffer([gameWindow title]);
                     89:     char statusString[100];
                     90: 
                     91:     sprintf (statusString, NXLocalString ("Score: %d  Level: %d", NULL, "Score and level to be shown when the game window is printed"), [game score], [game level]);
                     92:     [gameWindow setTitle:statusString];
                     93:     [gameWindow smartPrintPSCode:sender];
                     94:     [gameWindow setTitle:savedTitle];
                     95:     free (savedTitle);
                     96: 
                     97:     return self;
                     98: }
                     99: 
                    100: 
                    101: // Method to load the .nib file for the info panel.
                    102: 
                    103: - showInfo:sender
                    104: {
                    105:     if (!infoPanel) {
                    106:        [self loadNibSection:"Info.nib" owner:self withNames:NO];
                    107:     }
                    108:     [infoPanel makeKeyAndOrderFront:sender];
                    109:     return self;
                    110: }
                    111: 
                    112: 
                    113: @end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.