This is Controller.m in view mode; [Download] [Up]
/* NibList - A program to list the contents of nib files. Copyright (C) 1991 Oceania Healthcare Systems This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program, in a file called COPYING; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* This file (and some of NibFile.m) is a perfect example of ** cut-and-paste programming. It is a stripped down version of ** the file of the same name in /NextDeveloper/Examples/TextLab. ** Where would we be without those guys? ** Controller.m --- Main controller object for the TextLab program. ** Authors: Bruce Blumberg and Ali Ozer, NeXT Developer Support Group ** 8-14-90 Converted to 2.0 by Randy Nelson, NeXT Developer Training ** Changed internal strings to external using NXStringTable ** Removed outlet initializers ** Removed 0.9 reference to Font Manager ** 9-7-90 Changed new method to use init, externally stored info panel ** ** You may freely copy, distribute and reuse the code in this example. ** NeXT disclaims any warranty of any kind, expressed or implied, as to ** its fitness for any particular use. ** 3-25-91 Gutted and mangled for NibList application by Russell Selph ** at Oceania Healthcare Systems. ** Removed all save methods (but left hooks for later.) ** Made window creation zone conscious. ** Added gnu software license panel ** Changed treatment of openPanel, other details. ** */ // Controller object is the central object in NibList. It manages the // windows, open/save panels, and menu commands. #import "Controller.h" #import "NibFile.h" #import <appkit/Application.h> #import <objc/typedstream.h> #import <objc/NXStringTable.h> #import <appkit/FontManager.h> #import <zone.h> #import <mach.h> @implementation Controller - appDidInit:sender { // get instances of support objects openReq = [OpenPanel new]; saveReq = [SavePanel new]; return self; } - infoPanel:sender { if (infoPanel == nil) { [NXApp loadNibSection:"Info.nib" owner:self]; } [infoPanel orderFront:sender]; return self; } - gnuPanel:sender { if (gnuPanel == nil) { [NXApp loadNibSection:"Info.nib" owner:self]; } [gnuPanel orderFront:sender]; return self; } - showError: (const char *)errorMessage { NXRunAlertPanel(NULL, errorMessage, [stringSet valueForStringKey:"OK"], NULL, NULL); return self; } // appAcceptsAnotherFile is an application delegate method which // returns whether it is OK for the application to try to open more files // with the appOpenFile:type: method. NibList can indeed open multiple // windows, so we return YES. -(BOOL) appAcceptsAnotherFile:sender { return (YES); } // appOpenFile:type: is called to open the specified file. It is normally // called by the Application object in response to open requests from the // Workspace. Here we also route the open requests from the OpenPanel // to this method (see openRequest:). -(int) appOpenFile:(char *)fileName type:(char *)fileType { if( !strcmp(fileType, [stringSet valueForStringKey:"extension"])) return [self openFile:fileName]; else return NO; } // openRequest: opens a new file. It puts up a open panel, and, if the user // doesn't cancel, it reads the specified archive file. If the selected file // is not a proper archive file, then openRequest: will complain. - openRequest:sender { const char *fileName; const char *const types[2] = {[stringSet valueForStringKey:"extension"], NULL}; if ([openReq runModalForTypes:types] && (fileName = [openReq filename])) { [self openFile:fileName]; } else [self showError:[stringSet valueForStringKey:"errorOnOpenRequest"]]; return self; } -(int) openFile:(const char *)fileName { id newFile; /* allocate a new zone for the NibFile, allocate the new NibFile in that zone, and init: it with the filename */ if(!(newFile = [[NibFile allocFromZone:NXCreateZone(vm_page_size, vm_page_size, YES)] initFile:fileName])){ [self showError:[stringSet valueForStringKey:"errorOnOpen"]]; return NO; } else { [[newFile window] setDelegate:self]; return YES; } } /****** The following three save methods are only left as hooks for later use. *****/ // saveRequest: saves the current window under its default name (found in // the title bar). Note that if the title bar is empty or the default title // is "Untitled" then saveRequest: will put up a save panel, giving the user // a chance to specify a real title. - saveRequest:sender { return self; } // saveInRequest: gives the user a chance to save the current window // under a new name. - saveInRequest:sender { return self; } // saveWindow writes a window out the archive file whose name is specified // by the second argument. The title of the current window is also set // accordingly. - saveWindow:(id)win inPath:(const char *)name { return self; } // Printing is rather simple; just send printPSCode: to the text view // you wish to print. The print panel will automatically pop up and unless // the user cancels the printout the text view will be printed. - printRequest:sender { id curText = [[[NXApp mainWindow] contentView] docView]; if (curText == nil) [self showError:[stringSet valueForStringKey:"errorOnPrintRequest"]]; else { [[[NXApp printInfo] setHorizCentered:NO] setVertCentered:NO]; [curText printPSCode:self]; } return self; } // closeRequest closes the current window by simulating a click on the // closebutton. A check should probably be added to give the user the // option of saving the window before closing - closeRequest:sender { [[NXApp mainWindow] performClose:sender]; return self; } - (BOOL)isSimulating { return NO; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.