home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-03-08 | 5.5 KB | 212 lines | [TEXT/PJMM] |
- unit Prefs;
-
- interface
- uses
- Quickdraw, Picker, Palettes, Globs, DlogStuff, WindowStuff;
-
- const
- k_PrefsResID = 128;
- k_PrefsResType = 'prf1';
-
- procedure RewritePrefs (prefs: PrefRec);
- procedure SetUpPrefs (var prefs: PrefRec);
- procedure PrefsDLOG;
-
- implementation
-
- {======================================================================================= }
- function AddNewPrefs (var aPrefHdl: PrefHdl): Boolean;
- var
- err: OSerr;
- aHandle: Handle;
- begin
- AddNewPrefs := FALSE;
- aPrefHdl := nil;
-
- aPrefHdl := PrefHdl(NewHandle(sizeof(PrefRec)));
-
- HNoPurge(Handle(aPrefHdl));
- MoveHHi(Handle(aPrefHdl));
- HLock(Handle(aPrefHdl));
- AddResource(Handle(aPrefHdl), k_PrefsResType, k_PrefsResID, 'Prefs');
- err := ResError;
-
- if (aPrefHdl = nil) or (err <> noErr) then {AddNewPrefs failed!}
- begin
- DisposeHandle(Handle(aPrefHdl));
- exit(AddNewPrefs);
- end;
- WriteResource(Handle(aPrefHdl));
- err := ResError;
- if err <> noErr then
- exit(AddNewPrefs);
-
- Hunlock(Handle(aPrefHdl));
- AddNewPrefs := TRUE;
-
- end;{AddNewPrefs}
-
- {======================================================================================= }
- { procedure RewritePrefs (prefs: PrefRec);}
- procedure RewritePrefs (prefs: PrefRec);
- var
- err: integer;
- aPrefHdl: PrefHdl;
- begin
- UseResFile(appResFileRef); {just in case it got changed somehow…}
- aPrefHdl := PrefHdl(GetResource(k_PrefsResType, k_PrefsResID));
- err := ResError;
- if (aPrefHdl = nil) or (err <> noErr) then
- if not AddNewPrefs(aPrefHdl) then
- exit(RewritePrefs);
-
- {stuff our pref values into the resource's handle}
- aPrefHdl^^.def_alwaysDraw := prefs.def_alwaysDraw;
- aPrefHdl^^.def_alwaysGrowBox := prefs.def_alwaysGrowBox;
- aPrefHdl^^.def_alwaysStatBox := prefs.def_alwaysStatBox;
-
- ChangedResource(Handle(aPrefHdl));
- err := ResError;
- if err = noErr then
- WriteResource(Handle(aPrefHdl));
- err := ResError;
- if err <> noErr then
- SysBeep(1);
-
- DisposHandle(Handle(aPrefHdl));
- end;{RewritePrefs}
-
-
- {======================================================================================= }
- procedure InitPrefs (var thePrefs: PrefRec);
- begin
- thePrefs.def_alwaysDraw := TRUE;
- thePrefs.def_alwaysGrowBox := TRUE;
- thePrefs.def_alwaysStatBox := TRUE;
- end;
-
-
- {======================================================================================= }
- { procedure SetUpPrefs (var prefs: PrefRec);}
- procedure SetUpPrefs;
- var
- err: OSerr;
- aPrefHdl: PrefHdl;
- begin
- InitPrefs(prefs); {make sure, no matter what, that we have valid values}
-
- UseResFile(appResFileRef); {just in case it got changed somehow…}
- aPrefHdl := PrefHdl(GetResource(k_PrefsResType, k_PrefsResID));
- err := ResError;
- if (aPrefHdl = nil) or (err <> noErr) then {failed to get resource}
- exit(SetUpPrefs); {so exit and just use the defaults}
-
- {here is where we suck the marrow out of our resource-based prefs and store it in our humble, global prefs record}
- prefs.def_alwaysDraw := aPrefHdl^^.def_alwaysDraw;
- prefs.def_alwaysGrowBox := aPrefHdl^^.def_alwaysGrowBox;
- prefs.def_alwaysStatBox := aPrefHdl^^.def_alwaysStatBox;
-
- DisposHandle(Handle(aPrefHdl));
-
- end; {SetUpPrefs}
-
-
-
-
- {======================================================================================= }
- procedure PrefsDLOG;
- const
- PrefsDLOGID = 402;
-
- Draw_Chk = 4;
- Grow_Chk = 5;
- Stats_Chk = 6;
- var
- UserPrefsDLOGPtr: DialogPtr;
- OldPort: GrafPtr;
- itemHit: integer;
- finished: Boolean;
-
- AutoRedraw, GrowBox, StatBox: Boolean;
-
- begin
-
- GetPort(OldPort);
-
- UserPrefsDLOGPtr := GetNewDialog(PrefsDLOGID, nil, Pointer(-1));
- CenterWindow(UserPrefsDLOGPtr);
- SetPort(UserPrefsDLOGPtr);
- ShowWindow(UserPrefsDLOGPtr);
-
- DrawDefaultBtn(ok, UserPrefsDLOGPtr); {Outline Default Button}
-
- with prefs do
- begin
- AutoRedraw := def_alwaysDraw;
- GrowBox := def_alwaysGrowBox;
- StatBox := def_alwaysStatBox;
- end; {with}
-
- CheckABox(UserPrefsDLOGPtr, Draw_Chk, AutoRedraw);
- CheckABox(UserPrefsDLOGPtr, Grow_Chk, GrowBox);
- CheckABox(UserPrefsDLOGPtr, Stats_Chk, StatBox);
-
- finished := FALSE;
-
- repeat
- begin
- ModalDialog(nil, itemHit); {Wait until an item is hit}
- case itemHit of
- ok:
- begin
- curBalloon.autoRedraw := AutoRedraw;
- if (AutoRedraw <> prefs.def_alwaysDraw) and (showToolWind) then
- begin
- SetPort(toolWindPtr);
- InvalRect(autoDrawChkBox);
- InvalRect(drawBtnRect);
- SetPort(UserPrefsDLOGPtr);
- end;
- prefs.def_alwaysDraw := AutoRedraw;
-
- if (prefs.def_alwaysGrowBox <> GrowBox) or (prefs.def_alwaysStatBox <> StatBox) then
- begin
- SetPort(DrawWindPtr);
- EraseRect(GrowIconRect);
- InvalRect(GrowIconRect);
- EraseRect(curBalloon.statsBox);
- InvalRect(curBalloon.statsBox);
- SetPort(UserPrefsDLOGPtr);
- end;
- prefs.def_alwaysGrowBox := GrowBox;
- prefs.def_alwaysStatBox := StatBox;
- finished := TRUE;
- end;
- cancel:
- finished := TRUE;
- Draw_Chk:
- begin
- AutoRedraw := not AutoRedraw;
- CheckABox(UserPrefsDLOGPtr, Draw_Chk, AutoRedraw);
- end;
- Grow_Chk:
- begin
- GrowBox := not GrowBox;
- CheckABox(UserPrefsDLOGPtr, Grow_Chk, GrowBox);
- end;
- Stats_Chk:
- begin
- StatBox := not StatBox;
- CheckABox(UserPrefsDLOGPtr, Stats_Chk, StatBox);
- end;
- otherwise
- ;
- end;{case}
- end;{repeat}
- until finished; {repeat…}
-
- DisposDialog(UserPrefsDLOGPtr);{Flush the dialog out of memory}
-
- end;{PrefsDLOG}
-
- end. {Prefs}