mirror of
https://github.com/softdorothy/GliderPRO.git
synced 2024-11-22 05:31:29 +00:00
7a70d18ba6
Sources for Glider PRO, a Macintosh game written by John Calhoun and published by Casady & Greene, Inc. I believe it was using CodeWarrior IDE to create a fat (68K and PowerPC) binary.
1 line
34 KiB
C
Executable File
1 line
34 KiB
C
Executable File
|
|
//============================================================================
|
|
//----------------------------------------------------------------------------
|
|
// Settings.c
|
|
//----------------------------------------------------------------------------
|
|
//============================================================================
|
|
|
|
|
|
#include <Sound.h>
|
|
#include <TextUtils.h>
|
|
#include "DialogUtils.h"
|
|
#include "Externs.h"
|
|
#include "Environ.h"
|
|
#include "House.h"
|
|
|
|
|
|
#define kMainPrefsDialID 1012
|
|
#define kDisplayPrefsDialID 1017
|
|
#define kSoundPrefsDialID 1018
|
|
#define kControlPrefsDialID 1023
|
|
#define kBrainsPrefsDialID 1024
|
|
#define kDisplayButton 3
|
|
#define kSoundButton 4
|
|
#define kControlsButton 5
|
|
#define kBrainsButton 6
|
|
#define kDisplay1Item 3
|
|
#define kDisplay3Item 4
|
|
#define kDisplay9Item 5
|
|
#define kDoColorFadeItem 9
|
|
#define kCurrentDepth 10
|
|
#define k256Depth 11
|
|
#define k16Depth 12
|
|
#define kDispDefault 15
|
|
#define kUseQDItem 16
|
|
#define kUseScreen2Item 17
|
|
#define kSofterItem 4
|
|
#define kLouderItem 5
|
|
#define kVolNumberItem 7
|
|
#define kIdleMusicItem 8
|
|
#define kPlayMusicItem 9
|
|
#define kSoundDefault 13
|
|
#define kRightControl 5
|
|
#define kLeftControl 6
|
|
#define kBattControl 7
|
|
#define kBandControl 8
|
|
#define kControlDefaults 13
|
|
#define kESCPausesRadio 14
|
|
#define kTABPausesRadio 15
|
|
#define kMaxFilesItem 5
|
|
#define kQuickTransitCheck 7
|
|
#define kDoZoomsCheck 8
|
|
#define kBrainsDefault 9
|
|
#define kDoDemoCheck 10
|
|
#define kDoBackgroundCheck 11
|
|
#define kDoErrorCheck 12
|
|
#define kDoPrettyMapCheck 13
|
|
#define kDoBitchDlgsCheck 14
|
|
|
|
|
|
void SetBrainsToDefaults (DialogPtr);
|
|
void UpdateSettingsBrains (DialogPtr);
|
|
pascal Boolean BrainsFilter (DialogPtr, EventRecord *, short *);
|
|
void DoBrainsPrefs (void);
|
|
void SetControlsToDefaults (DialogPtr);
|
|
void UpdateControlKeyName (DialogPtr);
|
|
void UpdateSettingsControl (DialogPtr);
|
|
pascal Boolean ControlFilter (DialogPtr, EventRecord *, short *);
|
|
void DoControlPrefs (void);
|
|
void SoundDefaults (DialogPtr);
|
|
void UpdateSettingsSound (DialogPtr);
|
|
void HandleSoundMusicChange (short, Boolean);
|
|
pascal Boolean SoundFilter (DialogPtr, EventRecord *, short *);
|
|
void DoSoundPrefs (void);
|
|
void DisplayDefaults (void);
|
|
void FrameDisplayIcon (DialogPtr);
|
|
void DisplayUpdate (DialogPtr);
|
|
pascal Boolean DisplayFilter (DialogPtr, EventRecord *, short *);
|
|
void DoDisplayPrefs (void);
|
|
void SetAllDefaults (void);
|
|
void FlashSettingsButton (short);
|
|
void UpdateSettingsMain (DialogPtr);
|
|
pascal Boolean PrefsFilter (DialogPtr, EventRecord *, short *);
|
|
void BitchAboutChanges (void);
|
|
|
|
|
|
Rect prefButton[4], controlRects[4];
|
|
Str15 leftName, rightName, batteryName, bandName;
|
|
Str15 tempLeftStr, tempRightStr, tempBattStr, tempBandStr;
|
|
long tempLeftMap, tempRightMap, tempBattMap, tempBandMap;
|
|
short whichCtrl, wasDepthPref;
|
|
Boolean wasFade, wasIdle, wasPlay, wasTransit, wasZooms, wasBackground;
|
|
Boolean wasEscPauseKey, wasDemos, wasScreen2, nextRestartChange, wasErrorCheck;
|
|
Boolean wasPrettyMap, wasBitchDialogs;
|
|
|
|
extern short numNeighbors, isDepthPref, maxFiles, willMaxFiles;
|
|
extern Boolean isDoColorFade, isPlayMusicIdle, isUseSecondScreen;
|
|
extern Boolean isHouseChecks, doBitchDialogs;
|
|
extern Boolean isEscPauseKey, failedMusic, isSoundOn, doBackground;
|
|
extern Boolean isMusicOn, quickerTransitions, doAutoDemo;
|
|
extern Boolean changeLockStateOfHouse, saveHouseLocked, doPrettyMap;
|
|
|
|
|
|
//============================================================== Functions
|
|
//-------------------------------------------------------------- SetBrainsToDefaults
|
|
|
|
void SetBrainsToDefaults (DialogPtr theDialog)
|
|
{
|
|
SetDialogNumToStr(theDialog, kMaxFilesItem, 24L);
|
|
#ifdef powerc
|
|
wasTransit = false;
|
|
#else
|
|
wasTransit = true;
|
|
#endif
|
|
wasZooms = true;
|
|
wasDemos = true;
|
|
wasBackground = false;
|
|
wasErrorCheck = true;
|
|
wasPrettyMap = true;
|
|
wasBitchDialogs = true;
|
|
SetDialogItemValue(theDialog, kQuickTransitCheck, (short)wasTransit);
|
|
SetDialogItemValue(theDialog, kDoZoomsCheck, (short)wasZooms);
|
|
SetDialogItemValue(theDialog, kDoDemoCheck, (short)wasDemos);
|
|
SetDialogItemValue(theDialog, kDoBackgroundCheck, (short)wasBackground);
|
|
SetDialogItemValue(theDialog, kDoErrorCheck, (short)wasErrorCheck);
|
|
SetDialogItemValue(theDialog, kDoPrettyMapCheck, (short)wasPrettyMap);
|
|
SetDialogItemValue(theDialog, kDoBitchDlgsCheck, (short)wasBitchDialogs);
|
|
}
|
|
|
|
//-------------------------------------------------------------- UpdateSettingsBrains
|
|
|
|
void UpdateSettingsBrains (DialogPtr theDialog)
|
|
{
|
|
DrawDialog(theDialog);
|
|
DrawDefaultButton(theDialog);
|
|
|
|
SetDialogNumToStr(theDialog, kMaxFilesItem, (long)willMaxFiles);
|
|
SelectDialogItemText(theDialog, kMaxFilesItem, 0, 1024);
|
|
|
|
FrameDialogItemC(theDialog, 3, kRedOrangeColor8);
|
|
}
|
|
|
|
//-------------------------------------------------------------- BrainsFilter
|
|
|
|
pascal Boolean BrainsFilter (DialogPtr dial, EventRecord *event, short *item)
|
|
{
|
|
switch (event->what)
|
|
{
|
|
case keyDown:
|
|
switch ((event->message) & charCodeMask)
|
|
{
|
|
case kReturnKeyASCII:
|
|
case kEnterKeyASCII:
|
|
FlashDialogButton(dial, kOkayButton);
|
|
*item = kOkayButton;
|
|
return(true);
|
|
break;
|
|
|
|
case kEscapeKeyASCII:
|
|
FlashDialogButton(dial, kCancelButton);
|
|
*item = kCancelButton;
|
|
return(true);
|
|
break;
|
|
|
|
case kCapAKeyASCII:
|
|
case kAKeyASCII:
|
|
*item = kDoDemoCheck;
|
|
return(true);
|
|
break;
|
|
|
|
case kCapBKeyASCII:
|
|
case kBKeyASCII:
|
|
*item = kDoBackgroundCheck;
|
|
return(true);
|
|
break;
|
|
|
|
case kCapDKeyASCII:
|
|
case kDKeyASCII:
|
|
*item = kBrainsDefault;
|
|
FlashDialogButton(dial, kBrainsDefault);
|
|
return(true);
|
|
break;
|
|
|
|
case kCapEKeyASCII:
|
|
case kEKeyASCII:
|
|
*item = kDoErrorCheck;
|
|
return(true);
|
|
break;
|
|
|
|
case kCapQKeyASCII:
|
|
case kQKeyASCII:
|
|
*item = kQuickTransitCheck;
|
|
return(true);
|
|
break;
|
|
|
|
case kCapZKeyASCII:
|
|
case kZKeyASCII:
|
|
*item = kDoZoomsCheck;
|
|
return(true);
|
|
break;
|
|
|
|
default:
|
|
return(false);
|
|
}
|
|
break;
|
|
|
|
case mouseDown:
|
|
return(false);
|
|
break;
|
|
|
|
case updateEvt:
|
|
SetPort((GrafPtr)dial);
|
|
BeginUpdate(GetDialogWindow(dial));
|
|
UpdateSettingsBrains(dial);
|
|
EndUpdate(GetDialogWindow(dial));
|
|
event->what = nullEvent;
|
|
return(false);
|
|
break;
|
|
|
|
default:
|
|
return(false);
|
|
break;
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------- DoBrainsPrefs
|
|
|
|
void DoBrainsPrefs (void)
|
|
{
|
|
DialogPtr prefDlg;
|
|
long tempLong;
|
|
short itemHit, wasMaxFiles;
|
|
Boolean leaving;
|
|
ModalFilterUPP brainsFilterUPP;
|
|
|
|
brainsFilterUPP = NewModalFilterUPP(BrainsFilter);
|
|
|
|
BringUpDialog(&prefDlg, kBrainsPrefsDialID);
|
|
leaving = false;
|
|
wasMaxFiles = willMaxFiles;
|
|
|
|
wasTransit = quickerTransitions;
|
|
wasZooms = doZooms;
|
|
wasDemos = doAutoDemo;
|
|
wasBackground = doBackground;
|
|
wasErrorCheck = isHouseChecks;
|
|
wasPrettyMap = doPrettyMap;
|
|
wasBitchDialogs = doBitchDialogs;
|
|
|
|
SetDialogItemValue(prefDlg, kQuickTransitCheck, (short)wasTransit);
|
|
SetDialogItemValue(prefDlg, kDoZoomsCheck, (short)wasZooms);
|
|
SetDialogItemValue(prefDlg, kDoDemoCheck, (short)wasDemos);
|
|
SetDialogItemValue(prefDlg, kDoBackgroundCheck, (short)wasBackground);
|
|
SetDialogItemValue(prefDlg, kDoErrorCheck, (short)wasErrorCheck);
|
|
SetDialogItemValue(prefDlg, kDoPrettyMapCheck, (short)wasPrettyMap);
|
|
SetDialogItemValue(prefDlg, kDoBitchDlgsCheck, (short)wasBitchDialogs);
|
|
|
|
while (!leaving)
|
|
{
|
|
ModalDialog(brainsFilterUPP, &itemHit);
|
|
switch (itemHit)
|
|
{
|
|
case kOkayButton:
|
|
GetDialogNumFromStr(prefDlg, kMaxFilesItem, &tempLong);
|
|
if (tempLong > 500)
|
|
tempLong = 500;
|
|
else if (tempLong < 12)
|
|
tempLong = 12;
|
|
willMaxFiles = tempLong;
|
|
if (willMaxFiles != wasMaxFiles)
|
|
nextRestartChange = true;
|
|
quickerTransitions = wasTransit;
|
|
doZooms = wasZooms;
|
|
doAutoDemo = wasDemos;
|
|
doBackground = wasBackground;
|
|
isHouseChecks = wasErrorCheck;
|
|
doPrettyMap = wasPrettyMap;
|
|
doBitchDialogs = wasBitchDialogs;
|
|
leaving = true;
|
|
break;
|
|
|
|
case kCancelButton:
|
|
willMaxFiles = wasMaxFiles;
|
|
leaving = true;
|
|
break;
|
|
|
|
case kQuickTransitCheck:
|
|
wasTransit = !wasTransit;
|
|
SetDialogItemValue(prefDlg, kQuickTransitCheck, (short)wasTransit);
|
|
break;
|
|
|
|
case kDoZoomsCheck:
|
|
wasZooms = !wasZooms;
|
|
SetDialogItemValue(prefDlg, kDoZoomsCheck, (short)wasZooms);
|
|
break;
|
|
|
|
case kDoDemoCheck:
|
|
wasDemos = !wasDemos;
|
|
SetDialogItemValue(prefDlg, kDoDemoCheck, (short)wasDemos);
|
|
break;
|
|
|
|
case kDoBackgroundCheck:
|
|
wasBackground = !wasBackground;
|
|
SetDialogItemValue(prefDlg, kDoBackgroundCheck, (short)wasBackground);
|
|
break;
|
|
|
|
case kBrainsDefault:
|
|
SetBrainsToDefaults(prefDlg);
|
|
break;
|
|
|
|
case kDoErrorCheck:
|
|
wasErrorCheck = !wasErrorCheck;
|
|
SetDialogItemValue(prefDlg, kDoErrorCheck, (short)wasErrorCheck);
|
|
break;
|
|
|
|
case kDoPrettyMapCheck:
|
|
wasPrettyMap = !wasPrettyMap;
|
|
SetDialogItemValue(prefDlg, kDoPrettyMapCheck, (short)wasPrettyMap);
|
|
break;
|
|
|
|
case kDoBitchDlgsCheck:
|
|
wasBitchDialogs = !wasBitchDialogs;
|
|
SetDialogItemValue(prefDlg, kDoBitchDlgsCheck, (short)wasBitchDialogs);
|
|
break;
|
|
}
|
|
}
|
|
|
|
DisposeDialog(prefDlg);
|
|
DisposeModalFilterUPP(brainsFilterUPP);
|
|
}
|
|
|
|
//-------------------------------------------------------------- SetControlsToDefaults
|
|
|
|
void SetControlsToDefaults (DialogPtr theDialog)
|
|
{
|
|
PasStringCopy("\plf arrow", tempLeftStr);
|
|
PasStringCopy("\prt arrow", tempRightStr);
|
|
PasStringCopy("\pdn arrow", tempBattStr);
|
|
PasStringCopy("\pup arrow", tempBandStr);
|
|
tempLeftMap = kLeftArrowKeyMap;
|
|
tempRightMap = kRightArrowKeyMap;
|
|
tempBattMap = kDownArrowKeyMap;
|
|
tempBandMap = kUpArrowKeyMap;
|
|
wasEscPauseKey = false;
|
|
SelectFromRadioGroup(theDialog, kTABPausesRadio,
|
|
kESCPausesRadio, kTABPausesRadio);
|
|
}
|
|
|
|
//-------------------------------------------------------------- UpdateControlKeyName
|
|
|
|
void UpdateControlKeyName (DialogPtr theDialog)
|
|
{
|
|
DrawDialogUserText(theDialog, kRightControl + 4, tempRightStr, whichCtrl == 0);
|
|
DrawDialogUserText(theDialog, kLeftControl + 4, tempLeftStr, whichCtrl == 1);
|
|
DrawDialogUserText(theDialog, kBattControl + 4, tempBattStr, whichCtrl == 2);
|
|
DrawDialogUserText(theDialog, kBandControl + 4, tempBandStr, whichCtrl == 3);
|
|
}
|
|
|
|
//-------------------------------------------------------------- UpdateSettingsControl
|
|
|
|
void UpdateSettingsControl (DialogPtr theDialog)
|
|
{
|
|
short i;
|
|
|
|
DrawDialog(theDialog);
|
|
|
|
PenSize(2, 2);
|
|
ForeColor(whiteColor);
|
|
for (i = 0; i < 4; i++)
|
|
FrameRect(&controlRects[i]);
|
|
ForeColor(redColor);
|
|
FrameRect(&controlRects[whichCtrl]);
|
|
ForeColor(blackColor);
|
|
PenNormal();
|
|
UpdateControlKeyName(theDialog);
|
|
FrameDialogItemC(theDialog, 3, kRedOrangeColor8);
|
|
}
|
|
|
|
//-------------------------------------------------------------- ControlFilter
|
|
|
|
pascal Boolean ControlFilter (DialogPtr dial, EventRecord *event, short *item)
|
|
{
|
|
long wasKeyMap;
|
|
|
|
switch (event->what)
|
|
{
|
|
case keyDown:
|
|
switch (whichCtrl)
|
|
{
|
|
case 0:
|
|
wasKeyMap = (long)GetKeyMapFromMessage(event->message);
|
|
if ((wasKeyMap == tempLeftMap) || (wasKeyMap == tempBattMap) ||
|
|
(wasKeyMap == tempBandMap) || (wasKeyMap == kTabKeyMap) ||
|
|
(wasKeyMap == kEscKeyMap) || (wasKeyMap == kDeleteKeyMap))
|
|
{
|
|
if (wasKeyMap == kEscKeyMap)
|
|
{
|
|
FlashDialogButton(dial, kCancelButton);
|
|
*item = kCancelButton;
|
|
return(true);
|
|
}
|
|
else
|
|
SysBeep(1);
|
|
}
|
|
else
|
|
{
|
|
GetKeyName(event->message, tempRightStr);
|
|
tempRightMap = wasKeyMap;
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
wasKeyMap = (long)GetKeyMapFromMessage(event->message);
|
|
if ((wasKeyMap == tempRightMap) || (wasKeyMap == tempBattMap) ||
|
|
(wasKeyMap == tempBandMap) || (wasKeyMap == kTabKeyMap) ||
|
|
(wasKeyMap == kEscKeyMap) || (wasKeyMap == kDeleteKeyMap))
|
|
{
|
|
if (wasKeyMap == kEscKeyMap)
|
|
{
|
|
FlashDialogButton(dial, kCancelButton);
|
|
*item = kCancelButton;
|
|
return(true);
|
|
}
|
|
else
|
|
SysBeep(1);
|
|
}
|
|
else
|
|
{
|
|
GetKeyName(event->message, tempLeftStr);
|
|
tempLeftMap = wasKeyMap;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
wasKeyMap = (long)GetKeyMapFromMessage(event->message);
|
|
if ((wasKeyMap == tempRightMap) || (wasKeyMap == tempLeftMap) ||
|
|
(wasKeyMap == tempBandMap) || (wasKeyMap == kTabKeyMap) ||
|
|
(wasKeyMap == kEscKeyMap) || (wasKeyMap == kDeleteKeyMap))
|
|
{
|
|
if (wasKeyMap == kEscKeyMap)
|
|
{
|
|
FlashDialogButton(dial, kCancelButton);
|
|
*item = kCancelButton;
|
|
return(true);
|
|
}
|
|
else
|
|
SysBeep(1);
|
|
}
|
|
else
|
|
{
|
|
GetKeyName(event->message, tempBattStr);
|
|
tempBattMap = wasKeyMap;
|
|
}
|
|
break;
|
|
|
|
case 3:
|
|
wasKeyMap = (long)GetKeyMapFromMessage(event->message);
|
|
if ((wasKeyMap == tempRightMap) || (wasKeyMap == tempLeftMap) ||
|
|
(wasKeyMap == tempBattMap) || (wasKeyMap == kTabKeyMap) ||
|
|
(wasKeyMap == kEscKeyMap) || (wasKeyMap == kDeleteKeyMap))
|
|
{
|
|
if (wasKeyMap == kEscKeyMap)
|
|
{
|
|
FlashDialogButton(dial, kCancelButton);
|
|
*item = kCancelButton;
|
|
return(true);
|
|
}
|
|
else
|
|
SysBeep(1);
|
|
}
|
|
else
|
|
{
|
|
GetKeyName(event->message, tempBandStr);
|
|
tempBandMap = wasKeyMap;
|
|
}
|
|
break;
|
|
}
|
|
UpdateControlKeyName(dial);
|
|
return(false);
|
|
break;
|
|
|
|
case mouseDown:
|
|
return(false);
|
|
break;
|
|
|
|
case updateEvt:
|
|
SetPort((GrafPtr)dial);
|
|
BeginUpdate(GetDialogWindow(dial));
|
|
UpdateSettingsControl(dial);
|
|
EndUpdate(GetDialogWindow(dial));
|
|
event->what = nullEvent;
|
|
return(false);
|
|
break;
|
|
|
|
default:
|
|
return(false);
|
|
break;
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------- DoControlPrefs
|
|
|
|
void DoControlPrefs (void)
|
|
{
|
|
DialogPtr prefDlg;
|
|
short i, itemHit;
|
|
Boolean leaving;
|
|
ModalFilterUPP controlFilterUPP;
|
|
|
|
controlFilterUPP = NewModalFilterUPP(ControlFilter);
|
|
|
|
// CenterDialog(kControlPrefsDialID);
|
|
prefDlg = GetNewDialog(kControlPrefsDialID, nil, kPutInFront);
|
|
if (prefDlg == nil)
|
|
RedAlert(kErrDialogDidntLoad);
|
|
SetPort((GrafPtr)prefDlg);
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
GetDialogItemRect(prefDlg, i + kRightControl, &controlRects[i]);
|
|
InsetRect(&controlRects[i], -3, -3);
|
|
}
|
|
whichCtrl = 1;
|
|
|
|
PasStringCopy(leftName, tempLeftStr);
|
|
PasStringCopy(rightName, tempRightStr);
|
|
PasStringCopy(batteryName, tempBattStr);
|
|
PasStringCopy(bandName, tempBandStr);
|
|
tempLeftMap = theGlider.leftKey;
|
|
tempRightMap = theGlider.rightKey;
|
|
tempBattMap = theGlider.battKey;
|
|
tempBandMap = theGlider.bandKey;
|
|
wasEscPauseKey = isEscPauseKey;
|
|
|
|
leaving = false;
|
|
|
|
ShowWindow(GetDialogWindow(prefDlg));
|
|
if (isEscPauseKey)
|
|
SelectFromRadioGroup(prefDlg, kESCPausesRadio,
|
|
kESCPausesRadio, kTABPausesRadio);
|
|
else
|
|
SelectFromRadioGroup(prefDlg, kTABPausesRadio,
|
|
kESCPausesRadio, kTABPausesRadio);
|
|
|
|
while (!leaving)
|
|
{
|
|
ModalDialog(controlFilterUPP, &itemHit);
|
|
switch (itemHit)
|
|
{
|
|
case kOkayButton:
|
|
PasStringCopy(tempLeftStr, leftName);
|
|
PasStringCopy(tempRightStr, rightName);
|
|
PasStringCopy(tempBattStr, batteryName);
|
|
PasStringCopy(tempBandStr, bandName);
|
|
theGlider.leftKey = tempLeftMap;
|
|
theGlider.rightKey = tempRightMap;
|
|
theGlider.battKey = tempBattMap;
|
|
theGlider.bandKey = tempBandMap;
|
|
isEscPauseKey = wasEscPauseKey;
|
|
leaving = true;
|
|
break;
|
|
|
|
case kCancelButton:
|
|
leaving = true;
|
|
break;
|
|
|
|
case kRightControl:
|
|
case kLeftControl:
|
|
case kBattControl:
|
|
case kBandControl:
|
|
PenSize(2, 2);
|
|
ForeColor(whiteColor);
|
|
FrameRect(&controlRects[whichCtrl]);
|
|
whichCtrl = itemHit - kRightControl;
|
|
ForeColor(redColor);
|
|
FrameRect(&controlRects[whichCtrl]);
|
|
ForeColor(blackColor);
|
|
PenNormal();
|
|
UpdateControlKeyName(prefDlg);
|
|
break;
|
|
|
|
case kESCPausesRadio:
|
|
case kTABPausesRadio:
|
|
SelectFromRadioGroup(prefDlg, itemHit, kESCPausesRadio, kTABPausesRadio);
|
|
wasEscPauseKey = !wasEscPauseKey;
|
|
break;
|
|
|
|
case kControlDefaults:
|
|
SetControlsToDefaults(prefDlg);
|
|
UpdateControlKeyName(prefDlg);
|
|
break;
|
|
}
|
|
}
|
|
|
|
DisposeDialog(prefDlg);
|
|
DisposeModalFilterUPP(controlFilterUPP);
|
|
}
|
|
|
|
//-------------------------------------------------------------- SoundDefaults
|
|
|
|
void SoundDefaults (DialogPtr theDialog)
|
|
{
|
|
wasIdle = true;
|
|
wasPlay = true;
|
|
SetDialogItemValue(theDialog, kIdleMusicItem, (short)wasIdle);
|
|
SetDialogItemValue(theDialog, kPlayMusicItem, (short)wasPlay);
|
|
UnivSetSoundVolume(3, thisMac.hasSM3);
|
|
SetDialogNumToStr(theDialog, kVolNumberItem, 3L);
|
|
HandleSoundMusicChange(3, true);
|
|
}
|
|
|
|
//-------------------------------------------------------------- UpdateSettingsSound
|
|
|
|
void UpdateSettingsSound (DialogPtr theDialog)
|
|
{
|
|
short howLoudNow;
|
|
|
|
DrawDialog(theDialog);
|
|
DrawDefaultButton(theDialog);
|
|
|
|
UnivGetSoundVolume(&howLoudNow, thisMac.hasSM3);
|
|
|
|
if (howLoudNow >= 7)
|
|
SetDialogNumToStr(theDialog, kVolNumberItem, 11L);
|
|
else
|
|
SetDialogNumToStr(theDialog, kVolNumberItem, (long)howLoudNow);
|
|
|
|
FrameDialogItemC(theDialog, 11, kRedOrangeColor8);
|
|
}
|
|
|
|
//-------------------------------------------------------------- HandleSoundMusicChange
|
|
|
|
void HandleSoundMusicChange (short newVolume, Boolean sayIt)
|
|
{
|
|
OSErr theErr;
|
|
|
|
isSoundOn = (newVolume != 0);
|
|
|
|
if (wasIdle)
|
|
{
|
|
if (newVolume == 0)
|
|
StopTheMusic();
|
|
else
|
|
{
|
|
if (!isMusicOn)
|
|
{
|
|
theErr = StartMusic();
|
|
if (theErr != noErr)
|
|
{
|
|
YellowAlert(kYellowNoMusic, theErr);
|
|
failedMusic = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ((newVolume != 0) && (sayIt))
|
|
PlayPrioritySound(kChord2Sound, kChord2Priority);
|
|
}
|
|
|
|
//-------------------------------------------------------------- SoundFilter
|
|
|
|
pascal Boolean SoundFilter (DialogPtr dial, EventRecord *event, short *item)
|
|
{
|
|
short newVolume;
|
|
|
|
switch (event->what)
|
|
{
|
|
case keyDown:
|
|
switch ((event->message) & charCodeMask)
|
|
{
|
|
case kReturnKeyASCII:
|
|
case kEnterKeyASCII:
|
|
FlashDialogButton(dial, kOkayButton);
|
|
*item = kOkayButton;
|
|
return(true);
|
|
break;
|
|
|
|
case kEscapeKeyASCII:
|
|
FlashDialogButton(dial, kCancelButton);
|
|
*item = kCancelButton;
|
|
return(true);
|
|
break;
|
|
|
|
case kUpArrowKeyASCII:
|
|
*item = kLouderItem;
|
|
return(true);
|
|
break;
|
|
|
|
case kDownArrowKeyASCII:
|
|
*item = kSofterItem;
|
|
return(true);
|
|
break;
|
|
|
|
case k0KeyASCII:
|
|
case k1KeyASCII:
|
|
case k2KeyASCII:
|
|
case k3KeyASCII:
|
|
case k4KeyASCII:
|
|
case k5KeyASCII:
|
|
case k6KeyASCII:
|
|
case k7KeyASCII:
|
|
newVolume = (((event->message) & charCodeMask) - k0KeyASCII);
|
|
if (newVolume == 7L)
|
|
SetDialogNumToStr(dial, kVolNumberItem, 11L);
|
|
else
|
|
SetDialogNumToStr(dial, kVolNumberItem, (long)newVolume);
|
|
|
|
UnivSetSoundVolume(newVolume, thisMac.hasSM3);
|
|
|
|
HandleSoundMusicChange(newVolume, true);
|
|
return(false);
|
|
break;
|
|
|
|
case kCapDKeyASCII:
|
|
case kDKeyASCII:
|
|
*item = kSoundDefault;
|
|
FlashDialogButton(dial, kSoundDefault);
|
|
return(true);
|
|
break;
|
|
|
|
case kCapGKeyASCII:
|
|
case kGKeyASCII:
|
|
*item = kPlayMusicItem;
|
|
return(true);
|
|
break;
|
|
|
|
case kCapIKeyASCII:
|
|
case kIKeyASCII:
|
|
*item = kIdleMusicItem;
|
|
return(true);
|
|
break;
|
|
|
|
default:
|
|
return(false);
|
|
}
|
|
break;
|
|
|
|
case mouseDown:
|
|
return(false);
|
|
break;
|
|
|
|
case updateEvt:
|
|
SetPort((GrafPtr)dial);
|
|
BeginUpdate(GetDialogWindow(dial));
|
|
UpdateSettingsSound(dial);
|
|
EndUpdate(GetDialogWindow(dial));
|
|
event->what = nullEvent;
|
|
return(false);
|
|
break;
|
|
|
|
default:
|
|
return(false);
|
|
break;
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------- DoSettingsMain
|
|
|
|
void DoSoundPrefs (void)
|
|
{
|
|
Rect tempRect;
|
|
DialogPtr prefDlg;
|
|
short wasLoudness, tempVolume;
|
|
OSErr theErr;
|
|
short itemHit;
|
|
Boolean leaving;
|
|
ModalFilterUPP soundFilterUPP;
|
|
|
|
soundFilterUPP = NewModalFilterUPP(SoundFilter);
|
|
|
|
BringUpDialog(&prefDlg, kSoundPrefsDialID);
|
|
|
|
UnivGetSoundVolume(&wasLoudness, thisMac.hasSM3);
|
|
|
|
wasIdle = isPlayMusicIdle;
|
|
wasPlay = isPlayMusicGame;
|
|
SetDialogItemValue(prefDlg, kIdleMusicItem, (short)wasIdle);
|
|
SetDialogItemValue(prefDlg, kPlayMusicItem, (short)wasPlay);
|
|
leaving = false;
|
|
|
|
while (!leaving)
|
|
{
|
|
ModalDialog(soundFilterUPP, &itemHit);
|
|
switch (itemHit)
|
|
{
|
|
case kOkayButton:
|
|
isPlayMusicIdle = wasIdle;
|
|
isPlayMusicGame = wasPlay;
|
|
leaving = true;
|
|
UnivGetSoundVolume(&tempVolume, thisMac.hasSM3);
|
|
isSoundOn = (tempVolume != 0);
|
|
break;
|
|
|
|
case kCancelButton:
|
|
UnivSetSoundVolume(wasLoudness, thisMac.hasSM3);
|
|
HandleSoundMusicChange(wasLoudness, false);
|
|
if (isPlayMusicIdle != wasIdle)
|
|
{
|
|
if (isPlayMusicIdle)
|
|
{
|
|
if (wasLoudness != 0)
|
|
{
|
|
theErr = StartMusic();
|
|
if (theErr != noErr)
|
|
{
|
|
YellowAlert(kYellowNoMusic, theErr);
|
|
failedMusic = true;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
StopTheMusic();
|
|
}
|
|
leaving = true;
|
|
break;
|
|
|
|
case kSofterItem:
|
|
UnivGetSoundVolume(&tempVolume, thisMac.hasSM3);
|
|
if (tempVolume > 0)
|
|
{
|
|
GetDialogItemRect(prefDlg, kSofterItem, &tempRect);
|
|
DrawCIcon(1034, tempRect.left, tempRect.top);
|
|
tempVolume--;
|
|
SetDialogNumToStr(prefDlg, kVolNumberItem, (long)tempVolume);
|
|
UnivSetSoundVolume(tempVolume, thisMac.hasSM3);
|
|
HandleSoundMusicChange(tempVolume, true);
|
|
InvalWindowRect(GetDialogWindow(prefDlg), &tempRect);
|
|
DelayTicks(8);
|
|
}
|
|
break;
|
|
|
|
case kLouderItem:
|
|
UnivGetSoundVolume(&tempVolume, thisMac.hasSM3);
|
|
if (tempVolume < 7)
|
|
{
|
|
GetDialogItemRect(prefDlg, kLouderItem, &tempRect);
|
|
DrawCIcon(1033, tempRect.left, tempRect.top);
|
|
tempVolume++;
|
|
if (tempVolume == 7)
|
|
SetDialogNumToStr(prefDlg, kVolNumberItem, 11L);
|
|
else
|
|
SetDialogNumToStr(prefDlg, kVolNumberItem, tempVolume);
|
|
UnivSetSoundVolume(tempVolume, thisMac.hasSM3);
|
|
HandleSoundMusicChange(tempVolume, true);
|
|
InvalWindowRect(GetDialogWindow(prefDlg), &tempRect);
|
|
DelayTicks(8);
|
|
}
|
|
break;
|
|
|
|
case kIdleMusicItem:
|
|
wasIdle = !wasIdle;
|
|
SetDialogItemValue(prefDlg, kIdleMusicItem, (short)wasIdle);
|
|
if (wasIdle)
|
|
{
|
|
UnivGetSoundVolume(&tempVolume, thisMac.hasSM3);
|
|
if (tempVolume != 0)
|
|
{
|
|
theErr = StartMusic();
|
|
if (theErr != noErr)
|
|
{
|
|
YellowAlert(kYellowNoMusic, theErr);
|
|
failedMusic = true;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
StopTheMusic();
|
|
break;
|
|
|
|
case kPlayMusicItem:
|
|
wasPlay = !wasPlay;
|
|
SetDialogItemValue(prefDlg, kPlayMusicItem, (short)wasPlay);
|
|
break;
|
|
|
|
case kSoundDefault:
|
|
SoundDefaults(prefDlg);
|
|
break;
|
|
}
|
|
}
|
|
|
|
DisposeDialog(prefDlg);
|
|
DisposeModalFilterUPP(soundFilterUPP);
|
|
}
|
|
|
|
//-------------------------------------------------------------- DisplayDefaults
|
|
|
|
void DisplayDefaults (void)
|
|
{
|
|
numNeighbors = 9;
|
|
wasDepthPref = kSwitchIfNeeded;
|
|
wasFade = true;
|
|
wasScreen2 = false;
|
|
}
|
|
|
|
//-------------------------------------------------------------- FrameDisplayIcon
|
|
|
|
void FrameDisplayIcon (DialogPtr theDialog)
|
|
{
|
|
Rect theRect;
|
|
|
|
switch (numNeighbors)
|
|
{
|
|
case 1:
|
|
GetDialogItemRect(theDialog, kDisplay1Item, &theRect);
|
|
break;
|
|
|
|
case 3:
|
|
GetDialogItemRect(theDialog, kDisplay3Item, &theRect);
|
|
break;
|
|
|
|
default:
|
|
GetDialogItemRect(theDialog, kDisplay9Item, &theRect);
|
|
break;
|
|
}
|
|
|
|
theRect.left -= 3;
|
|
theRect.top += 0;
|
|
theRect.right += 3;
|
|
theRect.bottom -= 1;
|
|
FrameRect(&theRect);
|
|
InsetRect(&theRect, 1, 1);
|
|
FrameRect(&theRect);
|
|
}
|
|
|
|
//-------------------------------------------------------------- DisplayUpdate
|
|
|
|
void DisplayUpdate (DialogPtr theDialog)
|
|
{
|
|
DrawDialog(theDialog);
|
|
DrawDefaultButton(theDialog);
|
|
|
|
SetDialogItemValue(theDialog, kDoColorFadeItem, (short)wasFade);
|
|
SelectFromRadioGroup(theDialog, kCurrentDepth + wasDepthPref,
|
|
kCurrentDepth, k16Depth);
|
|
// SetDialogItemValue(theDialog, kUseQDItem, (short)wasQD);
|
|
SetDialogItemValue(theDialog, kUseScreen2Item, (short)wasScreen2);
|
|
|
|
ForeColor(redColor);
|
|
FrameDisplayIcon(theDialog);
|
|
ForeColor(blackColor);
|
|
FrameDialogItemC(theDialog, 8, kRedOrangeColor8);
|
|
FrameDialogItemC(theDialog, 13, kRedOrangeColor8);
|
|
FrameDialogItemC(theDialog, 14, kRedOrangeColor8);
|
|
}
|
|
|
|
//-------------------------------------------------------------- DisplayFilter
|
|
|
|
pascal Boolean DisplayFilter (DialogPtr dial, EventRecord *event, short *item)
|
|
{
|
|
switch (event->what)
|
|
{
|
|
case keyDown:
|
|
switch ((event->message) & charCodeMask)
|
|
{
|
|
case kReturnKeyASCII:
|
|
case kEnterKeyASCII:
|
|
FlashDialogButton(dial, kOkayButton);
|
|
*item = kOkayButton;
|
|
return(true);
|
|
break;
|
|
|
|
case kEscapeKeyASCII:
|
|
FlashDialogButton(dial, kCancelButton);
|
|
*item = kCancelButton;
|
|
return(true);
|
|
break;
|
|
|
|
case kLeftArrowKeyASCII:
|
|
switch (numNeighbors)
|
|
{
|
|
case 1:
|
|
*item = kDisplay9Item;
|
|
break;
|
|
|
|
case 3:
|
|
*item = kDisplay1Item;
|
|
break;
|
|
|
|
case 9:
|
|
*item = kDisplay3Item;
|
|
break;
|
|
}
|
|
return(true);
|
|
break;
|
|
|
|
case kRightArrowKeyASCII:
|
|
switch (numNeighbors)
|
|
{
|
|
case 1:
|
|
*item = kDisplay3Item;
|
|
break;
|
|
|
|
case 3:
|
|
*item = kDisplay9Item;
|
|
break;
|
|
|
|
case 9:
|
|
*item = kDisplay1Item;
|
|
break;
|
|
}
|
|
return(true);
|
|
break;
|
|
|
|
case kUpArrowKeyASCII:
|
|
switch (wasDepthPref)
|
|
{
|
|
case kSwitchIfNeeded:
|
|
*item = k16Depth;
|
|
break;
|
|
|
|
case kSwitchTo256Colors:
|
|
*item = kCurrentDepth;
|
|
break;
|
|
|
|
case kSwitchTo16Grays:
|
|
*item = k256Depth;
|
|
break;
|
|
}
|
|
return(true);
|
|
break;
|
|
|
|
case kDownArrowKeyASCII:
|
|
switch (wasDepthPref)
|
|
{
|
|
case kSwitchIfNeeded:
|
|
*item = k256Depth;
|
|
break;
|
|
|
|
case kSwitchTo256Colors:
|
|
*item = k16Depth;
|
|
break;
|
|
|
|
case kSwitchTo16Grays:
|
|
*item = kCurrentDepth;
|
|
break;
|
|
}
|
|
return(true);
|
|
break;
|
|
|
|
case k1KeyASCII:
|
|
*item = kDisplay1Item;
|
|
return(true);
|
|
break;
|
|
|
|
case k3KeyASCII:
|
|
*item = kDisplay3Item;
|
|
return(true);
|
|
break;
|
|
|
|
case k9KeyASCII:
|
|
*item = kDisplay9Item;
|
|
return(true);
|
|
break;
|
|
|
|
case kCapBKeyASCII:
|
|
case kBKeyASCII:
|
|
*item = kDoColorFadeItem;
|
|
return(true);
|
|
break;
|
|
|
|
case kCapDKeyASCII:
|
|
case kDKeyASCII:
|
|
*item = kDispDefault;
|
|
FlashDialogButton(dial, kDispDefault);
|
|
return(true);
|
|
break;
|
|
|
|
case kCapRKeyASCII:
|
|
case kRKeyASCII:
|
|
*item = kUseScreen2Item;
|
|
FlashDialogButton(dial, kUseQDItem);
|
|
return(true);
|
|
break;
|
|
|
|
case kCapUKeyASCII:
|
|
case kUKeyASCII:
|
|
*item = kUseQDItem;
|
|
return(true);
|
|
break;
|
|
|
|
default:
|
|
return(false);
|
|
}
|
|
break;
|
|
|
|
case mouseDown:
|
|
return(false);
|
|
break;
|
|
|
|
case updateEvt:
|
|
SetPort((GrafPtr)dial);
|
|
BeginUpdate(GetDialogWindow(dial));
|
|
DisplayUpdate(dial);
|
|
EndUpdate(GetDialogWindow(dial));
|
|
event->what = nullEvent;
|
|
return(false);
|
|
break;
|
|
|
|
default:
|
|
return(false);
|
|
break;
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------- DoDisplayPrefs
|
|
|
|
void DoDisplayPrefs (void)
|
|
{
|
|
DialogPtr prefDlg;
|
|
short itemHit, wasNeighbors;
|
|
Boolean leaving;
|
|
ModalFilterUPP displayFilterUPP;
|
|
|
|
displayFilterUPP = NewModalFilterUPP(DisplayFilter);
|
|
|
|
BringUpDialog(&prefDlg, kDisplayPrefsDialID);
|
|
if (!thisMac.can8Bit)
|
|
{
|
|
MyDisableControl(prefDlg, kDoColorFadeItem);
|
|
MyDisableControl(prefDlg, k256Depth);
|
|
}
|
|
if (!thisMac.can4Bit)
|
|
MyDisableControl(prefDlg, k16Depth);
|
|
if (thisMac.numScreens < 2)
|
|
MyDisableControl(prefDlg, kUseScreen2Item);
|
|
wasNeighbors = numNeighbors;
|
|
wasFade = isDoColorFade;
|
|
wasDepthPref = isDepthPref;
|
|
wasScreen2 = isUseSecondScreen;
|
|
leaving = false;
|
|
|
|
while (!leaving)
|
|
{
|
|
ModalDialog(displayFilterUPP, &itemHit);
|
|
switch (itemHit)
|
|
{
|
|
case kOkayButton:
|
|
isDoColorFade = wasFade;
|
|
isDepthPref = wasDepthPref;
|
|
if (isUseSecondScreen != wasScreen2)
|
|
nextRestartChange = true;
|
|
isUseSecondScreen = wasScreen2;
|
|
leaving = true;
|
|
break;
|
|
|
|
case kCancelButton:
|
|
numNeighbors = wasNeighbors;
|
|
leaving = true;
|
|
break;
|
|
|
|
case kDisplay1Item:
|
|
ForeColor(whiteColor);
|
|
FrameDisplayIcon(prefDlg);
|
|
numNeighbors = 1;
|
|
ForeColor(redColor);
|
|
FrameDisplayIcon(prefDlg);
|
|
ForeColor(blackColor);
|
|
break;
|
|
|
|
case kDisplay3Item:
|
|
if (thisMac.screen.right > 512)
|
|
{
|
|
ForeColor(whiteColor);
|
|
FrameDisplayIcon(prefDlg);
|
|
numNeighbors = 3;
|
|
ForeColor(redColor);
|
|
FrameDisplayIcon(prefDlg);
|
|
ForeColor(blackColor);
|
|
}
|
|
break;
|
|
|
|
case kDisplay9Item:
|
|
if (thisMac.screen.right > 512)
|
|
{
|
|
ForeColor(whiteColor);
|
|
FrameDisplayIcon(prefDlg);
|
|
numNeighbors = 9;
|
|
ForeColor(redColor);
|
|
FrameDisplayIcon(prefDlg);
|
|
ForeColor(blackColor);
|
|
}
|
|
break;
|
|
|
|
case kDoColorFadeItem:
|
|
wasFade = !wasFade;
|
|
SetDialogItemValue(prefDlg, kDoColorFadeItem, (short)wasFade);
|
|
break;
|
|
|
|
case kCurrentDepth:
|
|
case k256Depth:
|
|
case k16Depth:
|
|
wasDepthPref = itemHit - kCurrentDepth;
|
|
SelectFromRadioGroup(prefDlg, itemHit, kCurrentDepth, k16Depth);
|
|
break;
|
|
|
|
case kDispDefault:
|
|
ForeColor(whiteColor);
|
|
FrameDisplayIcon(prefDlg);
|
|
ForeColor(blackColor);
|
|
DisplayDefaults();
|
|
DisplayUpdate(prefDlg);
|
|
break;
|
|
|
|
case kUseQDItem:
|
|
// wasQD = !wasQD;
|
|
// SetDialogItemValue(prefDlg, kUseQDItem, (short)wasQD);
|
|
break;
|
|
|
|
case kUseScreen2Item:
|
|
wasScreen2 = !wasScreen2;
|
|
SetDialogItemValue(prefDlg, kUseScreen2Item, (short)wasScreen2);
|
|
break;
|
|
}
|
|
}
|
|
|
|
DisposeDialog(prefDlg);
|
|
DisposeModalFilterUPP(displayFilterUPP);
|
|
}
|
|
|
|
//-------------------------------------------------------------- SetAllDefaults
|
|
|
|
void SetAllDefaults (void)
|
|
{
|
|
OSErr theErr;
|
|
// Default brain settings
|
|
willMaxFiles = 48;
|
|
doZooms = true;
|
|
doAutoDemo = true;
|
|
doBackground = false;
|
|
isHouseChecks = true;
|
|
doPrettyMap = true;
|
|
doBitchDialogs = true;
|
|
// Default control settings
|
|
PasStringCopy("\plf arrow", leftName);
|
|
PasStringCopy("\prt arrow", rightName);
|
|
PasStringCopy("\pdn arrow", batteryName);
|
|
PasStringCopy("\pup arrow", bandName);
|
|
theGlider.leftKey = kLeftArrowKeyMap;
|
|
theGlider.rightKey = kRightArrowKeyMap;
|
|
theGlider.battKey = kDownArrowKeyMap;
|
|
theGlider.bandKey = kUpArrowKeyMap;
|
|
isEscPauseKey = false;
|
|
// Default sound settings
|
|
isPlayMusicIdle = true;
|
|
isPlayMusicGame = true;
|
|
UnivSetSoundVolume(3, thisMac.hasSM3);
|
|
isSoundOn = true;
|
|
if (!isMusicOn)
|
|
{
|
|
theErr = StartMusic();
|
|
if (theErr != noErr)
|
|
{
|
|
YellowAlert(kYellowNoMusic, theErr);
|
|
failedMusic = true;
|
|
}
|
|
}
|
|
// Default display settings
|
|
numNeighbors = 9;
|
|
quickerTransitions = false;
|
|
isDepthPref = kSwitchIfNeeded;
|
|
isDoColorFade = true;
|
|
}
|
|
|
|
//-------------------------------------------------------------- FlashSettingsButton
|
|
|
|
void FlashSettingsButton (short who)
|
|
{
|
|
#define kNormalSettingsIcon 1010
|
|
#define kInvertedSettingsIcon 1014
|
|
short theID;
|
|
|
|
theID = kInvertedSettingsIcon + who;
|
|
DrawCIcon (theID, prefButton[who].left + 4, prefButton[who].top + 4);
|
|
DelayTicks(8);
|
|
theID = kNormalSettingsIcon + who;
|
|
DrawCIcon (theID, prefButton[who].left + 4, prefButton[who].top + 4);
|
|
}
|
|
|
|
//-------------------------------------------------------------- UpdateSettingsMain
|
|
|
|
void UpdateSettingsMain (DialogPtr theDialog)
|
|
{
|
|
Str255 theStr;
|
|
|
|
DrawDialog(theDialog);
|
|
|
|
DrawDefaultButton(theDialog);
|
|
|
|
GetIndString(theStr, 129, 1);
|
|
DrawDialogUserText(theDialog, 7, theStr, false);
|
|
GetIndString(theStr, 129, 2);
|
|
DrawDialogUserText(theDialog, 8, theStr, false);
|
|
GetIndString(theStr, 129, 3);
|
|
DrawDialogUserText(theDialog, 9, theStr, false);
|
|
GetIndString(theStr, 129, 4);
|
|
DrawDialogUserText(theDialog, 10, theStr, false);
|
|
|
|
ColorFrameRect(&prefButton[0], kRedOrangeColor8);
|
|
ColorFrameRect(&prefButton[1], kRedOrangeColor8);
|
|
ColorFrameRect(&prefButton[2], kRedOrangeColor8);
|
|
ColorFrameRect(&prefButton[3], kRedOrangeColor8);
|
|
}
|
|
|
|
//-------------------------------------------------------------- PrefsFilter
|
|
|
|
pascal Boolean PrefsFilter (DialogPtr dial, EventRecord *event, short *item)
|
|
{
|
|
Point testPt;
|
|
short i;
|
|
Boolean foundHit;
|
|
|
|
switch (event->what)
|
|
{
|
|
case keyDown:
|
|
switch ((event->message) & charCodeMask)
|
|
{
|
|
case kReturnKeyASCII:
|
|
case kEnterKeyASCII:
|
|
FlashDialogButton(dial, kOkayButton);
|
|
*item = kOkayButton;
|
|
return(true);
|
|
break;
|
|
|
|
case kCapBKeyASCII:
|
|
case kBKeyASCII:
|
|
*item = kBrainsButton;
|
|
return(true);
|
|
break;
|
|
|
|
case kCapCKeyASCII:
|
|
case kCKeyASCII:
|
|
*item = kControlsButton;
|
|
return(true);
|
|
break;
|
|
|
|
case kCapDKeyASCII:
|
|
case kDKeyASCII:
|
|
*item = kDisplayButton;
|
|
return(true);
|
|
break;
|
|
|
|
case kCapSKeyASCII:
|
|
case kSKeyASCII:
|
|
*item = kSoundButton;
|
|
return(true);
|
|
break;
|
|
|
|
default:
|
|
return(false);
|
|
}
|
|
break;
|
|
|
|
case mouseDown:
|
|
testPt = event->where;
|
|
GlobalToLocal(&testPt);
|
|
foundHit = false;
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
if (PtInRect(testPt, &prefButton[i]))
|
|
{
|
|
*item = kDisplayButton + i;
|
|
foundHit = true;
|
|
}
|
|
}
|
|
return(foundHit);
|
|
break;
|
|
|
|
case updateEvt:
|
|
if ((WindowPtr)event->message == (WindowPtr)mainWindow)
|
|
{
|
|
SetPortWindowPort(mainWindow);
|
|
BeginUpdate(mainWindow);
|
|
UpdateMainWindow();
|
|
EndUpdate(mainWindow);
|
|
SetPort((GrafPtr)dial);
|
|
}
|
|
else if ((WindowPtr)event->message == GetDialogWindow(dial))
|
|
{
|
|
SetPortDialogPort(dial);
|
|
BeginUpdate(GetDialogWindow(dial));
|
|
UpdateSettingsMain(dial);
|
|
EndUpdate(GetDialogWindow(dial));
|
|
}
|
|
event->what = nullEvent;
|
|
return(false);
|
|
break;
|
|
|
|
default:
|
|
return(false);
|
|
break;
|
|
}
|
|
}
|
|
|
|
//-------------------------------------------------------------- DoSettingsMain
|
|
|
|
void DoSettingsMain (void)
|
|
{
|
|
#define kAllDefaultsButton 11
|
|
DialogPtr prefDlg;
|
|
short itemHit;
|
|
Boolean leaving;
|
|
ModalFilterUPP prefsFilterUPP;
|
|
|
|
prefsFilterUPP = NewModalFilterUPP(PrefsFilter);
|
|
|
|
BringUpDialog(&prefDlg, kMainPrefsDialID);
|
|
|
|
GetDialogItemRect(prefDlg, kDisplayButton, &prefButton[0]);
|
|
InsetRect(&prefButton[0], -4, -4);
|
|
GetDialogItemRect(prefDlg, 4, &prefButton[1]);
|
|
InsetRect(&prefButton[1], -4, -4);
|
|
GetDialogItemRect(prefDlg, 5, &prefButton[2]);
|
|
InsetRect(&prefButton[2], -4, -4);
|
|
GetDialogItemRect(prefDlg, 6, &prefButton[3]);
|
|
InsetRect(&prefButton[3], -4, -4);
|
|
|
|
leaving = false;
|
|
nextRestartChange = false;
|
|
|
|
while (!leaving)
|
|
{
|
|
ModalDialog(prefsFilterUPP, &itemHit);
|
|
switch (itemHit)
|
|
{
|
|
case kOkayButton:
|
|
leaving = true;
|
|
break;
|
|
|
|
case kDisplayButton:
|
|
FlashSettingsButton(0);
|
|
DoDisplayPrefs();
|
|
SetPort((GrafPtr)prefDlg);
|
|
break;
|
|
|
|
case kSoundButton:
|
|
FlashSettingsButton(1);
|
|
DoSoundPrefs();
|
|
SetPort((GrafPtr)prefDlg);
|
|
FlushEvents(everyEvent, 0);
|
|
break;
|
|
|
|
case kControlsButton:
|
|
FlashSettingsButton(2);
|
|
DoControlPrefs();
|
|
SetPort((GrafPtr)prefDlg);
|
|
break;
|
|
|
|
case kBrainsButton:
|
|
if ((OptionKeyDown()) && (!houseUnlocked))
|
|
{
|
|
houseUnlocked = true;
|
|
changeLockStateOfHouse = true;
|
|
saveHouseLocked = false;
|
|
}
|
|
FlashSettingsButton(3);
|
|
DoBrainsPrefs();
|
|
SetPort((GrafPtr)prefDlg);
|
|
break;
|
|
|
|
case kAllDefaultsButton:
|
|
SetAllDefaults();
|
|
break;
|
|
}
|
|
}
|
|
|
|
DisposeDialog(prefDlg);
|
|
DisposeModalFilterUPP(prefsFilterUPP);
|
|
|
|
if (nextRestartChange)
|
|
BitchAboutChanges();
|
|
}
|
|
|
|
//-------------------------------------------------------------- BitchAboutChanges
|
|
|
|
void BitchAboutChanges (void)
|
|
{
|
|
#define kChangesEffectAlert 1040
|
|
short hitWhat;
|
|
|
|
// CenterAlert(kChangesEffectAlert);
|
|
hitWhat = Alert(kChangesEffectAlert, nil);
|
|
}
|
|
|