{******************************************************************}
{ EyWizard.pas                                                     }
{                                                                  }
{ Author    : A.Nasir Senturk                                      }
{ Home Page : http://www.shenturk.com                              }
{ Email     : shenturk@gmail.com                                   }
{                                                                  }
{ Date      : 11.01.2007                                           }
{ Update    : 23.03.2007                                           }
{                                                                  }
{ Sizden iki þey rica edicem:                                      }
{ 1. Lutfen bu baslik kismini kaldirmayiniz.                       }
{ 2. Mumkunse bagis yapiniz.                                       }
{ *****************************************************************}

unit EyWizard;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, JvExControls, JvComponent, JvWizard, StdCtrls, ExtCtrls,
  ComCtrls, ImgList, ConstDef;//, JvExStdCtrls, JvEdit, JvValidateEdit;

type
  TWizardForm = class(TForm)
    JvWizard1: TJvWizard;
    JvWizardWelcomePage1: TJvWizardWelcomePage;
    JvWizardInteriorPage1: TJvWizardInteriorPage;
    JvWizardInteriorPage2: TJvWizardInteriorPage;
    JvWizardInteriorPage3: TJvWizardInteriorPage;
    JvWizardWelcomePage2: TJvWizardWelcomePage;
    Label1: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    UserEdit: TLabeledEdit;
    Label2: TLabel;
    PassEdit: TLabeledEdit;
    Label5: TLabel;
    RetryEdit: TLabeledEdit;
    Label6: TLabel;
    Label7: TLabel;
    Label10: TLabel;
    ComboBox1: TComboBox;
    Label11: TLabel;
    CheckBox1: TCheckBox;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label22: TLabel;
    Label23: TLabel;
    Label24: TLabel;
    Label25: TLabel;
    Label26: TLabel;
    Label27: TLabel;
    Label28: TLabel;
    ImageList1: TImageList;
    ComboBox2: TComboBox;
    Label8: TLabel;
    Label9: TLabel;
    LabeledEdit3: TLabeledEdit;
    LabeledEdit4: TLabeledEdit;
    LabeledEdit9: TLabeledEdit;
    LabeledEdit10: TLabeledEdit;
    LabeledEdit11: TLabeledEdit;
    LabeledEdit12: TLabeledEdit;
    LabeledEdit13: TLabeledEdit;
    procedure FormCreate(Sender: TObject);
    procedure JvWizard1ActivePageChanging(Sender: TObject;
      var ToPage: TJvWizardCustomPage);
    procedure JvWizard1FinishButtonClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure ComboBox2Change(Sender: TObject);
    procedure LabeledEdit3KeyPress(Sender: TObject; var Key: Char);
    procedure LabeledEdit3Enter(Sender: TObject);
    procedure LabeledEdit3Exit(Sender: TObject);
    procedure LabeledEdit4Enter(Sender: TObject);
    procedure LabeledEdit4Exit(Sender: TObject);
    procedure LabeledEdit9Enter(Sender: TObject);
    procedure LabeledEdit9Exit(Sender: TObject);
    procedure LabeledEdit10Enter(Sender: TObject);
    procedure LabeledEdit10Exit(Sender: TObject);
    procedure LabeledEdit11Enter(Sender: TObject);
    procedure LabeledEdit11Exit(Sender: TObject);
    procedure LabeledEdit12Enter(Sender: TObject);
    procedure LabeledEdit12Exit(Sender: TObject);
    procedure LabeledEdit13Enter(Sender: TObject);
    procedure LabeledEdit13Exit(Sender: TObject);
  private
    { Private declarations }
    PriceRecord: TPriceRecord;
    procedure SaveOptions;
    procedure UpdateAdapterList;
    procedure UpdatePriceList;
    procedure UpdatePriceScreen;
  public
    { Public declarations }
  end;

var
  WizardForm: TWizardForm;

implementation

uses IpHlpAPI, IPHelper, OptnsDlg;

{$R *.dfm}

procedure TWizardForm.FormCreate(Sender: TObject);
begin
  JvWizardWelcomePage2.WaterMark.Image.Picture.Assign(
    JvWizardWelcomePage1.WaterMark.Image.Picture);
  PriceRecord.Quota := 4.00;
  PriceRecord.MonthlyPay := 29.00;
  PriceRecord.PayPerMB := 0.010;
  PriceRecord.DownSpeed := 1024;
  PriceRecord.UpSpeed := 256;
  UpdateAdapterList;
  UpdatePriceList;
  GetPriceListData(0, PriceRecord);
  UpdatePriceScreen;
end;

procedure TWizardForm.UpdateAdapterList;
var
  MibArr: IpHlpAPI.TMIBIfArray;
  I: Integer;
begin
  Get_IfTableMIB(MibArr);
  if Length(MibArr) > 0 then
    for I := Low(MIBArr) to High(MIBArr) do
    begin
      ComboBox1.Items.Add(MIBArr[I].bDescr);
    end;
  ComboBox1.ItemIndex := 0;
end;

procedure TWizardForm.JvWizard1ActivePageChanging(Sender: TObject;
  var ToPage: TJvWizardCustomPage);
begin
  if ToPage = JvWizardWelcomePage2 then
  begin
    Label15.Caption := WideFormat(': %s', [UserEdit.Text]);
    Label17.Caption := ': ••••••••••';
    Label19.Caption := WideFormat(': %s', [LabeledEdit3.Text]);
    Label21.Caption := WideFormat(': %s', [LabeledEdit4.Text]);
    Label23.Caption := WideFormat(': %s', [LabeledEdit9.Text]);
    if ComboBox1.ItemIndex >= 0 then
    begin
      Label25.Hint := ComboBox1.Items[ComboBox1.ItemIndex];
      Label25.ShowHint := True;
      Label25.Caption := WideFormat(': %s', [ComboBox1.Items[ComboBox1.ItemIndex]]);
    end
    else Label25.Caption := ': Tanýmlanmamýþ.';
    Label27.Caption := WideFormat(': %s/%s', [LabeledEdit10.Text, LabeledEdit11.Text]);
    Exit;
  end;
  if JvWizard1.ActivePageIndex <> 1 then Exit;
  if ToPage = JvWizardWelcomePage1 then Exit;
  if UserEdit.Text = '' then
  begin
    Application.MessageBox(sUserCannotEmpty, sErrorText, MB_ICONERROR);
    UserEdit.SetFocus;
    ToPage := JvWizardInteriorPage1;
    Exit;
  end;
  if PassEdit.Text = '' then
  begin
    Application.MessageBox(sPassCannotEmpty, sErrorText, MB_ICONERROR);
    PassEdit.SetFocus;
    ToPage := JvWizardInteriorPage1;
    Exit;
  end;
  if RetryEdit.Text = '' then
  begin
    Application.MessageBox(sRetryCannotEmpty, sErrorText, MB_ICONERROR);
    RetryEdit.SetFocus;
    ToPage := JvWizardInteriorPage1;
    Exit;
  end;
  if PassEdit.Text <> RetryEdit.Text then
  begin
    Application.MessageBox(sPassMismatch, sErrorText, MB_ICONERROR);
    RetryEdit.SetFocus;
    ToPage := JvWizardInteriorPage1;
    Exit;
  end;
end;

procedure TWizardForm.JvWizard1FinishButtonClick(Sender: TObject);
begin
  SaveOptions;
end;

procedure TWizardForm.SaveOptions;
begin

  RijndaelEncrypt(UserEdit.Text + ' ' + PassEdit.Text);

  PriceRecord.Quota := SuffixToFloat(LabeledEdit3.Text, ' GB', 4.00);
  if PriceRecord.Quota <= 0.00 then PriceRecord.Quota := 4.00;
  IniFile.WriteFloat(sGeneral, sQuota, PriceRecord.Quota / 1.00 * GigaByte);

  PriceRecord.MonthlyPay := SuffixToFloat(LabeledEdit4.Text, ' YTL', 29.00);
  IniFile.WriteFloat(sGeneral, sMonthlyPay, PriceRecord.MonthlyPay);

  PriceRecord.PayPerMB := SuffixToFloat(LabeledEdit9.Text, ' YTL', 0.010);
  IniFile.WriteFloat(sGeneral, sPayPerMB, PriceRecord.PayPerMB);

  PriceRecord.DownSpeed := SuffixToFloat(LabeledEdit10.Text, ' Kbps', 1024);
  IniFile.WriteFloat(sNetworkMonitor, sBandWidthDown, PriceRecord.DownSpeed);

  PriceRecord.UpSpeed := SuffixToFloat(LabeledEdit11.Text, ' Kbps', 256);
  IniFile.WriteFloat(sNetworkMonitor, sBandWidthUp, PriceRecord.UpSpeed);

  PriceRecord.MaxPayRef := SuffixToFloat(LabeledEdit12.Text, ' YTL', 99.00);
  IniFile.WriteFloat(sGeneral, sMaxPayRef, PriceRecord.MaxPayRef);

  PriceRecord.PayPercent := PrefixToFloat(LabeledEdit13.Text, '% ', 25.00);
  IniFile.WriteFloat(sGeneral, sPayPercent, PriceRecord.PayPercent);

  {
  PriceRecord.Quota := JvValidateEdit1.Value;
  IniFile.WriteFloat(sGeneral, sQuota, PriceRecord.Quota / 1.00 * GigaByte);

  PriceRecord.MonthlyPay := JvValidateEdit2.Value;
  IniFile.WriteFloat(sGeneral, sMonthlyPay, PriceRecord.MonthlyPay);

  PriceRecord.PayPerMB := JvValidateEdit3.Value;
  IniFile.WriteFloat(sGeneral, sPayPerMB, PriceRecord.PayPerMB);

  PriceRecord.DownSpeed := JvValidateEdit4.Value;
  IniFile.WriteFloat(sNetworkMonitor, sBandWidthDown, PriceRecord.DownSpeed);

  PriceRecord.UpSpeed := JvValidateEdit5.Value;
  IniFile.WriteFloat(sNetworkMonitor, sBandWidthUp, PriceRecord.UpSpeed);
  }
  
  IniFile.WriteInteger(sNetworkMonitor, sAdapterIndex, ComboBox1.ItemIndex);
  IniFile.WriteString(sNetworkMonitor, sAdapter, ComboBox1.Items[ComboBox1.ItemIndex]);

end;

procedure TWizardForm.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  if JvWizard1.ActivePageIndex > 0 then
    if ModalResult = mrCancel then
    begin
      CanClose := Application.MessageBox(sWizardNotCompleted,
        sConfirmText, MB_ICONQUESTION or MB_YESNO) = IDYES;
    end;
end;

procedure TWizardForm.UpdatePriceList;
var
  Index, Count: Integer;
  PriceRecord: TPriceRecord;
begin
  ComboBox2.Clear;
  Count := GetPriceListCount();
  for Index := 0 to Count - 1 do begin
    GetPriceListData(Index, PriceRecord);
    ComboBox2.Items.Add(PriceRecord.Description);
  end;
  ComboBox2.ItemIndex := 0;
end;

procedure TWizardForm.ComboBox2Change(Sender: TObject);
begin
  if ComboBox2.ItemIndex <> -1 then
  begin
    GetPriceListData(ComboBox2.ItemIndex, PriceRecord);
    UpdatePriceScreen;
  end;
end;

procedure TWizardForm.UpdatePriceScreen;
begin
  LabeledEdit3.Text := FormatFloat('#,0 GB', PriceRecord.Quota);
  LabeledEdit4.Text := FormatFloat('#,##0.00 YTL', PriceRecord.MonthlyPay);
  LabeledEdit9.Text := FormatFloat('#,###0.000 YTL', PriceRecord.PayPerMB);
  LabeledEdit10.Text := FormatFloat('#,0 Kbps', PriceRecord.DownSpeed);
  LabeledEdit11.Text := FormatFloat('#,0 Kbps', PriceRecord.UpSpeed);
  LabeledEdit12.Text := FormatFloat('#,##0.00 YTL', PriceRecord.MaxPayRef);
  LabeledEdit13.Text := FormatFloat('% #,0', PriceRecord.PayPercent);
  {
  JvValidateEdit1.Value := PriceRecord.Quota;
  JvValidateEdit2.Value := PriceRecord.MonthlyPay;
  JvValidateEdit3.Value := PriceRecord.PayPerMB;
  JvValidateEdit4.Value := PriceRecord.DownSpeed;
  JvValidateEdit5.Value := PriceRecord.UpSpeed;
  }
end;

procedure TWizardForm.LabeledEdit3KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in [#8, '0'..'9', DecimalSeparator]) then Key := #0;
end;

procedure TWizardForm.LabeledEdit3Enter(Sender: TObject);
begin
  LabeledEdit3.Text := FormatFloat('#,0', PriceRecord.Quota);
end;

procedure TWizardForm.LabeledEdit3Exit(Sender: TObject);
begin
  PriceRecord.Quota := SuffixToFloat(LabeledEdit3.Text, ' GB', 4.00);
  LabeledEdit3.Text := FormatFloat('#,0 GB', PriceRecord.Quota);
end;

procedure TWizardForm.LabeledEdit4Enter(Sender: TObject);
begin
  LabeledEdit4.Text := FormatFloat('#,##0.00', PriceRecord.MonthlyPay);
end;

procedure TWizardForm.LabeledEdit4Exit(Sender: TObject);
begin
  PriceRecord.MonthlyPay := SuffixToFloat(LabeledEdit4.Text, ' YTL', 29.00);
  LabeledEdit4.Text := FormatFloat('#,##0.00 YTL', PriceRecord.MonthlyPay);
end;

procedure TWizardForm.LabeledEdit9Enter(Sender: TObject);
begin
  LabeledEdit9.Text := FormatFloat('#,###0.000', PriceRecord.PayPerMB);
end;

procedure TWizardForm.LabeledEdit9Exit(Sender: TObject);
begin
  PriceRecord.PayPerMB := SuffixToFloat(LabeledEdit9.Text, ' YTL', 0.010);
  LabeledEdit9.Text := FormatFloat('#,###0.000 YTL', PriceRecord.PayPerMB);
end;

procedure TWizardForm.LabeledEdit10Enter(Sender: TObject);
begin
  LabeledEdit10.Text := FormatFloat('#,0', PriceRecord.DownSpeed);
end;

procedure TWizardForm.LabeledEdit10Exit(Sender: TObject);
begin
  PriceRecord.DownSpeed := SuffixToFloat(LabeledEdit10.Text, ' Kbps', 1024);
  LabeledEdit10.Text := FormatFloat('#,0 Kbps', PriceRecord.DownSpeed);
end;

procedure TWizardForm.LabeledEdit11Enter(Sender: TObject);
begin
  LabeledEdit11.Text := FormatFloat('#,0', PriceRecord.UpSpeed);
end;

procedure TWizardForm.LabeledEdit11Exit(Sender: TObject);
begin
  PriceRecord.UpSpeed := SuffixToFloat(LabeledEdit11.Text, ' Kbps', 256);
  LabeledEdit11.Text := FormatFloat('#,0 Kbps', PriceRecord.UpSpeed);
end;

procedure TWizardForm.LabeledEdit12Enter(Sender: TObject);
begin
  LabeledEdit12.Text := FormatFloat('#,##0.00', PriceRecord.MaxPayRef);
end;

procedure TWizardForm.LabeledEdit12Exit(Sender: TObject);
begin
  PriceRecord.MaxPayRef := SuffixToFloat(LabeledEdit12.Text, ' YTL', 99.00);
  LabeledEdit12.Text := FormatFloat('#,##0.00 YTL', PriceRecord.MaxPayRef);
end;

procedure TWizardForm.LabeledEdit13Enter(Sender: TObject);
begin
  LabeledEdit13.Text := FormatFloat('#,0', PriceRecord.PayPercent);
end;

procedure TWizardForm.LabeledEdit13Exit(Sender: TObject);
begin
  PriceRecord.PayPercent := PrefixToFloat(LabeledEdit13.Text, '% ', 25.00);
  LabeledEdit13.Text := FormatFloat('% #,0', PriceRecord.PayPercent);
end;

end.
