This is Manager.m in view mode; [Download] [Up]
/* * This class mostly does opening and saving. Plus setting the matrices * and ScrollView up for max class size (45) * Rob Ferrante, 2/92 */ #import "Manager.h" #import <appkit/Window.h> #import <appkit/ScrollView.h> #import <appkit/Matrix.h> #import <appkit/TextField.h> #import <appkit/OpenPanel.h> #import <streams/streams.h> #import <appkit/nextstd.h> #import "strings.h" #define FILESTAMP "*** Produced By CurveGrader ***" @implementation Manager char *titleFromString(char *str) { static char title[36]; int len = strlen(str); strcpy(title,"..."); if (len >32) strcpy(&title[3],&str[len -32]); else strcpy(&title[3],str); return title; } - init { [super init]; currentPathName = NXCopyStringBuffer("~/UNTITLED"); return self; } - saveToFileWithPanel:sender { id saver = [SavePanel new]; if([saver runModal]==1) { free( currentPathName); currentPathName = NXCopyStringBuffer([saver filename]); [quizWindow setTitle:titleFromString(currentPathName)]; [self saveToCurrentFile:self]; } return self; } - readFromCurrentFile:sender { NXStream *ms; int i, rows, cols; char name[31],grade[5]; float score; if((ms =NXMapFile(currentPathName, NX_READONLY))==NULL) { NXRunAlertPanel("Alert", "Couldn't read file", "OK", NULL, NULL); return self; } [names getNumRows:&rows numCols:&cols]; name[0]='\0'; NXScanf(ms, "\"%[^\"]\"\n", name); if (strcmp(name, FILESTAMP) != 0) { NXRunAlertPanel("Alert", "Not a CurveGrader File", "OK", NULL, NULL); return self; } name[0]='\0'; NXScanf(ms, "\"%[^\"]\"\n", name); [classField setStringValue:name]; name[0]='\0'; NXScanf(ms, "\"%[^\"]\"\n", name); [quizField setStringValue:name]; for (i=0; i<rows; i++) { name[0]='\0'; grade[0]='\0';score=0; NXScanf(ms, "\"%[^\"]\",%f,\"%[^\"]\"\n", name, &score, grade); [[names cellAt:i :0] setStringValue:name]; [[scores cellAt:i :0] setFloatValue:score]; [[grades cellAt:i :0] setStringValue:grade]; } NXCloseMemory(ms, NX_FREEBUFFER); [quizWindow setTitle:titleFromString(currentPathName)]; return self; } - saveToCurrentFile:sender { NXStream *ms; int i, rows, cols; ms = NXMapFile(currentPathName, NX_WRITEONLY); if (ms == NULL) ms = NXOpenMemory(NULL, 0, NX_WRITEONLY); [names getNumRows:&rows numCols:&cols]; NXPrintf(ms, "\"%s\"\n", FILESTAMP); NXPrintf(ms, "\"%s\"\n", [classField stringValue]); NXPrintf(ms, "\"%s\"\n", [quizField stringValue]); for (i=0; i<rows; i++) NXPrintf(ms, "\"%s\",%f,\"%s\"\n",[[names cellAt:i :0] stringValue], [[scores cellAt:i :0] floatValue], [[grades cellAt:i :0] stringValue]); if ( NXSaveToFile( ms, currentPathName)== -1) NXRunAlertPanel("Alert", "Couldn't write file", "OK", NULL, NULL); NXCloseMemory(ms, NX_FREEBUFFER); return self; } - readFromFileWithPanel:sender { id opener = [OpenPanel new]; if([opener runModal]==1) { free( currentPathName); currentPathName = NXCopyStringBuffer([opener filename]); [self readFromCurrentFile:self]; } return self; } - appDidInit:sender { NXRect matrixRect, docRect, clipRect; [names notifyAncestorWhenFrameChanged:YES]; [grades renewRows:45 cols:1]; [grades sizeToCells]; [scores renewRows:45 cols:1]; [scores sizeToCells]; [names renewRows:45 cols:1]; [names sizeToCells]; [names getBounds:&matrixRect]; [[scroller docView] getBounds:&docRect]; [[[scroller docView] superview] getBounds:&clipRect]; [[scroller docView] sizeTo:docRect.size.width :matrixRect.size.height+20]; [[scroller docView] moveTo:0 :(clipRect.size.height -docRect.size.height)]; [scroller reflectScroll:[[scroller docView] superview]]; [scroller display]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.