unit uEWWizard; {----------------------------------------------------------------------------} { RemObjects' Hydra - IDE Library } { } { compiler: Delphi 6 and up, Kylix 3 and up } { platform: Win32, Linux } { } { (c)opyright RemObjects Software. all rights reserved. } { } { Using this code requires a valid license of Hydra } { which can be obtained at http://www.remobjects.com. } {----------------------------------------------------------------------------} {$I Everwood.inc} interface uses {$IFDEF FPC}LCLIntf, LResources,{$ENDIF} SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls; type TEWWizardForm = class(TForm) Panel1: TPanel; Image1: TImage; Label1: TLabel; Label2: TLabel; Bevel1: TBevel; pc_Pages: TPageControl; ts_Welcome: TTabSheet; ts_Finish: TTabSheet; Panel2: TPanel; btn_Finish: TBitBtn; btn_Cancel: TBitBtn; Label3: TLabel; Label4: TLabel; btn_Next: TBitBtn; btn_Back: TBitBtn; Label5: TLabel; Label6: TLabel; lv_Options: TListView; procedure btn_NextClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btn_BackClick(Sender: TObject); procedure FormDestroy(Sender: TObject); private fInEnterPage: boolean; fActiveControl: TWinControl; fValues: TStrings; fNextPage: integer; fPreviousPage: integer; function GetActiveControl: TWinControl; procedure SetActiveControl(const Value: TWinControl); function GetNextPage: integer; function GetPreviousPage: integer; protected procedure OnEnterPage(aPage:TTabSheet; aMovingForward:boolean); virtual; procedure OnLeavePage(aPage:TTabSheet; aMovingForward:boolean); virtual; procedure AfterEnterPage(aPage:TTabSheet; aMovingForward:boolean); virtual; function CleanPascalString(const aString: string): string; public property Values:TStrings read fValues; function Execute:boolean; overload; class function Execute(aOwner: TComponent): boolean; overload; property ActiveControl: TWinControl read GetActiveControl write SetActiveControl; property NextPage: integer read GetNextPage write fNextPage; property PreviousPage: integer read GetPreviousPage write fPreviousPage; end; implementation // uses FileCtrl; {$IFNDEF FPC} {$R *.dfm} {$ENDIF FPC} { THYNewProjectWizardForm } procedure TEWWizardForm.FormCreate(Sender: TObject); var i: integer; begin for i := 0 to ComponentCount-1 do begin if Components[i] is TTabSheet then TTabSheet(Components[i]).TabVisible := false; end; fValues := TStringList.Create(); Height := Height-16; pc_Pages.ActivePageIndex := 0; OnEnterPage(pc_Pages.Pages[0],true); fNextPage := -1; fPreviousPage := -1; end; procedure TEWWizardForm.FormDestroy(Sender: TObject); begin FreeAndNil(fValues); end; function TEWWizardForm.CleanPascalString(const aString:string):string; begin result := aString; result := StringReplace(result,'''','''''',[rfReplaceAll]); { replace quotes with double quotes } result := StringReplace(result,#13#10,'''#13#10''',[rfReplaceAll]); result := ''''+result+''''; end; procedure TEWWizardForm.btn_NextClick(Sender: TObject); begin if pc_Pages.ActivePageIndex+1 < pc_Pages.PageCount then begin fInEnterPage := true; try OnLeavePage(pc_Pages.Pages[pc_Pages.ActivePageIndex],true); OnEnterPage(pc_Pages.Pages[NextPage],true); finally fInEnterPage := false; end; fPreviousPage := pc_Pages.ActivePageIndex; pc_Pages.ActivePageIndex := NextPage; if Assigned(fActiveControl) then begin inherited ActiveControl := fActiveControl; fActiveControl := nil; end; end; fNextPage := -1; AfterEnterPage(pc_Pages.ActivePage, true); end; procedure TEWWizardForm.btn_BackClick(Sender: TObject); begin if pc_Pages.ActivePageIndex > 0 then begin fInEnterPage := true; try OnLeavePage(pc_Pages.Pages[pc_Pages.ActivePageIndex],false); OnEnterPage(pc_Pages.Pages[PreviousPage],false); finally fInEnterPage := false; end; pc_Pages.ActivePageIndex := PreviousPage; if Assigned(fActiveControl) then begin inherited ActiveControl := fActiveControl; fActiveControl := nil; end; end; fNextPage := -1; fPreviousPage := -1; AfterEnterPage(pc_Pages.ActivePage, false); end; procedure TEWWizardForm.OnEnterPage(aPage: TTabSheet; aMovingForward: boolean); var i: integer; begin {$IFDEF FPC} if aMovingForward then btn_Finish.Visible := false else // for prevent warnings {$ENDIF} btn_Finish.Visible := false; btn_Next.Visible := true; if aPage = ts_Welcome then begin btn_Back.Enabled := false; btn_Next.Enabled := true; ActiveControl := btn_Next; end else if aPage = ts_Finish then begin {$IFNDEF FPC} lv_Options.Items.BeginUpdate(); {$ENDIF} try lv_Options.Items.Clear(); for i := 0 to Values.Count-1 do begin with lv_Options.Items.Add() do begin Caption := Values.Names[i]; SubItems.Add(Values.Values[Values.Names[i]]); end; end; { for } btn_Finish.Visible := true; btn_Finish.Enabled := true; btn_Next.Visible := false; ActiveControl := btn_Finish; finally {$IFNDEF FPC} lv_Options.Items.EndUpdate(); {$ENDIF} end; end else { default for custom added pages } begin btn_Back.Enabled := true; btn_Next.Enabled := true; end; end; procedure TEWWizardForm.OnLeavePage(aPage: TTabSheet; aMovingForward: boolean); begin end; function TEWWizardForm.Execute: boolean; begin result := (ShowModal() = 1); // idOk=1 end; class function TEWWizardForm.Execute(aOwner: TComponent): boolean; begin with self.Create(aOwner) do try result := Execute(); finally Free(); end; end; function TEWWizardForm.GetActiveControl: TWinControl; begin if Assigned(fActiveControl) then result := fActiveControl else result := inherited ActiveControl; end; procedure TEWWizardForm.SetActiveControl(const Value: TWinControl); begin if fInEnterPage then begin fActiveControl := Value; end else begin inherited ActiveControl := Value; fActiveControl := nil; end; end; function TEWWizardForm.GetNextPage: integer; begin Result := fNextPage; if result = -1 then result := pc_Pages.ActivePageIndex+1; end; function TEWWizardForm.GetPreviousPage: integer; begin Result := fPreviousPage; if result = -1 then result := pc_Pages.ActivePageIndex-1; end; procedure TEWWizardForm.AfterEnterPage(aPage: TTabSheet; aMovingForward: boolean); begin end; {$IFDEF FPC} initialization {$i uEWWizard.lrs} {$ENDIF} end.