This is SterOptikonApp.m in view mode; [Download] [Up]
/* * This subclass only adds a few responsibilities to the Application class. * It loads the info and preferences panels on demand, keeps track of the * path to the app wrapper, and overrides sendEvent: to watch for * control-mouseDown events which it vectors off to the help object. * * Author: Julie Zelenski, NeXT Developer Support * 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. */ #import "SterOptikonApp.h" #import <appkit/View.h> #import <strings.h> #import <defaults/defaults.h> // for NXArgv #import <libc.h> // for chdir, getwd @implementation SterOptikonApp:Application static char *openFile(const char *directory, const char *name, BOOL display) /* * Opens a file with the given name in the specified directory. * If we already have that file open, it is ordered front. * Returns the document if successful, nil otherwise. */ { char buffer[MAXPATHLEN+1], path[MAXPATHLEN+1]; if (name && *name) { if (!directory) { directory = "."; } else if (*directory != '/') { strcpy(buffer, "./"); strcat(buffer, directory); directory = buffer; } return buffer; } return '\0'; } static char *openDocument(const char *document, BOOL display) { char *directory, *name, *ext; char buffer[MAXPATHLEN+1]; strcpy(buffer, document); ext = strrchr(buffer, '.'); if (!ext || strcmp(ext, ".S3d")) strcat(buffer, ".S3d"); name = strrchr(buffer, '/'); if (name) { *name++ = '\0'; directory = buffer; } else { name = buffer; directory = NULL; } return openFile(directory, name, display); } + new; /* New is overridden so the SterOptikonApp gets and saves the path to executable. * The help object will ask the app for this, so it can find the help * files which are in a directory in the app wrapper. */ { char *suffix; self = [super new]; strcpy(appDirectory, NXArgv[0]); if (suffix = rindex(appDirectory,'/')) *suffix = '\0'; /* remove executable name */ if (appDirectory) chdir(appDirectory); getwd(appDirectory); strcpy(openFileName,""); return self; } - (const char *)appDirectory; /* Returns the path to the app wrapper (for Help object). */ { return appDirectory; } - (int)app:sender openFile:(const char *)path type:(const char *)type /* * This method is performed whenever a user double-clicks on an icon * in the Workspace Manager representing a StereoView program document. */ { if (type && !strcmp(type, "S3d")) { strcpy(openFileName,openDocument(path, YES)); if (openFileName) { haveOpenedDocument = YES; return YES; } return NO; } return NO; } - (int)openFile:(const char *)filename ok:(int *)flag { strcpy(openFileName,filename); *flag = YES; haveOpenedDocument = YES; return YES; } - (char *)getInitialFile; { return (char *)openFileName; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.