home *** CD-ROM | disk | FTP | other *** search
- #import <appkit/appkit.h>
- #import "Document.h"
- #import "TextController.h"
-
- # define FILE_EXTENSION "word"
-
- // this class is responsible for managing
- // the savepanel, openpanel and files opened
- // from the Workspace
- @implementation TextController
-
- // automatically sent after the .nib file
- // has finished loading
- - awakeFromNib
- {
- // create the savepanel and openpanel
- savePanel = [SavePanel new];
- 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];
- return self;
- }
-
- - (BOOL)appAcceptsAnotherFile:sender
- {
- // Double-clicking on a file in the WSM
- // causes the following actions:
- // * NeXTSTEP sends an openFile:ok
- // message to NXApp
- // * openFile:ok sends a appAcceptsAnotherFile:
- // message to check if it's OK to open
- // a file; by returning YES, the app
- // allows files to be opened from the WSM
- // * openFile:ok then sends a
- // app:openFile:type message to actually
- // open the file; the app:openFile:type
- // should return YES if successful and
- // NO if not
- // the printf statements illustrate the orders
- // these messages are being sent
- printf("in appAcceptsAnotherFile:\n");
- return YES;
- }
-
- // actually open the file here
- - (int)app:sender openFile:(const char*)filename
- type:(const char *)filetype
- {
- printf("In app:openFile:type:\n");
- return ([[Document alloc]
- initDocumentFromFile:filename]);
- }
-
- // 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[81];
-
- // 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];
- do
- {
- // get directory first
- directory = [openPanel directory];
- // 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;
- }
-
- // allow the document to be saved under
- // a different name
- - saveAs:sender
- {
- const char *wordType = FILE_EXTENSION;
- const char *fullPathName;
- id document = [[NXApp mainWindow] delegate];
- const char *filename = "";
-
- [savePanel setRequiredFileType:wordType];
- if ([savePanel runModal])
- {
- fullPathName = [savePanel filename];
- [document saveDocumentToFile:fullPathName];
- }
- return self;
- }
-
- // save the document in response to
- // the Save menu option
- - showSavePanel:sender
- {
- const char *wordType = FILE_EXTENSION;
- const char *fullPathName;
- id document = [[NXApp mainWindow] delegate];
- const char *filename = [document filename];
-
- // if document has not been saved
- // then present savepanel to get filename
- if (!filename)
- {
- [savePanel setRequiredFileType:wordType];
- if ([savePanel runModal])
- {
- fullPathName = [savePanel filename];
- [document saveDocumentToFile:fullPathName];
- }
- }
- // else just save the file
- else
- [document saveDocumentToFile:filename];
- return self;
- }
-
- // return the id of the savepanel
- - savePanel
- {
- return savePanel;
- }
-
- @end