This is MHAppManager.m in view mode; [Download] [Up]
/* --------------------------------------------------------------------------
Class: MHAppManager
Version: 0.1
File: MHAppManager.m
Written by: Thomas Engel
Created: 17.05.1995 (Copyleft)
Last modified: 17.05.1995
Note: For a detailed description please read the class documentation.
------------------------------------------------------------------------- */
#import "MHAppManager.h"
#import "MHDocConverter.h"
#import "MHInfo.h"
#import <misckit/MiscString.h>
@implementation MHAppManager
- appWillInit:sender
{
// This is the init part we need to pass before we get the messages that
// we have to open some files.
// To be able to init a class we need the have the Preferences,
// preferences = [CEPreferencesManager new];
// Now lets load the docu templates
return self;
}
- appDidInit:sender
{
// This is some kind of late init. These object are need for working but
// not for reading the classes or having a class initialized.
return self;
}
- (int)app:sender openFile:(const char *)path type:(const char *)type
{
// This method is performed whenever a user opens a document from the
// Workspace Manager.
// We use our default file open method with some default params.
return [self openFile:path];
}
- (BOOL)appAcceptsAnotherFile:sender
{
// Inform the workspace that we can open multiple files.
// At least we can open another one...but we will drop the current..
return YES;
}
- appDidBecomeActive:sender
{
return self;
}
- appWillTerminate:sender
{
return self;
}
- (BOOL)_closeAllWindows
{
return YES;
}
- (int)openFile:(const char *)path
{
// This method is performed whenever a user opens a document.
// It takes care that every file is only opened once.
id aString;
id filetype;
id newConverter;
// check if it is of an accepted type:
aString = [MiscString newWithString:path];
filetype = [aString fileExtension];
newConverter = nil;
if( [filetype cmp:"bit"] != 0 &&
[filetype cmp:"mp2"] != 0 &&
[filetype cmp:"mp3"] != 0 &&
[filetype cmp:"wav"] != 0 &&
[filetype cmp:"aiff"] != 0 &&
[filetype cmp:"snd"] != 0 &&
[filetype cmp:"au"] != 0 )
{
// Looks like this is no valid file !
[aString free];
[filetype free];
return -1;
}
// If we really have a new editor...let the world know about it.
// This is all prepared for multiDocument once it is desired...I guess
// it might never happen but it has become some kind of standard template
// now.
if( ![self _alreadyLoaded:(char *)path] )
{
if( !sharedDocConverter )
{
newConverter = [[MHDocConverter alloc] initFromFile:path];
sharedDocConverter = newConverter;
}
else [sharedDocConverter setFilename:(char *)path];
if( newConverter ) return YES;
}
return NO;
}
- (BOOL)_alreadyLoaded:(char *)aFile
{
id aString;
id windowList;
id aDelegate;
int i;
BOOL loaded;
// First we have to check if we already know this file !
// Some window delegate should have the same filename
// Using the window list might not be the safest way..but I guess it
// will work.
aString = [MiscString newWithString:aFile];
windowList = [NXApp windowList];
loaded = NO;
for( i=0; i<[windowList count]; i++ )
{
aDelegate = [[windowList objectAt:i] delegate];
if( aDelegate != nil &&
[aDelegate isKindOf:[MHDocConverter class]])
{
if( [aString compareTo:
[(MHDocConverter *)aDelegate filename]] == 0 )
{
// Looks like we have found a delegate that belongs to exactly
// the same path.
// We must to ask this delegate now what window we should top.
[[aDelegate window] makeKeyAndOrderFront:self];
loaded = YES;
}
}
}
[aString free];
return loaded;
}
- showInfo:sender
{
if( !info ) info = [MHInfo new];
[info makeKeyAndOrderFront:self];
return self;
}
- showPreferences:sender
{
// if( preferences ) [preferences makeKeyAndOrderFront:self];
return self;
}
- preferences
{
return self;
}
- open:sender
{
id openPanel;
char fullName[MAXPATHLEN];
const char *const *files;
const char *const fileType[10] = { "bit",
"mp2",
"mp3",
"wav",
"aiff",
"snd",
"au",
NULL};
openPanel = [[OpenPanel new] allowMultipleFiles:NO];
// Run the open panel, filtering for our type of documents
// We try to open every file the panel returns.
if( [openPanel runModalForTypes:fileType] )
{
files = [openPanel filenames];
for( files = [openPanel filenames]; files && *files; files++)
{
// Now lets merge the fullFilename from the directory and the
// current filename and try to init a editor from this file.
// We use the default open method with some default params.
sprintf( fullName, "%s/%s",
[(OpenPanel *)openPanel directory], *files );
[self openFile:fullName];
}
}
return self;
}
@end
/*
* History: 13.01.95 Bla.
*
*
* Bugs: No bugs and birds seen....
*/These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.