Catakig/Source/Cocoa/PrefsPanel.m

106 lines
2.5 KiB
Objective-C

/* class PrefsPanel
Catakig's Preferences panel. Only one instance exists at runtime.
*/
#import "Catakig-Cocoa.h"
#import "PrefsPanel.h"
#import "ScreenView.h"
@implementation PrefsPanel
//---------------------------------------------------------------------------
static void SyncDefaults(BOOL registering)
{
#define PREF(NAME, TYPE, IVALUE) \
if (registering) \
G.prefs.NAME = [sud Register##TYPE:IVALUE forKey:@ #NAME]; \
else \
[sud set##TYPE:G.prefs.NAME forKey:@ #NAME];
NSUserDefaults* sud = [NSUserDefaults standardUserDefaults];
PREF(firstLaunch, Bool, YES)
PREF(beepsOn, Bool, YES)
PREF(keepBackupFiles, Bool, NO)
PREF(monochromeHue, Integer, 0x33FF33)
PREF(joystickControl, Integer, kJoyMouse)
if (not registering)
[sud synchronize];
#undef PREF
}
//---------------------------------------------------------------------------
+ (void)initialize
{
SyncDefaults(YES);
}
//---------------------------------------------------------------------------
- (void)close
{
G.prefs.firstLaunch = NO;
SyncDefaults(NO);
// NSLog(@"PrefPanel -close called"); //!!
// [NSUserDefaults resetStandardUserDefaults];
[super close];
}
//---------------------------------------------------------------------------
- (void)awakeFromNib
{
[mJoystickControl selectCellWithTag:G.prefs.joystickControl];
[mMonochromeHue setColor:[NSColor
colorWithDeviceRed: ((G.prefs.monochromeHue>>16) & 255)/255.
green: ((G.prefs.monochromeHue>> 8) & 255)/255.
blue: ((G.prefs.monochromeHue ) & 255)/255.
alpha: 1. ]];
[self HitMonochromeHue:mMonochromeHue];
}
//---------------------------------------------------------------------------
- (void)makeKeyAndOrderFront:(id)sender
{
if (not [self isVisible])
[self center];
[super makeKeyAndOrderFront:sender];
}
//---------------------------------------------------------------------------
- (IBAction)HitJoystickControl:(id)sender
{/*
Responds to user changing the joystick (and paddle) control mechanism.
*/
G.prefs.joystickControl = [sender selectedTag];
}
//---------------------------------------------------------------------------
- (IBAction)HitMonochromeHue:(id)sender
{/*
Responds to user changing the monochrome video hue preference.
First ensure color is in RGB space??
*/
float r, g, b;
[[sender color] getRed:&r green:&g blue:&b alpha:nil];
G.prefs.monochromeHue =
(uint32_t)(255. * r) << 16 |
(uint32_t)(255. * g) << 8 |
(uint32_t)(255. * b);
[ScreenView AllNeedDisplay];
}
//---------------------------------------------------------------------------
@end