mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-19 21:42:37 +02:00
240 lines
6.2 KiB
ObjectPascal
240 lines
6.2 KiB
ObjectPascal
unit DockForm1Unit;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, LCLProc, LResources, Forms, Controls, Graphics, Dialogs,
|
|
FileUtil, DockForm2Unit, Buttons, Menus, LDockCtrl, XMLPropStorage, StdCtrls;
|
|
|
|
type
|
|
|
|
{ TMainForm }
|
|
|
|
TMainForm = class(TForm)
|
|
TwoSiblingsButton: TButton;
|
|
SpiralButton: TButton;
|
|
ThreePagesButton: TButton;
|
|
ClearLayoutsButton: TButton;
|
|
TwoPagesButton: TButton;
|
|
CreateLayoutGroupBox: TGroupBox;
|
|
SaveLayoutButton: TButton;
|
|
CreateNewFormButton: TButton;
|
|
MainPopupMenu: TPopupMenu;
|
|
procedure ClearLayoutsButtonClick(Sender: TObject);
|
|
procedure CreateNewFormButtonClick(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure FormPaint(Sender: TObject);
|
|
procedure SaveLayoutButtonClick(Sender: TObject);
|
|
procedure SpiralButtonClick(Sender: TObject);
|
|
procedure ThreePagesButtonClick(Sender: TObject);
|
|
procedure TwoPagesButtonClick(Sender: TObject);
|
|
procedure TwoSiblingsButtonClick(Sender: TObject);
|
|
private
|
|
function CreateNewForm: TCustomForm;
|
|
procedure ClearLayout;
|
|
public
|
|
ControlDocker1: TLazControlDocker;
|
|
DockingManager: TLazDockingManager;
|
|
end;
|
|
|
|
var
|
|
MainForm: TMainForm;
|
|
|
|
implementation
|
|
|
|
{ TMainForm }
|
|
|
|
procedure TMainForm.FormPaint(Sender: TObject);
|
|
begin
|
|
if Sender=nil then ;
|
|
PaintBoundaries(Self,clBlue);
|
|
end;
|
|
|
|
procedure TMainForm.SaveLayoutButtonClick(Sender: TObject);
|
|
var
|
|
Config: TXMLConfigStorage;
|
|
begin
|
|
Config:=TXMLConfigStorage.Create('config.xml',false);
|
|
DockingManager.SaveToConfig(Config);
|
|
Config.WriteToDisk;
|
|
Config.Free;
|
|
end;
|
|
|
|
procedure TMainForm.SpiralButtonClick(Sender: TObject);
|
|
var
|
|
Form1: TCustomForm;
|
|
Form2: TCustomForm;
|
|
Form3: TCustomForm;
|
|
Form4: TCustomForm;
|
|
Form5: TCustomForm;
|
|
begin
|
|
debugln;
|
|
ClearLayout;
|
|
|
|
Form1:=CreateNewForm;
|
|
with Form1 do SetBounds(Left,Top,600,450);
|
|
Form2:=CreateNewForm;
|
|
with Form2 do SetBounds(Left,Top,150,150);
|
|
DockingManager.Manager.InsertControl(Form2,alRight,Form1);
|
|
Form3:=CreateNewForm;
|
|
with Form3 do SetBounds(Left,Top,150,150);
|
|
DockingManager.Manager.InsertControl(Form3,alLeft,Form1);
|
|
Form4:=CreateNewForm;
|
|
with Form4 do SetBounds(Left,Top,150,150);
|
|
DockingManager.Manager.InsertControl(Form4,alTop,Form1);
|
|
DockingManager.Manager.EnlargeControl(Form4,akLeft);
|
|
Form5:=CreateNewForm;
|
|
with Form5 do SetBounds(Left,Top,150,150);
|
|
DockingManager.Manager.InsertControl(Form5,alBottom,Form1);
|
|
DockingManager.Manager.EnlargeControl(Form5,akRight);
|
|
end;
|
|
|
|
procedure TMainForm.ThreePagesButtonClick(Sender: TObject);
|
|
var
|
|
Form1: TCustomForm;
|
|
Form2: TCustomForm;
|
|
Form3: TCustomForm;
|
|
begin
|
|
debugln;
|
|
ClearLayout;
|
|
|
|
Form1:=CreateNewForm;
|
|
Form1.Width:=500;
|
|
Form2:=CreateNewForm;
|
|
DockingManager.Manager.InsertControl(Form2,alClient,Form1);
|
|
Form3:=CreateNewForm;
|
|
DockingManager.Manager.InsertControl(Form3,alClient,Form1);
|
|
end;
|
|
|
|
procedure TMainForm.TwoPagesButtonClick(Sender: TObject);
|
|
var
|
|
Form1: TCustomForm;
|
|
Form2: TCustomForm;
|
|
begin
|
|
debugln;
|
|
ClearLayout;
|
|
|
|
Form1:=CreateNewForm;
|
|
with Form1 do SetBounds(Left,Top,400,200);
|
|
Form2:=CreateNewForm;
|
|
DockingManager.Manager.InsertControl(Form2,alClient,Form1);
|
|
end;
|
|
|
|
procedure TMainForm.TwoSiblingsButtonClick(Sender: TObject);
|
|
var
|
|
Form1: TCustomForm;
|
|
Form2: TCustomForm;
|
|
begin
|
|
debugln;
|
|
ClearLayout;
|
|
|
|
Form1:=CreateNewForm;
|
|
with Form1 do SetBounds(Left,Top,400,200);
|
|
Form2:=CreateNewForm;
|
|
DockingManager.Manager.InsertControl(Form2,alRight,Form1);
|
|
end;
|
|
|
|
function TMainForm.CreateNewForm: TCustomForm;
|
|
var
|
|
DockForm: TDockFormX;
|
|
begin
|
|
// create a form with a TLazControlDocker
|
|
DockForm:=TDockFormX.Create(Self);
|
|
Result:=DockForm;
|
|
// connect the TLazControlDocker of the new form to our DockingManager
|
|
// this will automatically create a unique name for the forms layout.
|
|
DockForm.Docker.Manager:=DockingManager;
|
|
|
|
// assign the unique name, so that the user can distinguish the forms
|
|
// This is only done here for demonstration purpose.
|
|
DockForm.Name:=DockForm.Docker.DockerName;
|
|
DockForm.Caption:=DockForm.Name;
|
|
DockForm.Docker.Name:='Docker'+DockForm.Name;
|
|
|
|
// finally: show the form
|
|
// If a form with this layout was already shown in the past, then
|
|
// the DockingManager will automatically restore the layout.
|
|
DockForm.Visible:=true;
|
|
DebugLn('TMainForm.CreateNewForm ',DockForm.Name,' ',DockingManager.FindDockerByControl(DockForm,nil).DockerName,' ',DockingManager.GetControlConfigName(DockForm));
|
|
end;
|
|
|
|
procedure TMainForm.ClearLayout;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
// free all forms and layouts
|
|
for i:=ComponentCount-1 downto 0 do begin
|
|
if Components[i] is TDockFormX then
|
|
Components[i].Free;
|
|
end;
|
|
DockingManager.ClearConfigs;
|
|
end;
|
|
|
|
procedure TMainForm.CreateNewFormButtonClick(Sender: TObject);
|
|
begin
|
|
if Sender=nil then ;
|
|
CreateNewForm;
|
|
end;
|
|
|
|
procedure TMainForm.ClearLayoutsButtonClick(Sender: TObject);
|
|
begin
|
|
ClearLayout;
|
|
end;
|
|
|
|
procedure TMainForm.FormCreate(Sender: TObject);
|
|
var
|
|
Form2: TCustomForm;
|
|
Form3: TCustomForm;
|
|
Config: TXMLConfigStorage;
|
|
UseConfig: Boolean;
|
|
begin
|
|
Form2:=nil;
|
|
Form3:=nil;
|
|
DockingManager:=TLazDockingManager.Create(Self);
|
|
|
|
UseConfig:=FileExistsUTF8('config.xml');
|
|
if UseConfig then begin
|
|
Config:=TXMLConfigStorage.Create('config.xml',true);
|
|
DockingManager.LoadFromConfig(Config);
|
|
Config.Free;
|
|
end;
|
|
|
|
ControlDocker1:=TLazControlDocker.Create(Self);
|
|
ControlDocker1.Name:='DockerForm1';
|
|
ControlDocker1.Manager:=DockingManager;
|
|
|
|
DockingManager.WriteDebugReport;
|
|
|
|
Form2:=CreateNewForm;
|
|
DebugLn(['TMainForm.FormCreate =============================================================']);
|
|
//Form3:=CreateNewForm;
|
|
|
|
if not UseConfig then begin
|
|
DebugLn(['TMainForm.FormCreate Creating default docking layout']);
|
|
if Form2<>nil then begin
|
|
DebugLn(['TMainForm.FormCreate AAA1 Form2=',dbgs(Form2.BoundsRect)]);
|
|
DockingManager.Manager.InsertControl(Form2,alLeft,Self);
|
|
DebugLn(['TMainForm.FormCreate AAA2 Form2=',dbgs(Form2.BoundsRect)]);
|
|
end;
|
|
if Form3<>nil then
|
|
DockingManager.Manager.InsertControl(Form3,alBottom,Self);
|
|
end;
|
|
|
|
//DockingManager.WriteDebugReport;
|
|
//ControlDocker1.GetLayoutFromControl;
|
|
end;
|
|
|
|
procedure TMainForm.FormDestroy(Sender: TObject);
|
|
begin
|
|
DockingManager.Free;
|
|
end;
|
|
|
|
initialization
|
|
{$I dockform1unit.lrs}
|
|
|
|
end.
|
|
|