lazarus/examples/dockmanager/elasticsite/fmastersite.pas
2010-05-12 05:19:02 +00:00

106 lines
2.2 KiB
ObjectPascal

unit fMasterSite;
(* Test dockable forms and elastic sites, and save/restore layout.
ToDo: restore layout does not re-use existing forms?
*)
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
ExtCtrls, StdCtrls,
uMakeSite;
type
TMasterSite = class(TForm)
buDump: TButton;
buCreateForm: TButton;
buSave: TButton;
buRestore: TButton;
procedure buCreateFormClick(Sender: TObject);
procedure buDumpClick(Sender: TObject);
procedure buRestoreClick(Sender: TObject);
procedure buSaveClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
ms: TMemoryStream;
public
DockMaster: TDockMaster;
end;
var
MasterSite: TMasterSite;
implementation
uses
{$IFDEF TestUnwrapped}
EasyDockSite, //CreateUniqueComponentName
{$ENDIF}
LCLProc;
{ TMasterSite }
procedure TMasterSite.buCreateFormClick(Sender: TObject);
begin
DockMaster.CreateDockable('', True, True, True);
end;
procedure TMasterSite.buDumpClick(Sender: TObject);
begin
DockMaster.DumpSites;
end;
procedure TMasterSite.buRestoreClick(Sender: TObject);
begin
if ms <> nil then begin
ms.Position := 0; //rewind
DockMaster.LoadFromStream(ms);
end;
end;
procedure TMasterSite.buSaveClick(Sender: TObject);
begin
if ms = nil then
ms := TMemoryStream.Create
else
ms.Clear;
DockMaster.SaveToStream(ms);
end;
procedure TMasterSite.FormCreate(Sender: TObject);
var
f: TWinControl;
begin
DockMaster := TDockMaster.Create(self); //(Application)?
DockMaster.AddElasticSites(self, [alBottom]);
f := DockMaster.CreateDockable('', True);
//f.Visible := True; //???
if f.HostDockSite <> nil then
f := f.HostDockSite;
f.Top := 300;
f.Show;
DebugLn('Clients: %d', [f.ControlCount]);
{$IFDEF TestUnwrapped}
f := DockMaster.CreateDockable('', True, False);
if f.Name = '' then //name it - for unique caption
f.Name := CreateUniqueComponentName(f.ClassName, f.Owner);
{$ELSE}
f := DockMaster.CreateDockable('', False);
if f.HostDockSite <> nil then
f := f.HostDockSite;
f.Top := 600;
{$ENDIF}
f.Show;
end;
{$R *.lfm}
initialization
{.$I fmastersite.lrs}
end.