This is WindowManager.m in view mode; [Download] [Up]
/* Generated by Interface Builder */
#import "WindowManager.h"
#import <appkit/Application.h>
#import <appkit/ScrollView.h>
#import <appkit/Text.h>
#import <appkit/TextField.h>
#import <appkit/OpenPanel.h>
#import <libc.h>
#import <strings.h>
@implementation WindowManager
- (char *) extension ;
{ // subclasses should override to provide file extension
// for saving window
return "" ;
}
- fileName: (char *) fname ;
{ // copy fname into ivar, set the
// window's title to fname, with the
// filename followed by the path
char fullName[128], *name ;
strncpy(fileName, fname, 127) ;
strncpy(fullName, fileName, 127) ;
name = rindex(fullName,'/') ;
if(name != NULL) // is there is a path,
{ char title[129] ;
name[0] = '\0' ; // split string into 2 pieces
name++ ;
sprintf(title,"%s %s",name,fullName) ;
[self setTitle: title] ;
}
else // no path, just use the filename
[self setTitle: fname] ;
return self ;
}
- message: (char *) aMsg ;
{ // show aMsg in the msgField
[msgField setStringValue: aMsg] ;
[self flushWindow] ;
return self ;
}
-revert:sender ;
{ return [self readFile] ;
}
- readFile ;
// read "fileName" into the text object
{ NXStream *fileStream ;
if(fileName[0] == '\0')
return self ; // no file to read!
[self message: "Reading file..."] ;
if((fileStream = NXMapFile(fileName,NX_READONLY)) != NULL)
{ [textView readText: fileStream] ;
NXCloseMemory(fileStream,NX_FREEBUFFER);
[self setDocEdited: NO] ;
}
else
NXRunAlertPanel("CB", "Error, couldn't read: %s",
NULL,NULL,NULL,fileName) ;
[self message: ""] ;
return self ;
}
-(BOOL) save:sender ;
{ if([self isDocEdited])
{ if(fileName[0] == '\0')
return [self saveAs: sender] ;
else
return [self saveTextToFileName] ;
}
return YES ;
}
-(BOOL) saveAs:sender ;
{ id savePanel = [SavePanel new] ;
[savePanel setRequiredFileType: [self extension]] ;
if([savePanel runModalForDirectory: NULL file: fileName])
{ [self fileName: (char *) [savePanel filename]] ;
return [self saveTextToFileName] ;
}
else
return NO ;
}
-(BOOL) saveTextToFileName ;
// pre: -ivar fileName contains a valid
// file pathname.
// -ivar textView contains a TextView object
// post: if file can be opened or created, with mode
// 644: text of textView is written out to the
// file named by fileName; file is closed, and
// YES is returned.
// otherwise returns NO
{ int fd ;
NXStream *fileStream ;
[self message: "Saving file..."] ;
fd = open(fileName, O_WRONLY|O_CREAT|O_TRUNC, 0644) ;
if(fd != -1)
{ fileStream = NXOpenFile(fd, NX_WRITEONLY) ;
[textView writeText: fileStream] ;
NXClose(fileStream) ;
[self setDocEdited:NO];
}
else
{ NXRunAlertPanel("Error","Could not save file:%s",
NULL,NULL,NULL,fileName) ;
[self message: ""] ;
return NO ;
}
[self message: ""] ;
return YES ;
}
- setTextView: sender ;
{ // get a handle on the text in the scrolling window.
// make ourselves its delegate, so we know when the
// text has been edited.
textView = [sender docView] ;
[textView setDelegate: self] ;
return self ;
}
- text:text isEmpty:(BOOL)empty
{ // this is a delegate message for the textView
if(![self isDocEdited])
[self setDocEdited: YES] ;
return NO;
}
- textView ;
{ return textView ;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.