unit _fm_Setup;


interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ComCtrls, ExtCtrls, ImgList, Spin, IniFiles;



type
   
   Tfm_Setup      = class(TForm)
                    btApply    : TBitBtn;
   
   Panel1     : TPanel;
   
   Panel2     : TPanel;
   
   Panel3     : TPanel;
   
   cbAnim     : TCheckBox;
   
   cbTime     : TCheckBox;
   
   tbDiff     : TTrackBar;
   
   lbDLevel   : TLabel;
   
   Panel4     : TPanel;
   
   cbASave    : TCheckBox;
   
   cbALoad    : TCheckBox;
   
   ilDiff     : TImageList;
   
   imDiff     : TImage;
   
   imTime     : TImage;
   
   Image1     : TImage;
   
   Image2     : TImage;
   
   Image3     : TImage;
   
   meTime     : TSpinEdit;
   
   Panel5     : TPanel;
   
   Image4     : TImage;
   
   cbTips     : TCheckBox;
   

procedure btApplyClick(Sender: TObject);
   

   procedure FormActivate(Sender: TObject);
      

      procedure cbTimeClick(Sender: TObject);
         

         procedure meTimeClick(Sender: TObject);
            

            procedure cbAnimClick(Sender: TObject);
               

               procedure cbASaveClick(Sender: TObject);
                  

                  procedure cbALoadClick(Sender: TObject);
                     

                     procedure tbDiffChange(Sender: TObject);
                        

                        procedure FormKeyPress(Sender: TObject; var Key: Char);
                           

                           procedure cbTipsClick(Sender: TObject);
                              
                              private
                              { Private declarations }
                              public
                              { Public declarations }
end;



var
   
   fm_Setup      : Tfm_Setup;
   
   

procedure LoadConfig;
   

   procedure LoadTopNames;
      
      
      implementation
      
      uses _fm_Main, _fm_Lang, _fm_Top, LangSupp, _fm_DMan;
      
      
      {$R *.DFM}
      
      {------------------------------------------------------------------------------}

      procedure LoadTopNames;
         

var
   i          : integer;
   

begin
   
   for i:=0 to 9 do begin
      
      fm_Top.sgTop.Cells[0,i] := intToStr(i + 1);
      
      fm_Top.sgTop.Cells[1,i] := TopNames[i].Name;
      
      fm_Top.sgTop.Cells[2,i] := TopNames[i].Points;
      
      fm_Top.sgTop.Cells[3,i] := TopNames[i].CoolWord;
      
      end;
   
   end;


{------------------------------------------------------------------------------}

procedure LoadConfig;
   

var
   i          : Longint;
   
   IniFile    : TIniFile;
   
   Exist      : boolean;
   
   v          : array[0..MAX_PATH] of char;
   
   Key        : HKey;
   

begin
   
   
   { Load Cofiguration from file -------------------------------------------------}
   
   {Selfs constants}
   ShowTips := true;
   
   Animation := true;
   
   TimeLimit := 0;
   
   AutoSave := true;
   
   AutoLoad := true;
   
   Difficulty := 3;
   
   Network := true;
   
   for i:=0 to 9 do begin
      
      TopNames[i].Name := '';
      
      TopNames[i].Points := '';
      
      TopNames[i].CoolWord := '';
      
      end;
   
   
   {Если нет файла конфигурации, то создать его}
   if not FileExists(ExtractFilePath(Application.ExeName)+'Erudite.ini') then begin
      
      //    fm_Setup.btApplyClick(fm_Setup.btApply);
      
      fm_Lang.ShowModal;
      {Set CurrentLanguage}
      fm_Main.RegisterExtension('.eru', true);
      
      end;
   
   
   IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Erudite.ini');
   
   with IniFile do begin
      
      if CurrentLanguage=lgNone then
         
         case ReadString('Setup','Language','English')[1] of
         
         'D':
            CurrentLanguage := lgDEU;
         
         'R':
            CurrentLanguage := lgRUS;
         
         else
            CurrentLanguage := lgENU;
         
         end;
      
      
      ShowTips := ReadBool('Setup','ShowTips',true);
      
      Animation := ReadBool('Setup','Animation',true);
      
      AutoSave := ReadBool('Setup','AutoSave',true);
      
      AutoLoad := ReadBool('Setup','AutoLoad',true);
      
      TimeLimit := ReadInteger('Setup','Time Limit',0);
      
      Difficulty := ReadInteger('Setup','Difficulty',3);
      
      
      for i:=0 to 9 do
         
         if (ReadString('Players','Player'+FormatFloat('0',i),'')<>'') then
            
            Players[1].Name.Items.Add(ReadString('Players','Player'+FormatFloat('0',i),'')
            );
      
      
      for i:=0 to 9 do
         
         if (ReadString('Top 10','Name'+FormatFloat('0',i),'')<>'') then begin
            
            TopNames[i].Name := Trim(Copy(ReadString('Top 10','Name'+FormatFloat('0',i),''
            ),1,20));
            
            TopNames[i].Points := Copy(ReadString('Top 10','Name'+FormatFloat('0',i),''),
            21,5);
            
            TopNames[i].CoolWord := Trim(Copy(ReadString('Top 10','Name'+FormatFloat('0',i
            ),''),26,40));
            
            end;
      
      
      Free;
      
      end;
   {with}
   
   RegOpenKeyEx(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion',
                0, KEY_READ, Key);
   
   i := SizeOf(v);
   
   RegQueryValueEx(Key, 'RegisteredOwner', nil, nil, @v, @i);
   
   
   
   {if Windows NT}
   if StrPas(v)='' then begin
      
      RegOpenKeyEx(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion',
                   0, KEY_READ, Key);
      
      i := RegQueryValueEx(Key, 'RegisteredOwner', nil, nil, @v, @i);
      
      end;
   
   UserName := StrPas(v);
   
   
   if UserName<>'' then begin
      
      Exist := false;
      
      if Players[1].Name.Items.Count>0 then
         
         for i:=0 to Players[1].Name.Items.Count-1 do
            
            if (Players[1].Name.Items[i]=UserName) then begin
               
               Exist := true;
               
               break;
               
               end;
      
      if not Exist then begin
         
         fm_main.cb1.Text := UserName;
         
         Players[1].Name.Items.Add(UserName);
         
         end;
      
      end;
   
   
   Players[1].Name.Items.Add(_M_sPPCName);
   
   for i:=2 to MaxPlayers do
      Players[i].Name.Items:=Players[1].Name.Items;
   
   fm_Main.stTime.Visible := Boolean(TimeLimit);
   
   
   LoadTopNames;
   
   end;


