This is MiscAppDefaults.m in view mode; [Download] [Up]
//
// MiscAppDefaults.m -- easy access to preferences
// Written by Steve Hayman Copyright (c) 1994 by Steve Hayman.
// Version 1.0. All rights reserved.
// This notice may not be removed from this source code.
//
// This object is included in the MiscKit by permission from the author
// and its use is governed by the MiscKit license, found in the file
// "LICENSE.rtf" in the MiscKit distribution. Please refer to that file
// for a list of all applicable permissions and restrictions.
//
#import <appkit/appkit.h>
#import <misckit/MiscAppDefaults.h>
#import <misckit/MiscString.h>
@implementation Application(MiscAppDefaults)
// Three core methods first...
// Register a set of defaults under the application's name.
- (int) registerDefaults:(const NXDefaultsVector) v
{
return NXRegisterDefaults( [NXApp appName], v );
}
// Return the requested default value as a string.
- (const char *)defaultValue:(const char *)defName
{
return NXGetDefaultValue( [NXApp appName], defName );
}
// Set a default value. This adds the value to the internal
// defaults cache and also to the user's .NeXT/.NeXTdefaults database.
// Returns what NXWriteDefault() returns (1 on success, 0 on failure)
- (int)setDefault:(const char *)defName to:(const char *)defValue
{
return NXWriteDefault( [NXApp appName], defName, defValue );
}
// -----------------------------------------------------------------
// The rest of the methods are wrappers and format converters.
// Return a default value as an integer.
// Note that if the default has never been set, or has been set to
// something other than an integer, 0 will be returned.
- (int) defaultIntValue:(const char *)defName
{
const char *v = [self defaultValue:defName];
return( v ? atoi(v) : 0 );
}
// Return a default value as a Boolean.
// We return YES if the string value is "YES", NO if it's anything else
// (including if it has never been set.)
- (BOOL) defaultBoolValue:(const char *)defName
{
const char *v = [self defaultValue:defName];
return ( v ? (strcmp( v, "YES") == 0) : NO ) ;
}
// Set an integer default value. Convert it to a string first.
- (int)setDefault:(const char *)defName toInt:(int)defValue
{
char intBuffer[80];
sprintf(intBuffer, "%i", defValue);
return [self setDefault:defName to:intBuffer];
}
// Set a boolean default. We write the string YES if the boolean
// is true, NO otherwise.
- (int)setDefault:(const char *)defName toBool:(BOOL)defValue
{
return [self setDefault:defName to:(defValue ? "YES" : "NO")];
}
//--------------------------------
// Donated by Stefan Böhringer
// invoke this method whenever a filename registered in the
// defaultsdatabase can not be opened. (e.g. the user moved the file)
// This method asks the user to locate a valid file starting
// from the (invalid) registered location
// and upon success stores the full path in the defaultsdatabase.
// returns nil if the user canceld the action, self otherwise
// aFile must -of course- not be an absolute path
- setDefault:(const char *) defName toFilename:(const char *) aFile
usingTitle:(const char *)theTitle
{
id erg=nil;
OpenPanel *openPanel=[OpenPanel new];
static const char *types[]={NULL,NULL};
MiscString *tmpStr = [[MiscString alloc] initString:
[NXApp defaultValue:defName]],
*fileStr = [tmpStr extractPart:MISC_STRING_LAST
useAsDelimiter:'/'];
const char *typptr=NULL;
if (typptr=[fileStr rindexOfChars:"."]) typptr++;
types[0]=typptr;
[tmpStr replaceFrom:[tmpStr rspotOfChars:"/"] to:[tmpStr length] with:""];
[openPanel setTitle:theTitle];
if ([openPanel runModalForDirectory:[tmpStr stringValueAndFree]
file:aFile types:types]) {
[NXApp setDefault:defName to:[openPanel filename]];
erg=self;
}
fileStr=[fileStr free];
return erg;
}
// For back compatability -- don't use these anymore as they will
// definitely go away in the future!
- (int)setIntDefault:(const char *)defName to:(int)defValue
{
return [self setDefault:defName toInt:defValue];
}
- (int)setBoolDefault:(const char *)defName to:(BOOL)defValue
{
return [self setDefault:defName toBool:defValue];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.