unit uHostMainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uGUIBase, ExtCtrls, uCustomEditor, cxControls, XPMan;

type
  THostMainForm = class(TForm, IHostForm)
    Panel1: TPanel;
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormShow(Sender: TObject);
  protected
    FContenido : TCustomEditor;  
    function GetWorkPanel: TWinControl;
    procedure OnWorkPanelChanged(AEditor : ICustomEditor);
    procedure ShowEmbedded(AEditor : ICustomEditor);
    procedure ReleaseEmbedded;
    function Login: Boolean;    
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property WorkPanel: TWinControl read GetWorkPanel;
  end;

var
  HostMainForm: THostMainForm;

implementation

{$R *.dfm}

uses
  TestFramework, GUITestRunner, TextTestRunner, uDataModuleUsuarios;


{ TForm1 }

constructor THostMainForm.Create(AOwner: TComponent);
begin
  inherited;
  FContenido := NIL;
  Login;
end;

destructor THostMainForm.Destroy;
begin
  ReleaseEmbedded;
  inherited;
end;

procedure THostMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := True;
  if Assigned(FContenido) then
    CanClose := FContenido.CloseQuery;
end;

procedure THostMainForm.FormShow(Sender: TObject);
begin
  if IsConsole then
    TextTestRunner.RunRegisteredTests
  else
    GUITestRunner.RunRegisteredTestsModeless;
  Self.SendToBack;
end;

function THostMainForm.GetWorkPanel: TWinControl;
begin
  Result := Panel1;
end;

function THostMainForm.Login: Boolean;
begin
  //
  Result := dmUsuarios.Login('Administrador', '1');
  if Result then
    dmUsuarios.IDEmpresaActual := 1;
  
end;

procedure THostMainForm.OnWorkPanelChanged(AEditor: ICustomEditor);
begin
  //
end;

procedure THostMainForm.ReleaseEmbedded;
begin
  if Assigned(FContenido) then
    FContenido.Release;
  Application.ProcessMessages;
end;

procedure THostMainForm.ShowEmbedded(AEditor: ICustomEditor);
begin
  if Assigned(FContenido) then
    if not FContenido.CloseQuery then
    begin
      AEditor.Release;
      AEditor := NIL;
      Exit;
    end;

  ShowHourglassCursor;
  LockWindowUpdate(Handle);
  try
    FContenido := AEditor.GetInstance as TCustomEditor;
    with (FContenido) do
    begin
      Visible := False;
      BorderIcons := [];
      BorderStyle := bsNone;
      Parent := WorkPanel;
      FContenido.Show;
      Align := alClient;
      FContenido.SetFocus;
    end;
  finally
    Application.ProcessMessages;
    LockWindowUpdate(0);
    HideHourglassCursor;
  end;
  OnWorkPanelChanged(FContenido);
end;

end.
