This is TextController.m in view mode; [Download] [Up]
#import <appkit/appkit.h> #import "Document.h" #import "TextController.h" // this class is responsible for managing // the savepanel and openpanel // it is also responsible for responding // to remote messages from the Workspace @implementation TextController // automatically sent after the .nib file // has finished loading - awakeFromNib { // using the new method first creates // the objects; since there is only one // openpanel and savepanel per application, // subsequent invocations return the // existing savepanel and openpanel, // as appropriate id savePanel = [SavePanel new]; id openPanel = [OpenPanel new]; // by default, an openpanel only allows // one file to be opened [openPanel allowMultipleFiles:YES]; return self; } // create a new document in response // to the New menu option - newDocument:sender { id document = [[Document alloc] init]; [document showDocument]; [[document window] setTitle:UNTITLED]; return self; } // open the document in response to // the Open menu option - showOpenPanel:sender { const char *file, *directory; const char *const *filenames; static const char *const wordTypes[] = {FILE_EXTENSION, NULL}; char fullPathName[MAXPATHLEN]; id openPanel = [OpenPanel new]; // ensure that the openpanel allows multiple // files to be selected [openPanel allowMultipleFiles:YES]; // display only files with "word" extension if ([openPanel runModalForTypes:wordTypes]) { // get list of filename(s) selected // the filenames method returns a // a pointer to all the strings filenames = [openPanel filenames]; // get directory first directory = [openPanel directory]; do { // get filename file = *(filenames++); // construct entire pathname strcpy(fullPathName, directory); // append directory to filename strcat(fullPathName, "/"); strcat(fullPathName, file); [[Document alloc] initDocumentFromFile:fullPathName]; } while (*(filenames) != NULL); } return self; } // save the document in response to // the Save menu option - showSavePanel:sender { const char *wordType = FILE_EXTENSION; const char *fullPathName, *title; id document = [[NXApp mainWindow] delegate]; id savePanel = [SavePanel new]; // make sure there is a document first if (document) { // if document has not been saved // then present savepanel to get filename title = [[document window] title]; if (strcmp(title, UNTITLED) == 0) { [savePanel setRequiredFileType:wordType]; if ([savePanel runModal]) { fullPathName = [savePanel filename]; return [document saveDocumentToFile: fullPathName]; } else return nil; } // else just save the file else return [document saveDocumentToFile:title]; } return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.