mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-20 13:59:15 +02:00
parent
34fde7fc8c
commit
d3572806a8
@ -38,7 +38,8 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, LCLType, Forms, Controls, Graphics, Dialogs,
|
Classes, SysUtils, LCLType, Forms, Controls, Graphics, Dialogs,
|
||||||
ComCtrls, StdCtrls, DebuggerDlg, BaseDebugManager, IDEWindowIntf, InputHistory,debugger;
|
ComCtrls, StdCtrls, DebuggerDlg, BaseDebugManager, IDEWindowIntf,
|
||||||
|
InputHistory, Debugger;
|
||||||
|
|
||||||
type
|
type
|
||||||
|
|
||||||
@ -77,7 +78,6 @@ type
|
|||||||
public
|
public
|
||||||
constructor Create(TheOwner: TComponent); override;
|
constructor Create(TheOwner: TComponent); override;
|
||||||
property FindText: string read GetFindText write SetFindText;
|
property FindText: string read GetFindText write SetFindText;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
@ -69,7 +69,7 @@
|
|||||||
|
|
||||||
ToDo:
|
ToDo:
|
||||||
- keep custom dock site content visible
|
- keep custom dock site content visible
|
||||||
- change custom dock site title only if some flag is set
|
- restore custom dock site splitter without resizing content, only resize docked site
|
||||||
- undock on hide
|
- undock on hide
|
||||||
- popup menu
|
- popup menu
|
||||||
- shrink side left, top, right, bottom
|
- shrink side left, top, right, bottom
|
||||||
@ -266,6 +266,7 @@ type
|
|||||||
function MakeSite(AControl: TControl): TAnchorDockHostSite;
|
function MakeSite(AControl: TControl): TAnchorDockHostSite;
|
||||||
procedure MoveAllControls(dx, dy: integer);
|
procedure MoveAllControls(dx, dy: integer);
|
||||||
procedure AlignControls(AControl: TControl; var ARect: TRect); override;
|
procedure AlignControls(AControl: TControl; var ARect: TRect); override;
|
||||||
|
function CheckIfOneControlHidden: boolean;
|
||||||
procedure DoDock(NewDockSite: TWinControl; var ARect: TRect); override;
|
procedure DoDock(NewDockSite: TWinControl; var ARect: TRect); override;
|
||||||
procedure SetParent(NewParent: TWinControl); override;
|
procedure SetParent(NewParent: TWinControl); override;
|
||||||
function HeaderNeedsShowing: boolean;
|
function HeaderNeedsShowing: boolean;
|
||||||
@ -396,6 +397,7 @@ type
|
|||||||
FPageAreaInPercent: integer;
|
FPageAreaInPercent: integer;
|
||||||
FPageClass: TAnchorDockPageClass;
|
FPageClass: TAnchorDockPageClass;
|
||||||
FPageControlClass: TAnchorDockPageControlClass;
|
FPageControlClass: TAnchorDockPageControlClass;
|
||||||
|
FQueueSimplify: Boolean;
|
||||||
FRestoreLayouts: TAnchorDockRestoreLayouts;
|
FRestoreLayouts: TAnchorDockRestoreLayouts;
|
||||||
FRestoring: boolean;
|
FRestoring: boolean;
|
||||||
FScaleOnResize: boolean;
|
FScaleOnResize: boolean;
|
||||||
@ -423,6 +425,7 @@ type
|
|||||||
procedure ChangeLockButtonClick(Sender: TObject);
|
procedure ChangeLockButtonClick(Sender: TObject);
|
||||||
procedure OptionsClick(Sender: TObject);
|
procedure OptionsClick(Sender: TObject);
|
||||||
procedure SetIdleConnected(const AValue: Boolean);
|
procedure SetIdleConnected(const AValue: Boolean);
|
||||||
|
procedure SetQueueSimplify(const AValue: Boolean);
|
||||||
procedure SetRestoring(const AValue: boolean);
|
procedure SetRestoring(const AValue: boolean);
|
||||||
protected
|
protected
|
||||||
fCloseBtnReferenceCount: integer;
|
fCloseBtnReferenceCount: integer;
|
||||||
@ -441,6 +444,7 @@ type
|
|||||||
procedure SetHideHeaderCaptionFloatingControl(const AValue: boolean);
|
procedure SetHideHeaderCaptionFloatingControl(const AValue: boolean);
|
||||||
procedure SetSplitterWidth(const AValue: integer);
|
procedure SetSplitterWidth(const AValue: integer);
|
||||||
procedure OnIdle(Sender: TObject; var Done: Boolean);
|
procedure OnIdle(Sender: TObject; var Done: Boolean);
|
||||||
|
procedure AsyncSimplify({%H-}Data: PtrInt);
|
||||||
public
|
public
|
||||||
constructor Create(AOwner: TComponent); override;
|
constructor Create(AOwner: TComponent); override;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -504,6 +508,7 @@ type
|
|||||||
function CreateSite(NamePrefix: string = '';
|
function CreateSite(NamePrefix: string = '';
|
||||||
DisableAutoSizing: boolean = true): TAnchorDockHostSite;
|
DisableAutoSizing: boolean = true): TAnchorDockHostSite;
|
||||||
function CreateSplitter(NamePrefix: string = ''): TAnchorDockSplitter;
|
function CreateSplitter(NamePrefix: string = ''): TAnchorDockSplitter;
|
||||||
|
property QueueSimplify: Boolean read FQueueSimplify write SetQueueSimplify;
|
||||||
|
|
||||||
// options
|
// options
|
||||||
property OnShowOptions: TADShowDockMasterOptionsEvent read FOnShowOptions write FOnShowOptions;
|
property OnShowOptions: TADShowDockMasterOptionsEvent read FOnShowOptions write FOnShowOptions;
|
||||||
@ -1544,6 +1549,12 @@ begin
|
|||||||
IdleConnected:=false;
|
IdleConnected:=false;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TAnchorDockMaster.AsyncSimplify(Data: PtrInt);
|
||||||
|
begin
|
||||||
|
FQueueSimplify:=false;
|
||||||
|
SimplifyPendingLayouts;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TAnchorDockMaster.ChangeLockButtonClick(Sender: TObject);
|
procedure TAnchorDockMaster.ChangeLockButtonClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
AllowDragging:=not AllowDragging;
|
AllowDragging:=not AllowDragging;
|
||||||
@ -1564,6 +1575,16 @@ begin
|
|||||||
Application.RemoveOnIdleHandler(@OnIdle);
|
Application.RemoveOnIdleHandler(@OnIdle);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TAnchorDockMaster.SetQueueSimplify(const AValue: Boolean);
|
||||||
|
begin
|
||||||
|
if FQueueSimplify=AValue then exit;
|
||||||
|
FQueueSimplify:=AValue;
|
||||||
|
if FQueueSimplify then
|
||||||
|
Application.QueueAsyncCall(@AsyncSimplify,0)
|
||||||
|
else
|
||||||
|
Application.RemoveAsyncCalls(Self);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TAnchorDockMaster.SetRestoring(const AValue: boolean);
|
procedure TAnchorDockMaster.SetRestoring(const AValue: boolean);
|
||||||
var
|
var
|
||||||
AComponent: TComponent;
|
AComponent: TComponent;
|
||||||
@ -1703,6 +1724,7 @@ var
|
|||||||
AControl: TControl;
|
AControl: TControl;
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
|
QueueSimplify:=false;
|
||||||
FreeAndNil(FRestoreLayouts);
|
FreeAndNil(FRestoreLayouts);
|
||||||
FreeAndNil(fPopupMenu);
|
FreeAndNil(fPopupMenu);
|
||||||
FreeAndNil(fTreeNameToDocker);
|
FreeAndNil(fTreeNameToDocker);
|
||||||
@ -2332,13 +2354,15 @@ begin
|
|||||||
then
|
then
|
||||||
exit;
|
exit;
|
||||||
if Application.Terminated then exit;
|
if Application.Terminated then exit;
|
||||||
debugln(['TAnchorDockMaster.NeedSimplify ',DbgSName(AControl),' Caption="',AControl.Caption,'"']);
|
//debugln(['TAnchorDockMaster.NeedSimplify ',DbgSName(AControl),' Caption="',AControl.Caption,'"']);
|
||||||
fNeedSimplify.Add(AControl);
|
fNeedSimplify.Add(AControl);
|
||||||
AControl.FreeNotification(Self);
|
AControl.FreeNotification(Self);
|
||||||
|
QueueSimplify:=true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TAnchorDockMaster.NeedFree(AControl: TControl);
|
procedure TAnchorDockMaster.NeedFree(AControl: TControl);
|
||||||
begin
|
begin
|
||||||
|
//debugln(['TAnchorDockMaster.NeedFree ',DbgSName(AControl),' ',csDestroying in AControl.ComponentState]);
|
||||||
if fNeedFree.IndexOf(AControl)>=0 then exit;
|
if fNeedFree.IndexOf(AControl)>=0 then exit;
|
||||||
if csDestroying in AControl.ComponentState then exit;
|
if csDestroying in AControl.ComponentState then exit;
|
||||||
fNeedFree.Add(AControl);
|
fNeedFree.Add(AControl);
|
||||||
@ -2367,15 +2391,17 @@ begin
|
|||||||
fNeedSimplify.Delete(i);
|
fNeedSimplify.Delete(i);
|
||||||
Changed:=true;
|
Changed:=true;
|
||||||
end else if (AControl is TAnchorDockHostSite) then begin
|
end else if (AControl is TAnchorDockHostSite) then begin
|
||||||
|
//debugln(['TAnchorDockMaster.SimplifyPendingLayouts ',DbgSName(AControl),' ',dbgs(TAnchorDockHostSite(AControl).SiteType),' UpdatingLayout=',TAnchorDockHostSite(AControl).UpdatingLayout]);
|
||||||
if not TAnchorDockHostSite(AControl).UpdatingLayout then begin
|
if not TAnchorDockHostSite(AControl).UpdatingLayout then begin
|
||||||
fNeedSimplify.Delete(i);
|
fNeedSimplify.Delete(i);
|
||||||
Changed:=true;
|
Changed:=true;
|
||||||
if TAnchorDockHostSite(AControl).SiteType=adhstNone then
|
if TAnchorDockHostSite(AControl).SiteType=adhstNone then
|
||||||
begin
|
begin
|
||||||
debugln(['TAnchorDockMaster.SimplifyPendingLayouts free empty site: ',dbgs(pointer(AControl)),' Caption="',AControl.Caption,'"']);
|
//debugln(['TAnchorDockMaster.SimplifyPendingLayouts free empty site: ',dbgs(pointer(AControl)),' Caption="',AControl.Caption,'"']);
|
||||||
NeedFree(AControl);
|
NeedFree(AControl);
|
||||||
end else
|
end else begin
|
||||||
TAnchorDockHostSite(AControl).Simplify;
|
TAnchorDockHostSite(AControl).Simplify;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end else if AControl is TAnchorDockPage then begin
|
end else if AControl is TAnchorDockPage then begin
|
||||||
fNeedSimplify.Delete(i);
|
fNeedSimplify.Delete(i);
|
||||||
@ -3256,11 +3282,19 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TAnchorDockHostSite.Simplify;
|
procedure TAnchorDockHostSite.Simplify;
|
||||||
|
var
|
||||||
|
AControl: TControl;
|
||||||
begin
|
begin
|
||||||
if (Pages<>nil) and (Pages.PageCount=1) then
|
if (Pages<>nil) and (Pages.PageCount=1) then
|
||||||
SimplifyPages
|
SimplifyPages
|
||||||
else if (SiteType=adhstOneControl) and (GetOneControl is TAnchorDockHostSite) then
|
else if (SiteType=adhstOneControl) then begin
|
||||||
SimplifyOneControl;
|
AControl:=GetOneControl;
|
||||||
|
debugln(['TAnchorDockHostSite.Simplify ',DbgSName(Self),' ',DbgSName(AControl)]);
|
||||||
|
if AControl is TAnchorDockHostSite then
|
||||||
|
SimplifyOneControl
|
||||||
|
else if (AControl=nil) or (csDestroying in AControl.ComponentState) then
|
||||||
|
DockMaster.NeedFree(Self);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TAnchorDockHostSite.SimplifyPages;
|
procedure TAnchorDockHostSite.SimplifyPages;
|
||||||
@ -3476,6 +3510,7 @@ var
|
|||||||
begin
|
begin
|
||||||
inherited AlignControls(AControl, ARect);
|
inherited AlignControls(AControl, ARect);
|
||||||
if csDestroying in ComponentState then exit;
|
if csDestroying in ComponentState then exit;
|
||||||
|
|
||||||
if DockMaster.ScaleOnResize and (not UpdatingLayout)
|
if DockMaster.ScaleOnResize and (not UpdatingLayout)
|
||||||
and (not DockMaster.Restoring) then begin
|
and (not DockMaster.Restoring) then begin
|
||||||
// scale splitters
|
// scale splitters
|
||||||
@ -3502,6 +3537,35 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TAnchorDockHostSite.CheckIfOneControlHidden: boolean;
|
||||||
|
var
|
||||||
|
Child: TControl;
|
||||||
|
begin
|
||||||
|
Result:=false;
|
||||||
|
//debugln(['TAnchorDockHostSite.CheckIfOneControlHidden ',DbgSName(Self),' UpdatingLayout=',UpdatingLayout,' Visible=',Visible,' Parent=',DbgSName(Parent),' csDestroying=',csDestroying in ComponentState,' SiteType=',dbgs(SiteType)]);
|
||||||
|
if UpdatingLayout or (not Visible)
|
||||||
|
or (csDestroying in ComponentState)
|
||||||
|
or (SiteType<>adhstOneControl)
|
||||||
|
then
|
||||||
|
exit;
|
||||||
|
Child:=GetOneControl;
|
||||||
|
if (Child=nil) then exit;
|
||||||
|
if Child.IsControlVisible then exit;
|
||||||
|
|
||||||
|
// docked child was hidden/closed
|
||||||
|
Result:=true;
|
||||||
|
// => undock
|
||||||
|
BeginUpdateLayout;
|
||||||
|
DisableAutoSizing;
|
||||||
|
debugln(['TAnchorDockHostSite.CheckIfOneControlHidden ',DbgSName(Self),' UpdatingLayout=',UpdatingLayout,' Visible=',Visible,' Parent=',DbgSName(Parent),' csDestroying=',csDestroying in ComponentState,' SiteType=',dbgs(SiteType),' Child=',DbgSName(Child),' Child.csDestroying=',csDestroying in Child.ComponentState]);
|
||||||
|
Visible:=false;
|
||||||
|
Parent:=nil;
|
||||||
|
EnableAutoSizing;
|
||||||
|
EndUpdateLayout;
|
||||||
|
if (not (Child is TCustomForm)) or (csDestroying in Child.ComponentState) then
|
||||||
|
Release;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TAnchorDockHostSite.DoDock(NewDockSite: TWinControl; var ARect: TRect
|
procedure TAnchorDockHostSite.DoDock(NewDockSite: TWinControl; var ARect: TRect
|
||||||
);
|
);
|
||||||
begin
|
begin
|
||||||
@ -3932,13 +3996,16 @@ begin
|
|||||||
Result:=CloseQuery;
|
Result:=CloseQuery;
|
||||||
if not Result then exit;
|
if not Result then exit;
|
||||||
|
|
||||||
DisableAutoSizing;
|
|
||||||
debugln(['TAnchorDockHostSite.CloseSite ',DbgSName(Self),' SiteType=',dbgs(SiteType)]);
|
debugln(['TAnchorDockHostSite.CloseSite ',DbgSName(Self),' SiteType=',dbgs(SiteType)]);
|
||||||
case SiteType of
|
case SiteType of
|
||||||
adhstNone:
|
adhstNone:
|
||||||
Release;
|
begin
|
||||||
|
Release;
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
adhstOneControl:
|
adhstOneControl:
|
||||||
begin
|
begin
|
||||||
|
DisableAutoSizing;
|
||||||
AControl:=GetOneControl;
|
AControl:=GetOneControl;
|
||||||
if AControl is TCustomForm then begin
|
if AControl is TCustomForm then begin
|
||||||
AForm:=TCustomForm(AControl);
|
AForm:=TCustomForm(AControl);
|
||||||
@ -3963,18 +4030,20 @@ begin
|
|||||||
else begin
|
else begin
|
||||||
Release;
|
Release;
|
||||||
AForm.Release;
|
AForm.Release;
|
||||||
|
exit;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end else begin
|
end else begin
|
||||||
Release;
|
|
||||||
AControl.Visible:=false;
|
AControl.Visible:=false;
|
||||||
|
Release;
|
||||||
|
exit;
|
||||||
end;
|
end;
|
||||||
Visible:=false;
|
Visible:=false;
|
||||||
Parent:=nil;
|
Parent:=nil;
|
||||||
|
EnableAutoSizing;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
EnableAutoSizing;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TAnchorDockHostSite.RemoveControl(AControl: TControl);
|
procedure TAnchorDockHostSite.RemoveControl(AControl: TControl);
|
||||||
|
Loading…
Reference in New Issue
Block a user