This is BBAppManager.m in view mode; [Download] [Up]
/* BBAppManager.m * * This is the basic controller of the App. It manages all big abstraction * tasks for the panels, documents and connections to the outside. * * For interface-info see the header file. The comments in this file mostly * cover only the real implementation details. * * Written by: Thomas Engel * Created: 23.10.1993 (Copyleft) * Last modified: 07.05.1994 */ #import "BBAppManager.h" #import "BBBeaker.h" #import "Info.subproj/BBInfo.h" #import "Preferences.subproj/BBPreferencesManager.h" #import "Preferences.subproj/BBDefaultApp.h" #import "AtomLibrary.subproj/BBAtomLibraryManager.h" #import "Inspector.subproj/BBMasterInspector.h" #import "Rotator.subproj/BBRotator.h" #import "ToolBoy.subproj/ToolBoy.h" #import "FileManager.subproj/BBFileFilterManager.h" #import <remote/NXProxy.h> @implementation BBAppManager - 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 beaker we need the have the Preferences, // FileFilterManager and AtomLibrary up and running. preferences = [BBPreferencesManager new]; atomLibrary = [BBAtomLibraryManager new]; fileManager = [BBFileFilterManager new]; return self; } - appDidInit:sender { // This is some kind of late init. These object are need for working but // not for reading the beaker or having a beaker initialized. id ourServer; inspector = [BBMasterInspector new]; rotator = [BBRotator new]; // Let's try to connect to the 3DDeviceServer. If we fail it should not // matter. This part will change....naming and prefs! deviceServer = [NXConnection connectToName:"localhost/3DDeviceServer"]; ourServer = [deviceServer connectionForProxy]; [ourServer runFromAppKit]; 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. // If the file is of any type and we can handle it...lets do it. id newBeaker; if( type ) { // If we really have a new beaker...let the world know about it. newBeaker = [[BBBeaker alloc] initFromFile:path]; if( newBeaker ) return YES; } return NO; } - (BOOL)appAcceptsAnotherFile:sender { // Inform the workspace that we can open multiple files. return YES; } - appDidBecomeActive:sender { // Well will give our rotator the chance to register at the 3DDeviceServer // if we want to use a 3D mouse. if( deviceServer ) [rotator check3DMouse:self]; return self; } - appWillTerminate:sender { if( deviceServer ) [rotator check3DMouse:nil]; return self; } - showInfo:sender { if( !info ) info = [BBInfo new]; [info makeKeyAndOrderFront:self]; return self; } - showPreferences:sender { if( preferences ) [preferences makeKeyAndOrderFront:self]; return self; } - preferences { return preferences; } - showLibrary:sender { // We will open the Library file from our MoleculeDatabases directory. // This should be configurable in the future via the preferences and the // file might be located in the ~/Library etc. char path[MAXPATHLEN+1]; [[NXBundle mainBundle] getPath:path forResource:"MoleculeDatabase/" "IntroBBMoleculeLibrary.rtfd" ofType:"rtfd"]; [libraryText openRTFDFrom:path]; [library makeKeyAndOrderFront:self]; return self; } - showAtomLibrary:sender { [atomLibrary makeKeyAndOrderFront:self]; return self; } - atomLibrary { return atomLibrary; } - showInspector:sender { [inspector makeKeyAndOrderFront:self]; return self; } - inspector { return inspector; } - showRotator:sender { [rotator makeKeyAndOrderFront:self]; return self; } - rotator { return rotator; } - showToolBoy:sender { if( !toolBoy ) toolBoy = [ToolBoy new]; [toolBoy makeKeyAndOrderFront:self]; return self; } - fileManager { return fileManager; } - deviceServer { return deviceServer; } - open:sender { id newBeaker; id openPanel; char fullName[MAXPATHLEN]; const char *const *files; const char *const fileType[6] = { "lookMol", "alchMol", "macMol", "mvt", "b&sMol", NULL}; openPanel = [[OpenPanel new] allowMultipleFiles:YES]; // Run the open panel, filtering for our type of documents // These types are provided by the fileFormatManager // We try to open every file the panel returns. if( [openPanel runModalForTypes:fileType] ) { files = [openPanel filenames]; for( files = [openPanel filenames]; files && *files; files++) { // Now the merge the fullFilename from the directory and the // current filename and try to init a beaker from this file. // Errors are handled by the fileFormatManager. sprintf( fullName, "%s/%s", [openPanel directory], *files ); newBeaker = [[BBBeaker alloc] initFromFile:fullName]; } } return self; } - new:sender { id newBeaker; newBeaker = [BBBeaker new]; return self; } - save:sender { return self; } - saveAs:sender { return self; } - saveTo:sender { return self; } - saveAll:sender { return self; } - revert:sender { return self; } - close:sender { return self; } - print:sender { return self; } @end /* * History: 07.05.94 Changed to BB.., added the deviceServer. * * 25.03.94 Added b&sMol and macMol formats. * * 03.01.94 A lot of document-handling-methods added. * * 28.12.93 Added some basic document (beaker) handling. * * 25.11.93 Well just change some object ids and included the * inspector. (still just prototyping) * * 23.10.93 Here is the startup for our nice BeakerBoy. * * * 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.