File: programming/cocoa/MacScare-Source.zip/MacScare-Source/GlkAppDelegate.m


//
//  GlkAppDelegate.m
//  CocoaGlk
//
//  Created by Andrew Hunter on Thu Jun 12 2003.
//  Copyright (c) 2003 Andrew Hunter. All rights reserved.
//
 
#import "GlkAppDelegate.h"
#import "GlkSession.h"
#import "MacScareGlkSession.h"
#import "NSBundle+Types.h"
 
 
@implementation GlkAppDelegate
 
// -----------------------------------------------------------------------------
//	applicationOpenUntitledFile:
//		If the app is launched directly, we bring up an "open file" panel so
//		the user can select a game to play. This calls application:openFile:
//		to do the actual opening.
//
//	REVISIONS:
//		2004-03-13	witness	Created.
// -----------------------------------------------------------------------------
 
-(BOOL) applicationOpenUntitledFile: (NSApplication*)sender
{
	static BOOL			sAppOpenFileBusy = NO;
	BOOL				result = NO;
	
	if( !sAppOpenFileBusy )
	{
		sAppOpenFileBusy = YES; // Make sure this doesn't stack "open" dialogs.
			NSOpenPanel*		opp = [NSOpenPanel openPanel];
			
			if( [opp runModalForTypes: [[NSBundle mainBundle] types]] == NSOKButton )
				result = [self application: NSApp openFile: [opp filename]];
		sAppOpenFileBusy = NO;
	}
	
	return result;
}
 
 
// -----------------------------------------------------------------------------
//	application:openFile:
//		Called when a user double-clicks a file associated with this app in the
//		Finder. This is the main bottleneck we use for opening files. This
//		fetches the name of our session class from the info.plist's
//		GlkSessionClass key and then creates a new instance for that.
//
//	REVISIONS:
//		2004-03-13	witness	Created.
// -----------------------------------------------------------------------------
 
-(BOOL) application: (NSApplication*)sender openFile: (NSString*)filename
{
	NSString*			sessionClassName = [[[NSBundle mainBundle] infoDictionary] objectForKey: @"GlkSessionClass"];
    Class				sessionClass = NSClassFromString( sessionClassName );
	if( sessionClass == Nil )
		sessionClass = [GlkSession class];
	
	GlkSession* testSess = [[sessionClass allocWithZone: [self zone]] init];
    [testSess queueTheMusic: filename];
	
	return YES;
}
 
 
// -----------------------------------------------------------------------------
//	applicationShouldTerminateAfterLastWindowClosed:
//		When the user closes our game window, or quits the game by typing in
//		the "quit" command, we want the app to quit as well.
//
//	REVISIONS:
//		2004-03-13	witness	Created.
// -----------------------------------------------------------------------------
 
-(BOOL) applicationShouldTerminateAfterLastWindowClosed: (NSApplication*)sender
{
	return YES;
}
 
@end

This code uses the PclZip Zip File reading code, which is subject to the GNU LGPL. It also uses the GeSHi syntax highlighter, subject to the GPL. Ask if you want this for your own web site, it's free.