This is WoodDoc_Creation.m in view mode; [Download] [Up]
#import "wooddoc.h" #import "ScrollViewDeluxeForOOE.h" #import "Ruler.h" @implementation WoodDoc (Creation) static const int classVersion = 100; // version number * 100 static NXCoord origX = 300.0; // doc starting position static NXCoord origY = 200.0; static NXCoord posInc = 20.0; // increment to position static BOOL shouldIncPos = YES; static int tagProvider = 0; + initialize { if(self == [WoodDoc class]){ [self setVersion:classVersion]; [self setDocExtension:localString("wood")]; [self setDefaultTitleFormat:localString("Untitled%d")]; [self initializePasteboardTypes]; } return self; } + setIncPos:(BOOL)aBool { shouldIncPos = aBool; return self; } - initFromFile:(const char *)file { NXTypedStream *stream; char *strPtr = rindex(file, '.'); BOOL shouldRegister = NO; if(strcmp([[self class] docExtension],++strPtr)) return [self initFromPasteboard:[Pasteboard newByFilteringFile:file]]; stream = NXOpenTypedStreamForFile(file,NX_READONLY); if(stream){ if([self setUpNib]){ [window setTitle:localString("Loading...")]; if([self loadTreeFrom:stream]){ [self instanceAwake]; [self dirty:NO]; [self updateViewsDirty:NO rect:NULL flag:(UPDATE_ALL | SCROLL_TREEVIEW)]; [self setSavedDocument:YES]; [self setEmpty:(tree ? NO : YES)]; [self setName:file]; [window makeKeyAndOrderFront:self]; shouldRegister = YES; } } else Notify(localString("WoodDoc: can't set up doc nib"),file); NXCloseTypedStream(stream); if(shouldRegister){ [NXApp registerDoc:self]; return self; } else { [self free]; return nil; } } else { Notify(localString("WoodDoc: can't open file"),file); [self free]; return nil; } } - initOOEFromFile:(const char *)file { NXTypedStream *stream; char *strPtr = rindex(file, '.'); BOOL shouldRegister = NO; if(strcmp([[self class] docExtension],++strPtr)) return [self initFromPasteboard:[Pasteboard newByFilteringFile:file]]; stream = NXOpenTypedStreamForFile(file,NX_READONLY); if(stream){ if([self setUpNib]){ [window setTitle:localString("Loading...")]; if([self loadTreeFrom:stream]){ [self instanceAwake]; [self dirty:NO]; [self updateViewsDirty:NO rect:NULL flag:(UPDATE_ALL | SCROLL_TREEVIEW)]; [self setSavedDocument:YES]; [self setEmpty:(tree ? NO : YES)]; [self setName:file]; shouldRegister = YES; } } else Notify(localString("WoodDoc: can't set up doc nib"),file); NXCloseTypedStream(stream); if(shouldRegister){ [NXApp registerDoc:self]; return self; } else { [self free]; return nil; } } else { Notify(localString("WoodDoc: can't open file"),file); [self free]; return nil; } } - initFromPasteboard:pasteboard { char *stringPos, *tempPtr, *pathList; char tempBuf[MAXPATHLEN+1]; char **filePath = NULL; int files = 0, length = 0, count = 0; BOOL flag = NO; id pBoard = [Pasteboard newByFilteringTypesInPasteboard:pasteboard]; if ([pBoard findAvailableTypeFrom:&NXFilenamePboardType num:1]) { if ([pBoard readType:NXFilenamePboardType data:&pathList length:&length]) flag = YES; } else if ([pBoard findAvailableTypeFrom:&NXAsciiPboardType num:1]) { if ([pBoard readType:NXAsciiPboardType data:&pathList length:&length]) flag = YES; } if (!flag) { Notify(localString("Pasteboard"), localString("Could not parse or filter ASCII data from the requested source.")); return nil; } stringPos = tempPtr = pathList; while (stringPos = index(stringPos, '\t')) { count = (int)(stringPos-tempPtr); strncpy(tempBuf,tempPtr,count); *(tempBuf+count) = '\0'; filePath = addFile(tempBuf,filePath,files,[self zone]); files++; stringPos++; tempPtr=stringPos; } count = strlen(tempPtr); strncpy(tempBuf,tempPtr,count); *(tempBuf+count) = '\0'; filePath = addFile(tempBuf,filePath,files,[self zone]); files++; while (files--) { if (![[[NXApp docClass] allocFromZone:[NXApp newDocZone]] initFromFile:filePath[files]]) Notify(localString("Pasteboard: can't open file"),filePath[files]); } freeList(filePath); [pBoard deallocatePasteboardData:pathList length:length]; return self; } - initNewOOE:client { [self init]; [self connectToClient:client]; [self setTitle_OOE:nil]; return self; } - initOOE:client { [self initNewOOE:client]; [self retrieveData:client]; return self; } - init { if([self setUpNib]){ tree = nil; printInfo = [DGPrintInfo new]; [printInfo setMarginLeft:36.0 right:36.0 top:36.0 bottom:36.0]; [printInfo setHorizCentered:YES]; [printInfo setVertCentered:YES]; [self instanceAwake]; [self dirty:NO]; [self setSavedDocument:NO]; [self setEmpty:YES]; [self setName:NULL andDirectory:NULL]; [NXApp registerDoc:self]; [window makeKeyAndOrderFront:self]; return self; } else return nil; } - setUpNib { [NXApp loadLocalNib:"WoodDoc" owner:self]; return self; } - instanceAwake { NXRect frameRect; tag = tagProvider++; undoManager = [[UndoManager allocFromZone:[self zone]] init]; [undoManager addUndoDelegate:self]; lastSelectedNode = nil; findSelectedNode = nil; isOOEServer = NO; theOOEClient = nil; theOOEClientPath = NULL; docScale = 1.0; showMarker = YES; defaultProps.border = 10.0; defaultProps.parentDistance = 30.0; defaultProps.zipped = NO; defaultProps.shadow = YES; defaultProps.fill = YES; defaultProps.outline = YES; defaultProps.font = [Font newFont:"Times-Roman" size:12.0]; defaultProps.pathKind = RECT_NODETYPE; defaultProps.linkKind = 1; defaultProps.biegFactor = 0.33; defaultProps.fillColor = NX_COLORWHITE; defaultProps.outlineColor = NX_COLORBLACK; defaultProps.textColor = NX_COLORBLACK; defaultProps.shadowColor = NX_COLORLTGRAY; defaultProps.defaultNodeName = NXCopyStringBuffer("Node"); defaultProps.ending = ENDING_NONE; defaultProps.parentEnding = ENDING_NONE; [window moveTo:origX :origY]; if(shouldIncPos){ origX += posInc; origY -= posInc; if(origX > 700) origX = 110; if(origY < 0) origY = 70; } [window setDelegate:self]; calcFrame(printInfo,&frameRect); treeView = [[TreeView allocFromZone:[window zone]] initFrame:&frameRect]; [treeView setAgent:self]; NXSetRect(&frameRect,0,0,100,100); scrollView = [[ScrollViewDeluxeForOOE allocFromZone:[window zone]] initFrame:&frameRect]; [scrollView setDocView:treeView]; [scrollView setZoomButtonVisible:YES]; [scrollView setRulerClass:[Ruler class]]; [scrollView hideRulers:self]; [scrollView setPageLeftRightButtonsVisible:NO]; [scrollView setPageUpDownButtonsVisible:NO]; [textView removeFromSuperview]; [[textView docView] setDelegate:self]; [doubleView addSubview:scrollView]; [doubleView addSubview:textView]; [doubleView display]; [window makeFirstResponder:treeView]; textViewSaved = YES; saveToAccessoryWindow = nil; saveToAccessoryControl = nil; return self; } - loadTreeFrom:(NXTypedStream *)stream { id ret = self; NX_DURING tree = NXReadObject(stream); [tree setDelegateRecursive:self]; printInfo = NXReadObject(stream); NX_HANDLER switch(NXLocalHandler.code){ case TYPEDSTREAM_CALLER_ERROR: NXRunAlertPanel(0,"Typed stream caller error",0,0,0); ret = nil; break; case TYPEDSTREAM_FILE_INCONSISTENCY: NXRunAlertPanel(0,"Typed stream file inconsistency",0,0,0); ret = nil; break; case TYPEDSTREAM_CLASS_ERROR: NXRunAlertPanel(0,"Typed stream class error",0,0,0); ret = nil; break; case TYPEDSTREAM_TYPE_DESCRIPTOR_ERROR: NXRunAlertPanel(0,"Typed stream descriptor error",0,0,0); ret = nil; break; case TYPEDSTREAM_WRITE_REFERENCE_ERROR: NXRunAlertPanel(0,"Typed stream write reference error",0,0,0); ret = nil; break; case TYPEDSTREAM_INTERNAL_ERROR: NXRunAlertPanel(0,"Typed stream internal error",0,0,0); ret = nil; break; } NX_ENDHANDLER return ret; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.