This is SplatDefaults.m in view mode; [Download] [Up]
/*
* SplatDefaults
* description: a subclass of EKDefaultsManager for managing Splat prefs
* history:
* 5/20/93 [Erik Kay] - created
* 6/3/93 [Erik Kay] - added SquareSize
*/
#import "EKApplication.h"
#import "EKSoundManager.h"
#import "Board.h"
#import "SplatView.h"
#import "SplatDefaults.h"
#import <pwd.h>
// all of the defaults for Splat
#define MOVE_ANIMATION "DoMoveAnimation"
#define PLAY_SOUNDS "PlaySounds"
#define SQUARE_SIZE "SquareSize"
#define BOARD_FILE "BoardFile"
#define PLAYER_NAME "PlayerName"
@implementation SplatDefaults
- init
{
struct passwd *pwd;
char *login, path[MAXPATHLEN];
const char *tmp;
[super init];
tmp = [[NXBundle mainBundle] directory];
sprintf(path,"%s/boards",tmp);
boardBundle = [[NXBundle alloc] initForDirectory:path];
// add all of the defaults to the hash table
[self addDefault:MOVE_ANIMATION];
[self addDefault:PLAY_SOUNDS];
[self addDefault:SQUARE_SIZE];
[self addDefault:BOARD_FILE];
[self addDefault:PLAYER_NAME];
// give the defaults initial values (takes the place of a defaults vector)
doMoveAnimation = YES;
playSounds = YES;
squareSize = 52;
boardFile = NXCopyStringBuffer("Starter");
[self computeBoardPath];
login = getlogin();
pwd = getpwnam(login);
playerName = NXCopyStringBuffer(pwd->pw_gecos);
return self;
}
// load the defaults, then do a few actions based on those results
- loadDefaults
{
[super loadDefaults];
[[NXApp soundManager] setPlaySounds:playSounds];
return self;
}
// load and display the preferences panel... override so that we can set
// some of the things in the panel up right
- loadPreferencesPanel
{
if (!prefsPanel) {
[NXApp loadNibSection:"Preferences.nib" owner:self withNames:NO];
[moveAnimationSwitch setIntValue:(int)doMoveAnimation];
[playSoundsSwitch setIntValue:(int)playSounds];
[playerNameField setStringValue:playerName];
[boardView setScalable:YES];
[boardView setBoard:[Board newFromFile:boardPath]];
}
return self;
}
// set a default value and take action based on what default was set
//! this is kind of a pain to extend
- setDefault:(const char *)key value:(const char *)val
{
int tmpSize;
[super setDefault:key value:val];
if (!val)
return self;
if (!strcmp(key,MOVE_ANIMATION)) {
if ((val[0] == 'Y') || (val[0] == 'y')) {
doMoveAnimation = YES;
} else doMoveAnimation = NO;
[moveAnimationSwitch setIntValue:(int)doMoveAnimation];
} else if (!strcmp(key,PLAY_SOUNDS)) {
if ((val[0] == 'Y') || (val[0] == 'y')) {
playSounds = YES;
} else playSounds = NO;
[playSoundsSwitch setIntValue:(int)playSounds];
} else if (!strcmp(key,SQUARE_SIZE)) {
tmpSize = atoi(val);
if (tmpSize > 0)
squareSize = tmpSize;
} else if (!strcmp(key,PLAYER_NAME)) {
free(playerName);
playerName = NXCopyStringBuffer(val);
[playerNameField setStringValue:val];
} else if (!strcmp(key,BOARD_FILE)) {
id oldBoard, newBoard;
char *tmp;
tmp = boardFile;
boardFile = NXCopyStringBuffer(val);
[self computeBoardPath];
oldBoard = [boardView board];
newBoard = [Board newFromFile:boardPath];
if (!newBoard) {
free(boardFile);
boardFile = tmp;
[self computeBoardPath];
} else {
[boardView setScalable:YES];
[boardView setBoard:newBoard];
[oldBoard free];
}
[super setDefault:key value:boardFile];
}
return self;
}
// turns move animation on or off
- setMoveAnimation:sender
{
if ([sender intValue]) {
doMoveAnimation = YES;
[self setDefault:MOVE_ANIMATION value:"Yes"];
} else {
doMoveAnimation = NO;
[self setDefault:MOVE_ANIMATION value:"No"];
}
return self;
}
- (BOOL)doMoveAnimation
{
return doMoveAnimation;
}
// enables or disables sound playing
- setSoundEnabled:sender
{
if ([sender intValue]) {
playSounds = YES;
[self setDefault:PLAY_SOUNDS value:"Yes"];
} else {
playSounds = NO;
[self setDefault:PLAY_SOUNDS value:"No"];
}
[[NXApp soundManager] setPlaySounds:playSounds];
return self;
}
- (BOOL)playSounds
{
return playSounds;
}
// the default square size
- setSquareSize:(int)val
{
static char buf[10];
sprintf(buf,"%d",val);
[self setDefault:SQUARE_SIZE value:buf];
squareSize = val;
return self;
}
- (int)squareSize
{
return squareSize;
}
- setDefaultPlayerName:sender
{
[self setDefault:PLAYER_NAME value:[sender stringValue]];
return self;
}
- (char *)defaultPlayerName
{
return playerName;
}
- computeBoardPath
{
const char *path;
char *tmp;
path = [boardBundle directory];
if (strlen(boardFile) >= strlen(path)) {
if (!strncmp(path,boardFile,strlen(path))) {
strcpy(boardPath,boardFile);
tmp = boardFile;
*(rindex(tmp,'.')) = '\0';
boardFile = rindex(tmp,'/') + 1;
boardFile = NXCopyStringBuffer(boardFile);
free(tmp);
} else strcpy(boardPath,boardFile);
} else if (!rindex(boardFile,'/')) {
[boardBundle getPath:boardPath forResource:boardFile
ofType:BOARD_EXTENSION];
} else strcpy(boardPath,boardFile);
return self;
}
- setBoardFile:sender
{
static id openPanel = nil;
const char *theType = BOARD_EXTENSION, *filename;
char const *fileTypes[2] = {0,0};
static char boardDir[MAXPATHLEN] = {'\0'};
int opr;
char *ptr;
if (!boardDir[0])
strcpy(boardDir,[boardBundle directory]);
if (!openPanel)
openPanel = [OpenPanel new];
fileTypes[0] = theType;
[NXApp setAutoupdate:NO];
opr = [openPanel runModalForDirectory:boardDir
file:NULL types:fileTypes];
if (opr) {
filename = [openPanel filename];
[self setDefault:BOARD_FILE value:filename];
strcpy(boardDir,filename);
ptr = rindex(boardDir,'/');
if (ptr)
*ptr = '\0';
} else {
[NXApp setAutoupdate:YES];
return self;
}
return self;
}
- (char *)boardPath
{
return boardPath;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.