This is MiscSavePanel.m in view mode; [Download] [Up]
// MiscSavePanel.m -- A save panel that allows appending.
//
// Written by Peter Langston Copyright (c) 1994 by Peter S. Langston.
// Version 1.1. All rights reserved.
// Thanks to David Griffiths <dave@prim.demon.co.uk> for the
// pointer to the _validateNames:checkBrowser: method.
//
// This notice may not be removed from this source code.
#import <misckit/MiscSavePanel.h>
#import "libc.h"
@interface SavePanel(Misc_private)
- (BOOL)_validateNames:(char *)name checkBrowser:(BOOL)check;
@end
@implementation MiscSavePanel
+ alloc // return nil for error
{
return nil;
}
+ allocFromZone:(NXZone *)zone // return nil for error
{
return nil;
}
+ newContent:(const NXRect *)contentRect
style:(int)aStyle
backing:(int)bufferingType
buttonMask:(int)mask
defer:(BOOL)flag
{
static id me;
if (!me)
me = [super newContent:contentRect
style:aStyle
backing:bufferingType
buttonMask:mask
defer:flag];
return me;
}
- (BOOL)_validateNames:(char *)name checkBrowser:(BOOL)check
{
char buf[10000];
if (!appendOK) {
appMode = NO;
return [super _validateNames:name checkBrowser:check];
}
sprintf(buf, "%s/%s", directory, name);
appMode = NO;
{ struct stat fileInfo;
// If it doesn't exist, or it is a directory, we should let
// SavePanel's method handle it, since that is the behavior
// we want. The 'Home' button, for example, wouldn't work
// otherwise.
// code from Carl Lindberg
if ((stat(buf, &fileInfo) == -1) ||
((fileInfo.st_mode & S_IFDIR) == S_IFDIR))
{
return [super _validateNames:name checkBrowser:check];
}
}
if (access(buf, F_OK) == 0) {
int i = NXRunAlertPanel("Save/Append", "The file %s in %s exists.",
"Append", "Replace", "Cancel", name, directory);
if (i == NX_ALERTOTHER)
return NO;
if (i == NX_ALERTDEFAULT)
appMode = YES;
}
// We're hoping that NeXT hasn't made "filename" be static or something
// so that freeing it is OK. Hopefully this won't cause crashes elsewhere.
if (filename) free(filename); // Fix memory leak -- Carl Lindberg
filename = NXCopyStringBuffer(buf);
return YES;
}
- allowAppend:(BOOL)ok // ok=YES allows the append choice
{
if (appendOK = ok)
[self setTitle:"Save/Append"];
else
[self setTitle:"Save"];
return self;
}
- (BOOL)appending // YES => append chosen, else replace
{
return appMode;
}
- free // we ignore this...
{
return self;
}
- init // return nil for error
{
return nil;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.