mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-11 01:29:29 +01:00
dockmanager example: added Visible flag to DockMaster methods
git-svn-id: trunk@24904 -
This commit is contained in:
parent
374d65d68c
commit
554e1663e9
3
.gitattributes
vendored
3
.gitattributes
vendored
@ -2880,13 +2880,10 @@ examples/dockmanager/package/easydockmgr.lpk svneol=native#text/plain
|
||||
examples/dockmanager/package/easydockmgr.pas svneol=native#text/pascal
|
||||
examples/dockmanager/package/easydocksite.pas svneol=native#text/plain
|
||||
examples/dockmanager/package/fdockbook.lfm svneol=native#text/plain
|
||||
examples/dockmanager/package/fdockbook.lrs svneol=native#text/pascal
|
||||
examples/dockmanager/package/fdockbook.pas svneol=native#text/pascal
|
||||
examples/dockmanager/package/felasticsite.lfm svneol=native#text/plain
|
||||
examples/dockmanager/package/felasticsite.lrs svneol=native#text/plain
|
||||
examples/dockmanager/package/felasticsite.pas svneol=native#text/pascal
|
||||
examples/dockmanager/package/ffloatingsite.lfm svneol=native#text/plain
|
||||
examples/dockmanager/package/ffloatingsite.lrs svneol=native#text/plain
|
||||
examples/dockmanager/package/ffloatingsite.pas svneol=native#text/pascal
|
||||
examples/dockmanager/package/umakesite.pas svneol=native#text/pascal
|
||||
examples/dockmanager/package/uminirestore.pas svneol=native#text/pascal
|
||||
|
||||
@ -73,10 +73,11 @@ var
|
||||
begin
|
||||
DockMaster := TDockMaster.Create(self); //(Application)?
|
||||
DockMaster.AddElasticSites(self, [alBottom]);
|
||||
f := DockMaster.CreateDockable('', True);
|
||||
f := DockMaster.CreateDockable('', True, False);
|
||||
if f.HostDockSite <> nil then
|
||||
f := f.HostDockSite;
|
||||
f.Top := 300;
|
||||
f.Show;
|
||||
{$IFDEF TestUnwrapped}
|
||||
f := DockMaster.CreateDockable('', True, False);
|
||||
if f.Name = '' then //name it - for unique caption
|
||||
@ -87,6 +88,7 @@ begin
|
||||
f := f.HostDockSite;
|
||||
f.Top := 600;
|
||||
{$ENDIF}
|
||||
f.Show;
|
||||
end;
|
||||
|
||||
initialization
|
||||
|
||||
@ -20,26 +20,4 @@ object ViewWindow: TViewWindow
|
||||
Caption = 'Label1'
|
||||
ParentColor = False
|
||||
end
|
||||
object Image1: TImage
|
||||
Left = 384
|
||||
Height = 16
|
||||
Top = 0
|
||||
Width = 16
|
||||
Anchors = [akTop, akRight]
|
||||
AutoSize = True
|
||||
OnMouseMove = Image1MouseMove
|
||||
Picture.Data = {
|
||||
055449636F6E3E01000000000100010010101000000000002801000016000000
|
||||
2800000010000000200000000100040000000000C00000000000000000000000
|
||||
0000000000000000000000000000800000800000008080008000000080008000
|
||||
8080000080808000C0C0C0000000FF0000FF000000FFFF00FF000000FF00FF00
|
||||
FFFF0000FFFFFF00000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000990000000000009999990000000000999999000000000999999990
|
||||
0000000999999990000000009999990000000000999999000000000000990000
|
||||
00000000000000007FFF0000BFFF0000DFFF0000EFFF0000F7FF0000FBFF0000
|
||||
FDCF0000FE030000FE010000FE010000FC000000FC000000FE010000FE010000
|
||||
FF030000FFCF0000
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
@ -18,7 +18,6 @@ uses
|
||||
|
||||
type
|
||||
TViewWindow = class(TForm)
|
||||
Image1: TImage;
|
||||
Label1: TLabel;
|
||||
procedure FormEndDock(Sender, Target: TObject; X, Y: Integer);
|
||||
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState;
|
||||
|
||||
@ -1,12 +0,0 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TEasyDockBook','FORMDATA',[
|
||||
'TPF0'#241#13'TEasyDockBook'#12'EasyDockBook'#4'Left'#3#7#1#6'Height'#3','#1#3
|
||||
+'Top'#3#146#0#5'Width'#3#144#1#7'Caption'#6#12'EasyDockBook'#12'ClientHeight'
|
||||
+#3','#1#11'ClientWidth'#3#144#1#8'DockSite'#9#8'DragKind'#7#6'dkDock'#7'OnCl'
|
||||
+'ose'#7#9'FormClose'#8'OnCreate'#7#10'FormCreate'#10'OnDockDrop'#7#12'FormDo'
|
||||
+'ckDrop'#10'OnDockOver'#7#12'FormDockOver'#9'OnEndDock'#7#11'FormEndDock'#13
|
||||
+'OnGetSiteInfo'#7#15'FormGetSiteInfo'#8'OnUnDock'#7#10'FormUnDock'#0#242#2#0
|
||||
+#6'TPanel'#7'pnlDock'#4'Left'#2#0#6'Height'#3','#1#3'Top'#2#0#5'Width'#3#144
|
||||
+#1#5'Align'#7#8'alClient'#8'TabOrder'#2#0#14'UseDockManager'#8#0#0#0
|
||||
]);
|
||||
@ -1,28 +0,0 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TDockingSite','FORMDATA',[
|
||||
'TPF0'#12'TDockingSite'#11'DockingSite'#4'Left'#3#253#1#6'Height'#3#163#0#3'T'
|
||||
+'op'#3#12#1#5'Width'#3#255#0#8'AutoSize'#9#7'Caption'#6#9'Dock Site'#12'Clie'
|
||||
+'ntHeight'#3#163#0#11'ClientWidth'#3#255#0#10'LCLVersion'#6#6'0.9.29'#7'Visi'
|
||||
+'ble'#9#0#6'TPanel'#7'pnlLeft'#4'Left'#2#0#6'Height'#3#138#0#3'Top'#2#0#5'Wi'
|
||||
+'dth'#2#0#5'Align'#7#6'alLeft'#7'Caption'#6#7'pnlLeft'#5'Color'#7#7'clWhite'
|
||||
+#8'DockSite'#9#11'ParentColor'#8#8'TabOrder'#2#0#10'OnDockDrop'#7#15'pnlLeft'
|
||||
+'DockDrop'#10'OnDockOver'#7#15'pnlLeftDockOver'#13'OnGetSiteInfo'#7#18'pnlLe'
|
||||
+'ftGetSiteInfo'#8'OnUnDock'#7#13'pnlLeftUnDock'#0#0#9'TSplitter'#9'splitLeft'
|
||||
+#4'Left'#2#0#6'Height'#3#138#0#3'Top'#2#0#5'Width'#2#4#0#0#6'TPanel'#8'pnlRi'
|
||||
+'ght'#4'Left'#3#255#0#6'Height'#3#138#0#3'Top'#2#0#5'Width'#2#0#5'Align'#7#7
|
||||
+'alRight'#7'Caption'#6#8'pnlRight'#5'Color'#7#6'clAqua'#8'DockSite'#9#11'Par'
|
||||
+'entColor'#8#8'TabOrder'#2#2#10'OnDockDrop'#7#15'pnlLeftDockDrop'#10'OnDockO'
|
||||
+'ver'#7#15'pnlLeftDockOver'#13'OnGetSiteInfo'#7#18'pnlLeftGetSiteInfo'#8'OnU'
|
||||
+'nDock'#7#13'pnlLeftUnDock'#0#0#6'TPanel'#9'pnlBottom'#4'Left'#2#0#6'Height'
|
||||
+#2#1#3'Top'#3#142#0#5'Width'#3#255#0#5'Align'#7#8'alBottom'#7'Caption'#6#9'p'
|
||||
+'nlBottom'#8'DockSite'#9#8'TabOrder'#2#3#10'OnDockDrop'#7#15'pnlLeftDockDrop'
|
||||
+#10'OnDockOver'#7#15'pnlLeftDockOver'#13'OnGetSiteInfo'#7#18'pnlLeftGetSiteI'
|
||||
+'nfo'#8'OnUnDock'#7#13'pnlLeftUnDock'#0#0#9'TSplitter'#10'splitRight'#4'Left'
|
||||
+#3#251#0#6'Height'#3#138#0#3'Top'#2#0#5'Width'#2#4#5'Align'#7#7'alRight'#12
|
||||
+'ResizeAnchor'#7#7'akRight'#0#0#10'TStatusBar'#10'StatusBar1'#4'Left'#2#0#6
|
||||
+'Height'#2#20#3'Top'#3#143#0#5'Width'#3#255#0#6'Panels'#14#0#0#0#9'TSplitter'
|
||||
+#11'splitBottom'#6'Cursor'#7#8'crVSplit'#4'Left'#2#0#6'Height'#2#4#3'Top'#3
|
||||
+#138#0#5'Width'#3#255#0#5'Align'#7#8'alBottom'#12'ResizeAnchor'#7#8'akBottom'
|
||||
+#0#0#0
|
||||
]);
|
||||
@ -1,8 +0,0 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TFloatingSite','FORMDATA',[
|
||||
'TPF0'#13'TFloatingSite'#12'FloatingSite'#4'Left'#3#175#1#6'Height'#3#9#1#3'T'
|
||||
+'op'#3#242#1#5'Width'#3'y'#1#7'Caption'#6#12'FloatingSite'#8'DockSite'#9#7'O'
|
||||
+'nClose'#7#9'FormClose'#10'OnDockDrop'#7#12'FormDockDrop'#8'OnUnDock'#7#10'F'
|
||||
+'ormUnDock'#14'UseDockManager'#9#10'LCLVersion'#6#6'0.9.29'#0#0
|
||||
]);
|
||||
@ -188,7 +188,7 @@ end;
|
||||
{$ENDIF}
|
||||
|
||||
initialization
|
||||
{$I ffloatingsite.lrs}
|
||||
{.$I ffloatingsite.lrs}
|
||||
|
||||
end.
|
||||
|
||||
|
||||
@ -72,8 +72,8 @@ type
|
||||
protected //event handlers
|
||||
procedure FormEndDock(Sender, Target: TObject; X, Y: Integer);
|
||||
protected //utilities
|
||||
function ReloadForm(const AName: string; fMultiInst: boolean): TWinControl; virtual;
|
||||
function WrapDockable(Client: TControl): TFloatingSite;
|
||||
function ReloadForm(const AName: string; fMultiInst: boolean; fVisible: boolean): TWinControl; virtual;
|
||||
function WrapDockable(Client: TControl; fVisible: boolean): TFloatingSite;
|
||||
private
|
||||
LastPanel: TDockPanel; //last elastic panel created
|
||||
{$IFDEF ownPanels}
|
||||
@ -88,8 +88,8 @@ type
|
||||
destructor Destroy; override;
|
||||
procedure AddElasticSites(AForm: TCustomForm; Sides: sDockSides);
|
||||
function CreateDockable(const AName: string;
|
||||
fMultiInst: boolean; fWrap: boolean = True): TWinControl;
|
||||
function MakeDockable(AForm: TWinControl; fWrap: boolean = True): TForm;
|
||||
fMultiInst: boolean; fWrap: boolean = True; fVisible: boolean = False): TWinControl;
|
||||
function MakeDockable(AForm: TWinControl; fWrap: boolean = True; fVisible: boolean = False): TForm;
|
||||
procedure DumpSites;
|
||||
//persistence
|
||||
procedure LoadFromStream(Stream: TStream);
|
||||
@ -220,7 +220,7 @@ begin
|
||||
end;
|
||||
|
||||
function TDockMaster.CreateDockable(const AName: string;
|
||||
fMultiInst: boolean; fWrap: boolean): TWinControl;
|
||||
fMultiInst: boolean; fWrap: boolean; fVisible: boolean): TWinControl;
|
||||
begin
|
||||
(* Create a dockable form, based on its name.
|
||||
Used also to restore a layout.
|
||||
@ -230,15 +230,15 @@ Options (to come or to be removed)
|
||||
otherwise an already existing instance is returned. (really returned?)
|
||||
*)
|
||||
//get the form
|
||||
Result := ReloadForm(AName, fMultiInst);
|
||||
Result := ReloadForm(AName, fMultiInst, False);
|
||||
if Result = nil then
|
||||
exit;
|
||||
MakeDockable(Result, fWrap);
|
||||
MakeDockable(Result, fWrap, fVisible);
|
||||
//problem with first show?
|
||||
//Result.Invalidate; - doesn't help
|
||||
end;
|
||||
|
||||
function TDockMaster.MakeDockable(AForm: TWinControl; fWrap: boolean): TForm;
|
||||
function TDockMaster.MakeDockable(AForm: TWinControl; fWrap, fVisible: boolean): TForm;
|
||||
var
|
||||
Site: TFloatingSite absolute Result;
|
||||
Res: TWinControlAccess absolute AForm;
|
||||
@ -259,7 +259,7 @@ begin
|
||||
Res.OnEndDock := @FormEndDock; //float into default host site
|
||||
{$ENDIF}
|
||||
AForm.DisableAlign;
|
||||
Site := WrapDockable(AForm);
|
||||
Site := WrapDockable(AForm, fVisible);
|
||||
AForm.EnableAlign;
|
||||
end;
|
||||
//IDE?
|
||||
@ -293,7 +293,7 @@ begin
|
||||
//not found
|
||||
Result := inherited ReloadControl(AName, Site);
|
||||
if Result = nil then
|
||||
Result := ReloadForm(AName, True);
|
||||
Result := ReloadForm(AName, False, True);
|
||||
end;
|
||||
|
||||
procedure TDockMaster.FormEndDock(Sender, Target: TObject; X, Y: Integer);
|
||||
@ -318,7 +318,7 @@ begin
|
||||
ctl := Sender as TControl;
|
||||
//if not (csDestroying in ctl.ComponentState) and (ctl.HostDockSite = nil) then begin
|
||||
//if (ctl.HostDockSite = nil) then
|
||||
WrapDockable(ctl);
|
||||
WrapDockable(ctl, True);
|
||||
end;
|
||||
|
||||
procedure TDockMaster.LoadFromFile(const AName: string);
|
||||
@ -395,7 +395,7 @@ var
|
||||
begin
|
||||
(* AName is <align><form>
|
||||
*)
|
||||
hcomp := self.ReloadForm(FormName, True); //try multi-instance first
|
||||
hcomp := self.ReloadForm(FormName, True, False); //try multi-instance first
|
||||
if host <> nil then begin
|
||||
AddElasticSites(host, [aln]);
|
||||
Result := LastPanel; //found or created
|
||||
@ -403,6 +403,7 @@ var
|
||||
Result.BoundsRect := SiteRec.Extent;
|
||||
Result.AutoExpand := SiteRec.AutoExpand;
|
||||
Result.EnableAlign;
|
||||
Result.Visible := True;
|
||||
exit;
|
||||
end;
|
||||
//failed
|
||||
@ -598,7 +599,7 @@ begin
|
||||
end;
|
||||
|
||||
function TDockMaster.ReloadForm(const AName: string;
|
||||
fMultiInst: boolean): TWinControl;
|
||||
fMultiInst: boolean; fVisible: boolean): TWinControl;
|
||||
var
|
||||
//instname: string
|
||||
basename: string;
|
||||
@ -681,13 +682,7 @@ begin
|
||||
//search/create ourselves
|
||||
fo := Owner; //our owner also owns the forms
|
||||
if AName = '' then begin
|
||||
{$IFDEF new}
|
||||
Result := TForm(TForm.NewInstance);
|
||||
//Result.DisableAlign;
|
||||
Result.Create(fo); //named Form1, Form2... - not now???
|
||||
{$ELSE}
|
||||
Result := TForm.Create(fo); //named Form1, Form2... - not now???
|
||||
{$ENDIF}
|
||||
end else begin
|
||||
//create new instance
|
||||
//DebugLn('!!! create new: ', AName);
|
||||
@ -697,21 +692,16 @@ begin
|
||||
DebugLn(basename , ' is not a registered class');
|
||||
exit(nil); //bad form name
|
||||
end;
|
||||
{$IFDEF new}
|
||||
Result := TWinControl(fc.NewInstance);
|
||||
Result.DisableAlign;
|
||||
Result.Create(fo);
|
||||
{$ELSE}
|
||||
Result := TWinControl(fc.Create(fo));
|
||||
{$ENDIF}
|
||||
if (AName <> '') and (Result.Name <> AName) then
|
||||
TryRename(Result, AName);
|
||||
end;
|
||||
//if not DisableUpdate then Result.EnableAlign;
|
||||
//Result.Visible := True; //required for docking
|
||||
if fVisible then
|
||||
Result.Visible := True;
|
||||
end;
|
||||
|
||||
function TDockMaster.WrapDockable(Client: TControl): TFloatingSite;
|
||||
function TDockMaster.WrapDockable(Client: TControl; fVisible: boolean): TFloatingSite;
|
||||
var
|
||||
Site: TFloatingSite absolute Result;
|
||||
ctl: TControlAccess absolute Client;
|
||||
@ -742,10 +732,8 @@ begin
|
||||
//retry make client auto-dockable
|
||||
ctl.DragKind := dkDock;
|
||||
ctl.DragMode := dmAutomatic;
|
||||
{$IFDEF ForceVisible}
|
||||
Client.Visible := True;
|
||||
{$ENDIF}
|
||||
Client.ManualDock(Site);
|
||||
Client.Visible := True; //shown only if Site is visible
|
||||
//DebugLn('After Wrap: ', DbgS(Site.BoundsRect));
|
||||
|
||||
if ForIDE then begin
|
||||
@ -754,7 +742,8 @@ begin
|
||||
//Client.Left := 0;
|
||||
Site.DockManager.ResetBounds(True);
|
||||
end;
|
||||
Site.Visible := True;
|
||||
if fVisible then;
|
||||
Site.Visible := True;
|
||||
except
|
||||
DebugLn('error WrapDockable: ' + Client.Name);
|
||||
if Client.HostDockSite <> Site then
|
||||
|
||||
Loading…
Reference in New Issue
Block a user