This is MenuManager.m in view mode; [Download] [Up]
/* Generated by Interface Builder */ #import "MenuManager.h" #import "ClassManager.h" #import "WindowManager.h" #import <appkit/Matrix.h> #import <appkit/ButtonCell.h> #import <appkit/OpenPanel.h> #import <appkit/ScrollView.h> #import <appkit/Text.h> #import <appkit/NXBrowser.h> #import <appkit/NXBrowserCell.h> #import <objc/List.h> #import <objc/Storage.h> #import <strings.h> #import <libc.h> char thisAppsName[] = "CB" ; const char *objCTypes[] = { "m", "wsp", NULL } ; struct loadClass { char *className ; char *dotOFileName ; } ; @implementation MenuManager - appendFileToTranscript: (char *) fileName ; { // append the text of the indicated file to the transcript char *aStr ; struct stat statBuf ; int fd ; if(!(fd = open(fileName,O_RDONLY))) { NXRunAlertPanel("CB","Cannot open: %c",NULL,NULL,NULL,fileName) ; return self ; } fstat(fd,&statBuf) ; aStr = malloc(statBuf.st_size + 1) ; read(fd,aStr,statBuf.st_size) ; aStr[statBuf.st_size] = '\0' ; [self printf: aStr] ; close(fd) ; free(aStr) ; return self ; } - (int)browser:sender fillMatrix:matrix inColumn:(int)column ; { // delegate method for the browser object return [[ClassManager loadList] count] ; } - browser:sender loadCell:cell atRow:(int)row inColumn:(int)column ; { struct loadClass *lcPtr ; lcPtr = [[ClassManager loadList] elementAt: row] ; [cell setStringValue: lcPtr->className] ; [cell setLeaf:YES] ; return self ; } -cancelNewClass:sender ; { [self stopModal] ; [newClassPanel orderOut: self] ; return self ; } - clearTranscript: sender ; { [transcriptText setText: ""] ; return self ; } - createNewClass:sender ; { // create a new class browser and initialize its text char initText[1024] ; const char *className, *superClassFileName, *superClassName ; BOOL anglies ; id manager ; [self stopModal] ; [newClassPanel orderOut: self] ; className = [[[newClassInfoMatrix cellList] objectAt: 0] stringValue] ; superClassName = [[[newClassInfoMatrix cellList] objectAt: 1] stringValue] ; superClassFileName = [[[newClassInfoMatrix cellList] objectAt: 2] stringValue] ; anglies = index(superClassFileName, '<') == NULL? NO : YES ; sprintf(initText, "#pragma .h #import %c%s%c\n" "#import \"%s.h\"\n" "@implementation %s:%s\n" "{\n" "}\n" "\n" "@end", anglies? ' ':'"', superClassFileName, anglies? ' ':'"', className, className,superClassName) ; manager = [NXApp loadNibSection:"ClassManager.nib" owner:self] ; [manager className: (char *) className] ; [manager classText: initText] ; [manager makeKeyAndOrderFront: self] ; return self ; } - finder: sender ; { [[finderLineTextField window] center] ; [[finderLineTextField window] orderFront: self] ; return self ; } - finderAddDigit: sender ; { // add a digit (the finder's tag) to the finderLineTextField int sum ; sum = [finderLineTextField intValue] ; sum *= 10 ; sum += [[sender selectedCell] tag] ; [finderLineTextField setIntValue: sum] ; return self ; } - finderBackUp: sender ; { // erase previous digit in the finderLineTextField int sum ; sum = [finderLineTextField intValue] ; sum /= 10 ; [finderLineTextField setIntValue: sum] ; return self ; } - finderCurrent: sender ; { // put line number of beginning of selection into // the finderLineTextField id aView ; if([mainWindow respondsTo: @selector(textView)]) { NXSelPt start,end ; aView = [mainWindow textView] ; [aView getSel: &start :&end] ; [finderLineTextField setIntValue: [aView lineFromPosition: start.cp]] ; } return self ; } - finderGoTo: sender ; { // set selection at beginning of line indicated by // finderLineTextField id aView ; if([mainWindow respondsTo: @selector(textView)]) { int pos1, pos2, lineNum ; aView = [mainWindow textView] ; pos1 = [aView positionFromLine:lineNum = [finderLineTextField intValue]] ; pos2 = [aView positionFromLine: lineNum + 1] ; [aView setSel:pos1 :pos2] ; [aView scrollSelToVisible] ; } return self ; } - loadedClassesBrowser ; { return loadedClassesBrowser ; } - newClass:sender { // run the newClass panel modally [newClassPanel center] ; [self runModalFor: newClassPanel] ; return self; } - newDictionary:sender ; { // open a new Dictionary Manager [[[NXApp loadNibSection:"DictManager.nib" owner: self] center] makeKeyAndOrderFront: self] ; return self; } - newWorkspace:sender { [[[NXApp loadNibSection:"WorkspaceManager.nib" owner: self] center] makeKeyAndOrderFront: self] ; return self; } - open:sender { // pop up an open panel with .m or .wsp as the file extension. get // the results, open a manager on the code id openPanel ; openPanel = [OpenPanel new] ; [openPanel allowMultipleFiles: YES] ; if([openPanel runModalForDirectory: NULL file:NULL types: objCTypes]) [self openList: [openPanel filenames] path: [openPanel directory]] ; return self; } - openList: (const char * const *) fileNames path: (const char *) path ; // open all files in the NULL terminated list of filenames. If // path is non-null, then it is used as the directory in which to find // the files. If null, the fileNames are considered as paths themselves. { char fName[512], className[128] ; id manager ; int i ; float x = 100.0, y = 800.0 ; while(*fileNames != NULL) { char *extension ; extension = rindex(*fileNames,'.') ; if(path) sprintf(fName,"%s/%s",path,*fileNames) ; else strcpy(fName,*fileNames) ; if(!strcmp(extension,".m")) { manager = [NXApp loadNibSection:"ClassManager.nib" owner: self] ; [manager moveTopLeftTo:x :y] ; [manager fileName: fName] ; x += 25.0 ; y -= 25.0 ; [manager makeKeyAndOrderFront: self] ; for(i = 0 ; (*fileNames)[i] != '.'; i++) className[i] = (*fileNames)[i] ; // strip off extension className[i] ='\0' ; [manager className: className] ; } else // open anything else in a workspace { manager = [NXApp loadNibSection:"WorkspaceManager.nib" owner: self] ; [manager fileName: fName] ; [manager moveTopLeftTo:x :y] ; [manager fileName: fName] ; x += 25.0 ; y -= 25.0 ; [manager makeKeyAndOrderFront: self] ; } [manager readFile] ; fileNames++ ; } return self ; } - printf: (char *) format, ... ; { // format (as in printf) and print into the transcript NXStream *aStream ; char *textBuf ; int textLen, maxLen ; va_list argList ; aStream = NXOpenMemory(NULL, 0, NX_READWRITE) ; va_start(argList, format) ; NXVPrintf(aStream, format, argList) ; NXGetMemoryBuffer(aStream, &textBuf, &textLen, &maxLen); textLen = [transcriptText textLength] ; [transcriptText setSel: textLen :textLen] ; [transcriptText replaceSel: textBuf] ; NXCloseMemory(aStream,NX_TRUNCATEBUFFER) ; return self ; } - setTranscriptText: anObject ; { // this set method is also used to open up an // initial open panel transcriptText = [anObject docView] ; return self ; } - showLoadedClasses: sender ; { [loadedClassesBrowser loadColumnZero] ; [[loadedClassesBrowser window] orderFront: self] ; return self ; } - showTranscript: sender ; { [[transcriptWindow center] orderFront: self] ; return self ; } - transcriptText ; { return transcriptText ; } - unloadAllclasses: sender ; { [ClassManager unloadAll] ; return self ; } - unloadClass: sender ; { if([loadedClassesBrowser selectedColumn] == 0) [ClassManager unload: [[[loadedClassesBrowser matrixInColumn: 0] selectedCell] stringValue]] ; return self ; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.