{------------------------------------------------------------------------------}

procedure Tfm_Setup.btApplyClick(Sender: TObject);
   

var
   Time       : string;
   

begin
   
   ShowTips  := cbTips.Checked;
   
   Animation := cbAnim.Checked;
   
   Difficulty := tbDiff.Position;
   
   AutoSave  := cbASave.Checked;
   
   AutoLoad  := cbALoad.Checked;
   
   
   if cbTime.Checked then begin
      
      Time := meTime.Text;
      
      while Pos(' ',Time)>0 do
         Delete(Time,Pos(' ',Time),1);
      
      TimeLimit := StrToIntDef(Time,0);
      
      if GameState<>gsNoGame then
         fm_Main.tmGame.Enabled := true;
      
      end
   
   else begin
      
      TimeLimit := 0;
      
      fm_Main.tmGame.Enabled := false;
      
      end;
   
   
   fm_Main.stTime.Visible := Boolean(TimeLimit);
   
   end;


{------------------------------------------------------------------------------}

procedure Tfm_Setup.FormActivate(Sender: TObject);
   
begin
   
   cbTips.Checked := ShowTips;
   
   cbAnim.Checked := Animation;
   
   tbDiff.Position := Difficulty;
   
   cbASave.Checked := AutoSave;
   
   cbALoad.Checked := AutoLoad;
   
   
   cbTime.Checked := Boolean(TimeLimit);
   
   meTime.Text := IntToStr(TimeLimit);
   
   if cbTime.Checked then
      meTime.Color := clWindow
   else
      meTime.Color := clBtnFace;
   
   end;


{------------------------------------------------------------------------------}

procedure Tfm_Setup.cbTimeClick(Sender: TObject);
   
begin
   
   meTime.Enabled := cbTime.Checked;
   
   if meTime.Enabled then begin
      
      meTime.SetFocus;
      
      if (strtointDef(meTime.Text, 0)=0) then
         meTime.Text := '60';
      
      end;
   
   if cbTime.Checked then
      meTime.Color := clWindow
   else
      meTime.Color := clBtnFace;
   
   
   end;


{------------------------------------------------------------------------------}

procedure Tfm_Setup.meTimeClick(Sender: TObject);
   
begin
   
   meTime.SelectAll;
   
   end;



procedure Tfm_Setup.cbAnimClick(Sender: TObject);
   
begin
   
   Animation := not Animation
   end;



procedure Tfm_Setup.cbASaveClick(Sender: TObject);
   
begin
   
   AutoSave := not AutoSave
   end;



procedure Tfm_Setup.cbALoadClick(Sender: TObject);
   
begin
   
   AutoLoad := not AutoLoad
   end;



procedure Tfm_Setup.tbDiffChange(Sender: TObject);
   
begin
   
   imDiff.Picture.Bitmap.Canvas.Draw(0,0,imDiff.Picture.Bitmap);
   
   ilDiff.GetBitmap(tbDiff.Position,imDiff.Picture.Bitmap);
   
   end;



procedure Tfm_Setup.FormKeyPress(Sender: TObject; var Key: Char);
   
begin
   
   if Key=#27 then
      Close
   end;



procedure Tfm_Setup.cbTipsClick(Sender: TObject);
   
begin
   
   ShowTips := not ShowTips
   end;


end.