Catakig/Source/Cocoa/AppController.m

119 lines
3.1 KiB
Objective-C

/* class AppController
A dispatcher for many high-level application events. Only one instance
exists at runtime.
*/
#import "Catakig-Cocoa.h"
#import "AppController.h"
#import "ScreenView.h"
@implementation AppController
//---------------------------------------------------------------------------
+ (void)initialize
{
OSStatus sts;
// Need these retains??
G.bundle = [[NSBundle mainBundle] retain];
G.docMgr = [[NSDocumentController sharedDocumentController] retain];
G.fileMgr = [[NSFileManager defaultManager] retain];
G.helpMgr = [[NSHelpManager sharedHelpManager] retain];
// G.null = [[NSNull null] retain];
G.pboard = [[NSPasteboard generalPasteboard] retain];
G.workspace = [[NSWorkspace sharedWorkspace] retain];
SetMouseRange();
if (noErr != (sts = AU_Open(&G.audioUnit)))
{
FatalErrorAlert(@"Cannot initialize audio",
@"Error from AU_Open.");
}
if (NO) //!!
{
NSArray* arr;
arr = [G.fileMgr directoryContentsAtPath:@"/System/Library/Sounds"];
NSLog(@"Found sounds: %@", arr);
}
}
//---------------------------------------------------------------------------
#if 0
- (void)applicationDidFinishLaunching:(NSNotification*)note
{/*
"Sent by the default notification center after the application has been
launched and initialized but before it has received its first event."
*/
}
#endif
//---------------------------------------------------------------------------
- (NSApplicationTerminateReply)
applicationShouldTerminate:(NSApplication*)app
{
AU_Close(&G.audioUnit);
[ScreenView FullScreenOff];
return NSTerminateNow;
}
//---------------------------------------------------------------------------
- (BOOL)applicationShouldOpenUntitledFile:(NSApplication*)sender
{/*
Returns whether the application should automatically create a new
document after launching. (Default behavior is YES.)
*/
return NO;
}
//---------------------------------------------------------------------------
- (void)applicationDidChangeScreenParameters:(NSNotification*)note
{/*
Responds to changes in screen configuration: either resolutions, or
relative positions of multiple screens.
*/
SetMouseRange();
}
//---------------------------------------------------------------------------
- (IBAction)newDocument:(id)sender
{/*
Called when the user invokes the "New" menu command. (Normally the
global DocumentController gets this message first.)
*/
NSEnumerator* e = [[mNewA2Model cells] objectEnumerator];
NSColor* warnColor = [NSColor colorWithDeviceHue:0.
saturation:0.4 brightness:1. alpha:1.];
// Scan for Apple II ROMs.
[A2Computer ScanDirectoryForROM:nil];
for (NSButtonCell* cell; (cell = [e nextObject]);)
{
BOOL hasROM = [A2Computer ModelHasROM:[cell tag]];
[cell setBackgroundColor:(hasROM? nil : warnColor)];
}
// Run the "New Apple II" dialog.
if ([mNewA2Panel RunModal])
{
A2G.defaultModel = [mNewA2Model selectedTag];
A2G.defaultExtraRAM = [mNewA2ExtraRAM selectedTag];
[G.docMgr newDocument:sender];
// [G.docMgr openUntitledDocumentOfType ... ];
}
}
//---------------------------------------------------------------------------
@end