This is PrefController.m in view mode; [Download] [Up]
#import <appkit/nextstd.h>
#import <appkit/Window.h>
#import <appkit/Panel.h>
#import <appkit/OpenPanel.h>
#import <appkit/Matrix.h>
#import <appkit/Speaker.h>
#import <appkit/Listener.h>
#import <appkit/defaults.h>
#import <mach.h>
#import "Thinker.h"
#import "PrefController.h"
static const char *module = "SlideShow";
static const char *Yes = "YES";
static const char *No = "NO";
static id fakeSelf;
@implementation PrefController
- init
{
[super init];
fakeSelf = self; // kludge - but it works.
return self;
}
- formActions:sender
{
const char *name;
int tag;
float value;
const char *taglist[] = { "Steptime", "Waittime", "FadeDelta", 0 };
for (tag = 0; tag < 3; tag++) {
name = taglist[tag];
value = [[sender findCellWithTag:tag] floatValue];
switch (tag) {
case 0: defv.steptime = value; break;
case 1: defv.waittime = value; break;
case 2: defv.fadedelta = value; break;
}
}
return self;
}
- switchActions:sender
{
const char *name;
int tag, value;
const char *taglist[] = { "Fancy", "Randomize", "Slide", "Debug", 0 };
for (tag = 0; tag < 3; tag++) {
name = taglist[tag];
value = [[sender findCellWithTag:tag] intValue];
switch (tag) {
case 0: defv.fancy = value; break;
case 1: defv.randomize = value; break;
case 2: defv.slide = value; break;
case 3: defv.debug = value; break;
}
}
return self;
}
- okAction:sender
{
char buf[BUFSIZ];
NXWriteDefault(module, "Fancy", defv.fancy > 0 ? Yes : No);
NXWriteDefault(module, "Randomize", defv.randomize > 0 ? Yes : No);
NXWriteDefault(module, "Slide", defv.slide > 0 ? Yes : No);
sprintf(buf, "%d\0", defv.debug);
NXWriteDefault(module, "Debug", buf);
sprintf(buf, "%d\0", (int)defv.steptime);
NXWriteDefault(module, "Steptime", buf);
sprintf(buf, "%d\0", (int)defv.waittime);
NXWriteDefault(module, "Waittime", buf);
sprintf(buf, "%f\0", defv.fadedelta);
NXWriteDefault(module, "FadeDelta", buf);
NXWriteDefault(module, "Filelist", defv.filelist);
[SlideShowView updateSettings];
return self;
}
- revertAction:sender
{
[self loadDefaults];
[self dispDefaults];
return self;
}
// override method; runModalForDirectory
- allowMultipleFiles
{
return NO;
}
- setAction:sender
{
const char *dir, *file;
const char *const *ret_filenames;
const char *ret_directory;
char buf[MAXPATHLEN], *b;
OpenPanel *pan;
strcpy(buf, defv.filelist);
if (strlen(buf) == 0)
strcpy(buf, NXGetDefaultValue(module, "Filelist"));
if (strlen(buf) == 0) {
// this should never happen
strcpy(buf, "/LocalLibrary/Images/.list");
}
if ((b = rindex(buf, '/')) != NULL)
*b = '\0';
else
b = buf; // punt
dir = buf;
file = b+1;
pan = [OpenPanel new];
[pan runModalForDirectory:dir file:file];
ret_directory = [pan directory];
ret_filenames = [pan filenames];
sprintf(buf, "%s/%s\0", ret_directory, *ret_filenames);
strcpy(defv.filelist, buf);
[self dispDefaults];
return self;
}
// code borrowed from NextStep/Reference/02_Classes/AppKit/Speaker.rtf
- editAction:sender
{
int msgDelivered, fileOpened;
id mySpeaker;
port_t thePort;
char buf[MAXPATHLEN];
strcpy(buf, defv.filelist);
if (strlen(buf) == 0)
strcpy(buf, NXGetDefaultValue(module, "Filelist"));
mySpeaker = [[Speaker alloc] init];
thePort = NXPortFromName("Edit", NULL);
if (thePort != PORT_NULL) {
[mySpeaker setSendPort:thePort];
msgDelivered = [mySpeaker openFile:buf ok:&fileOpened];
} else
NXRunAlertPanel([NXApp appName],
"Could not get port for Edit", NULL, NULL, NULL);
[mySpeaker free];
port_deallocate(task_self(), thePort);
return self;
}
- fileAction:sender
{
strcpy(defv.filelist, [sender stringValue]);
return self;
}
- loadDefaults
{
const char *value;
extern int defaultIntValue(const char *);
value = NXGetDefaultValue(module, "Fancy");
defv.fancy = defaultIntValue(value);
value = NXGetDefaultValue(module, "Randomize");
defv.randomize = defaultIntValue(value);
value = NXGetDefaultValue(module, "Slide");
defv.slide = defaultIntValue(value);
value = NXGetDefaultValue(module, "Debug");
defv.debug = defaultIntValue(value);
value = NXGetDefaultValue(module, "Steptime");
defv.steptime = atof(value);
value = NXGetDefaultValue(module, "Waittime");
defv.waittime = atof(value);
value = NXGetDefaultValue(module, "FadeDelta");
defv.fadedelta = atof(value);
value = NXGetDefaultValue(module, "Filelist");
strcpy(defv.filelist, (char *)value);
return self;
}
- dispDefaults
{
[[formOutlets findCellWithTag:0] setIntValue:(int)defv.steptime];
[[formOutlets findCellWithTag:1] setIntValue:(int)defv.waittime];
[[formOutlets findCellWithTag:2] setFloatValue:defv.fadedelta];
[[switchOutlets findCellWithTag:0] setIntValue:defv.fancy];
[[switchOutlets findCellWithTag:1] setIntValue:defv.randomize];
[[switchOutlets findCellWithTag:2] setIntValue:defv.slide];
[[switchOutlets findCellWithTag:3] setIntValue:defv.debug];
[filelistOutlet setStringValue:defv.filelist];
return self;
}
// this is a kludge. is there a cleaner way?
+ updatePanel
{
[fakeSelf loadDefaults];
[fakeSelf dispDefaults];
return self;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.