unit uPrinc;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TfrmPrincipal = class(TForm)
    btnCriaWizard: TButton;
    procedure btnCriaWizardClick(Sender: TObject);
  private
    { Private declarations }
    procedure DoCancelar(Sender: TObject);
    procedure DoAvancar(Sender: TObject);
    procedure DoRetroceder(Sender: TObject);
    procedure DoFinalizar(Sender: TObject);
  public
    { Public declarations }
  end;

var
  frmPrincipal: TfrmPrincipal;

implementation

uses ufrmWizard, uHome, uPessoaFisica, uPessoaJuridica, ufrmEnderPessoa, UDefs,
  Util;

{$R *.dfm}

procedure TfrmPrincipal.btnCriaWizardClick(Sender: TObject);
begin
  {código do wizard
    Você deve criar todas as janelas que o wizard vai usar aqui.
  }
//  if frmWizard = nil then
    frmWizard:= TfrmWizard.Create(nil);

  //if frmHome = nil then
  frmHome:= TfrmHome.Create(nil);
  //if frmPJ = nil then
  frmPJ:= TfrmPJ.Create(nil);
  //if frmPF = nil then
  frmpf:= TfrmPF.Create(nil);
  //if frmEnder = nil then
  frmEnder:= TfrmEnder.Create(nil);

  with frmWizard do
  begin
    show;
    iMostrar(0,'Home','Teste de inicialização',aAvancar, frmHome, [prInicial, prCancelable]);
    iCancelar:= DoCancelar;
    iAvancar:= doAvancar;
    iVoltar:= doRetroceder;
    iFinalizar:= doFinalizar;
  end;

end;

procedure TfrmPrincipal.DoAvancar(Sender: TObject);
begin
  with frmWizard do
  begin
    {
      Utilização do botão avançar
      São cases aninhados... para cada form um case (ou encadeamento de if), portanto
      cada form tem que disponibilizar sua própria forma de chamar o próximo quadro.
      O primeiro case é o dos níveis... dentro de cada nível ... só pode haver um quadro ativo
      então o próximo nível vai depender da lógica da janela ativa no nivel anterior.
    }
    case iPaginas.iNivel of
    0: begin
      {Se existir algum procedimento para fazer quando mudar do quadro 0 para o quadro 1
      faça-o aqui.
      Você pode habilitar a progressBar do Wizard usando:
      iPBarPo
      iPBarMin:=0
      iPBarMax:=100;
      iPBarVisible:= True;
        e iPBarPos:=0; para determinar a posição em um laço
      }

      //escolha de tipo pessoa feita ir para página de Nivel 1 adequada
      case frmHome.rg1.ItemIndex of
      0: iMostrar(1,'PessoaFisica','Description',aAvancar, frmPF,[prMeio, prRetornable]);
      1: iMostrar(1,'PessoaJuridica','Description',aAvancar, frmPJ, [prMeio, prRetornable]);
      end;
    end;
    1: begin
      {Se existir algum procedimento para fazer quando mudar do quadro 1 para o quadro 2
      faça-o aqui.}
      frmEnder.rgTipoPessoa.ItemIndex:= frmHome.rg1.ItemIndex;

      {
        Para ir a um quadro, sem que o atual tenha um controle que possa ser usado como
        parâmetro para a escolha da próxima página use GetAliasNivel para escolher o próximo quadro
        Esta função serve para pegar o alias da última página ativa de um nível
      }
      if iPaginas.GetAliasNivel(1) = 'PessoaFisica'
        then iMostrar(2,'EnderPF','',aAvancar,frmEnder,[prFinal,prRetornable]);
      if iPaginas.GetAliasNivel(1) = 'PessoaJuridica'
        then iMostrar(2,'EnderPJ','',aAvancar,frmEnder,[prFinal,prRetornable]);
    end;
    end;
  end;
end;

procedure TfrmPrincipal.DoCancelar(Sender: TObject);
begin
 // qualquer procedimento

  //finaliza
   DoFinalizar(Sender);
end;

procedure TfrmPrincipal.DoFinalizar(Sender: TObject);
begin
//qualquer procedimento

  // a finalização do wizard
  frmHome.Free;
  frmPJ.Free;
  frmpf.Free;

  try
    frmWizard.Close;  //destrua o wizard por último
  except

  end;
end;

procedure TfrmPrincipal.DoRetroceder(Sender: TObject);
begin
  with frmWizard do
  begin
    case iPaginas.iNivel of
    0: begin
      //ROOT

    end;
    1: begin
      {
      DONE -oJLes -cUrgente: Implementar um iMostrarAnterior informando somente o nível para o qual se
      deseja ir
      }
      iMostrarNivel(0);
      //Voltar para o ROOT
      //iMostrar(0,'Home','Description',aRetroceder,nil,[prInicial, prCancelable]);
    end;
    2: begin
      iMostrarNivel(1);
    end;
    end;
  end;
end;

end.
