Componentes.Terceros.RemObj.../internal/5.0.30.691/1/Everwood/Source/Delphi/uEWWizard.pas

260 lines
7.2 KiB
ObjectPascal

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.