home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Pascal / Snippets / SplatMaster / Prefs.p < prev    next >
Encoding:
Text File  |  1992-03-08  |  5.5 KB  |  212 lines  |  [TEXT/PJMM]

  1. unit Prefs;
  2.  
  3. interface
  4.     uses
  5.         Quickdraw, Picker, Palettes, Globs, DlogStuff, WindowStuff;
  6.  
  7.     const
  8.         k_PrefsResID = 128;
  9.         k_PrefsResType = 'prf1';
  10.  
  11.     procedure RewritePrefs (prefs: PrefRec);
  12.     procedure SetUpPrefs (var prefs: PrefRec);
  13.     procedure PrefsDLOG;
  14.  
  15. implementation
  16.  
  17. {=======================================================================================    }
  18.     function AddNewPrefs (var aPrefHdl: PrefHdl): Boolean;
  19.         var
  20.             err: OSerr;
  21.             aHandle: Handle;
  22.     begin
  23.         AddNewPrefs := FALSE;
  24.         aPrefHdl := nil;
  25.  
  26.         aPrefHdl := PrefHdl(NewHandle(sizeof(PrefRec)));
  27.  
  28.         HNoPurge(Handle(aPrefHdl));
  29.         MoveHHi(Handle(aPrefHdl));
  30.         HLock(Handle(aPrefHdl));
  31.         AddResource(Handle(aPrefHdl), k_PrefsResType, k_PrefsResID, 'Prefs');
  32.         err := ResError;
  33.  
  34.         if (aPrefHdl = nil) or (err <> noErr) then    {AddNewPrefs failed!}
  35.             begin
  36.                 DisposeHandle(Handle(aPrefHdl));
  37.                 exit(AddNewPrefs);
  38.             end;
  39.         WriteResource(Handle(aPrefHdl));
  40.         err := ResError;
  41.         if err <> noErr then
  42.             exit(AddNewPrefs);
  43.  
  44.         Hunlock(Handle(aPrefHdl));
  45.         AddNewPrefs := TRUE;
  46.  
  47.     end;{AddNewPrefs}
  48.  
  49. {=======================================================================================    }
  50. {    procedure RewritePrefs (prefs: PrefRec);}
  51.     procedure RewritePrefs (prefs: PrefRec);
  52.         var
  53.             err: integer;
  54.             aPrefHdl: PrefHdl;
  55.     begin
  56.         UseResFile(appResFileRef);    {just in case it got changed somehow…}
  57.         aPrefHdl := PrefHdl(GetResource(k_PrefsResType, k_PrefsResID));
  58.         err := ResError;
  59.         if (aPrefHdl = nil) or (err <> noErr) then
  60.             if not AddNewPrefs(aPrefHdl) then
  61.                 exit(RewritePrefs);
  62.  
  63. {stuff our pref values into the resource's handle}
  64.         aPrefHdl^^.def_alwaysDraw := prefs.def_alwaysDraw;
  65.         aPrefHdl^^.def_alwaysGrowBox := prefs.def_alwaysGrowBox;
  66.         aPrefHdl^^.def_alwaysStatBox := prefs.def_alwaysStatBox;
  67.  
  68.         ChangedResource(Handle(aPrefHdl));
  69.         err := ResError;
  70.         if err = noErr then
  71.             WriteResource(Handle(aPrefHdl));
  72.         err := ResError;
  73.         if err <> noErr then
  74.             SysBeep(1);
  75.  
  76.         DisposHandle(Handle(aPrefHdl));
  77.     end;{RewritePrefs}
  78.  
  79.  
  80. {=======================================================================================    }
  81.     procedure InitPrefs (var thePrefs: PrefRec);
  82.     begin
  83.         thePrefs.def_alwaysDraw := TRUE;
  84.         thePrefs.def_alwaysGrowBox := TRUE;
  85.         thePrefs.def_alwaysStatBox := TRUE;
  86.     end;
  87.  
  88.  
  89. {=======================================================================================    }
  90. {    procedure SetUpPrefs (var prefs: PrefRec);}
  91.     procedure SetUpPrefs;
  92.         var
  93.             err: OSerr;
  94.             aPrefHdl: PrefHdl;
  95.     begin
  96.         InitPrefs(prefs);        {make sure, no matter what, that we have valid values}
  97.  
  98.         UseResFile(appResFileRef);    {just in case it got changed somehow…}
  99.         aPrefHdl := PrefHdl(GetResource(k_PrefsResType, k_PrefsResID));
  100.         err := ResError;
  101.         if (aPrefHdl = nil) or (err <> noErr) then    {failed to get resource}
  102.             exit(SetUpPrefs);                                        {so exit and just use the defaults}
  103.  
  104. {here is where we suck the marrow out of our resource-based prefs and store it in our humble, global prefs record}
  105.         prefs.def_alwaysDraw := aPrefHdl^^.def_alwaysDraw;
  106.         prefs.def_alwaysGrowBox := aPrefHdl^^.def_alwaysGrowBox;
  107.         prefs.def_alwaysStatBox := aPrefHdl^^.def_alwaysStatBox;
  108.  
  109.         DisposHandle(Handle(aPrefHdl));
  110.  
  111.     end;    {SetUpPrefs}
  112.  
  113.  
  114.  
  115.  
  116. {=======================================================================================    }
  117.     procedure PrefsDLOG;
  118.         const
  119.             PrefsDLOGID = 402;
  120.  
  121.             Draw_Chk = 4;
  122.             Grow_Chk = 5;
  123.             Stats_Chk = 6;
  124.         var
  125.             UserPrefsDLOGPtr: DialogPtr;
  126.             OldPort: GrafPtr;
  127.             itemHit: integer;
  128.             finished: Boolean;
  129.  
  130.             AutoRedraw, GrowBox, StatBox: Boolean;
  131.  
  132.     begin
  133.  
  134.         GetPort(OldPort);
  135.  
  136.         UserPrefsDLOGPtr := GetNewDialog(PrefsDLOGID, nil, Pointer(-1));
  137.         CenterWindow(UserPrefsDLOGPtr);
  138.         SetPort(UserPrefsDLOGPtr);
  139.         ShowWindow(UserPrefsDLOGPtr);
  140.  
  141.         DrawDefaultBtn(ok, UserPrefsDLOGPtr);    {Outline Default Button}
  142.  
  143.         with prefs do
  144.             begin
  145.                 AutoRedraw := def_alwaysDraw;
  146.                 GrowBox := def_alwaysGrowBox;
  147.                 StatBox := def_alwaysStatBox;
  148.             end;    {with}
  149.  
  150.         CheckABox(UserPrefsDLOGPtr, Draw_Chk, AutoRedraw);
  151.         CheckABox(UserPrefsDLOGPtr, Grow_Chk, GrowBox);
  152.         CheckABox(UserPrefsDLOGPtr, Stats_Chk, StatBox);
  153.  
  154.         finished := FALSE;
  155.  
  156.         repeat
  157.             begin
  158.                 ModalDialog(nil, itemHit);    {Wait until an item is hit}
  159.                 case itemHit of
  160.                     ok: 
  161.                         begin
  162.                             curBalloon.autoRedraw := AutoRedraw;
  163.                             if (AutoRedraw <> prefs.def_alwaysDraw) and (showToolWind) then
  164.                                 begin
  165.                                     SetPort(toolWindPtr);
  166.                                     InvalRect(autoDrawChkBox);
  167.                                     InvalRect(drawBtnRect);
  168.                                     SetPort(UserPrefsDLOGPtr);
  169.                                 end;
  170.                             prefs.def_alwaysDraw := AutoRedraw;
  171.  
  172.                             if (prefs.def_alwaysGrowBox <> GrowBox) or (prefs.def_alwaysStatBox <> StatBox) then
  173.                                 begin
  174.                                     SetPort(DrawWindPtr);
  175.                                     EraseRect(GrowIconRect);
  176.                                     InvalRect(GrowIconRect);
  177.                                     EraseRect(curBalloon.statsBox);
  178.                                     InvalRect(curBalloon.statsBox);
  179.                                     SetPort(UserPrefsDLOGPtr);
  180.                                 end;
  181.                             prefs.def_alwaysGrowBox := GrowBox;
  182.                             prefs.def_alwaysStatBox := StatBox;
  183.                             finished := TRUE;
  184.                         end;
  185.                     cancel: 
  186.                         finished := TRUE;
  187.                     Draw_Chk: 
  188.                         begin
  189.                             AutoRedraw := not AutoRedraw;
  190.                             CheckABox(UserPrefsDLOGPtr, Draw_Chk, AutoRedraw);
  191.                         end;
  192.                     Grow_Chk: 
  193.                         begin
  194.                             GrowBox := not GrowBox;
  195.                             CheckABox(UserPrefsDLOGPtr, Grow_Chk, GrowBox);
  196.                         end;
  197.                     Stats_Chk: 
  198.                         begin
  199.                             StatBox := not StatBox;
  200.                             CheckABox(UserPrefsDLOGPtr, Stats_Chk, StatBox);
  201.                         end;
  202.                     otherwise
  203.                         ;
  204.                 end;{case}
  205.             end;{repeat}
  206.         until finished;    {repeat…}
  207.  
  208.         DisposDialog(UserPrefsDLOGPtr);{Flush the dialog out of memory}
  209.  
  210.     end;{PrefsDLOG}
  211.  
  212. end. {Prefs}