mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-26 12:47:17 +01:00
IDE: using IDEDockmaster.CloseAll
git-svn-id: trunk@26010 -
This commit is contained in:
parent
d35da02263
commit
f0e6138cdc
@ -280,6 +280,7 @@ type
|
|||||||
TAnchorDockManager = class(TDockManager)
|
TAnchorDockManager = class(TDockManager)
|
||||||
private
|
private
|
||||||
FDockSite: TAnchorDockHostSite;
|
FDockSite: TAnchorDockHostSite;
|
||||||
|
FSite: TWinControl;
|
||||||
public
|
public
|
||||||
constructor Create(ADockSite: TWinControl); override;
|
constructor Create(ADockSite: TWinControl); override;
|
||||||
procedure GetControlBounds(Control: TControl; out AControlBounds: TRect);
|
procedure GetControlBounds(Control: TControl; out AControlBounds: TRect);
|
||||||
@ -294,6 +295,7 @@ type
|
|||||||
procedure SaveToStream(Stream: TStream); override;
|
procedure SaveToStream(Stream: TStream); override;
|
||||||
function GetDockEdge(ADockObject: TDragDockObject): boolean; override;
|
function GetDockEdge(ADockObject: TDragDockObject): boolean; override;
|
||||||
property DockSite: TAnchorDockHostSite read FDockSite;
|
property DockSite: TAnchorDockHostSite read FDockSite;
|
||||||
|
property Site: TWinControl read FSite;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TAnchorDockMaster }
|
{ TAnchorDockMaster }
|
||||||
@ -349,6 +351,7 @@ type
|
|||||||
procedure MakeDockable(AControl: TControl; Show: boolean = true;
|
procedure MakeDockable(AControl: TControl; Show: boolean = true;
|
||||||
BringToFront: boolean = false;
|
BringToFront: boolean = false;
|
||||||
AddDockHeader: boolean = true);
|
AddDockHeader: boolean = true);
|
||||||
|
procedure MakeVisible(AControl: TControl; SwitchPages: boolean);
|
||||||
function ShowControl(ControlName: string; BringToFront: boolean = false
|
function ShowControl(ControlName: string; BringToFront: boolean = false
|
||||||
): TControl;
|
): TControl;
|
||||||
procedure CloseAll;
|
procedure CloseAll;
|
||||||
@ -956,21 +959,6 @@ end;
|
|||||||
|
|
||||||
procedure TAnchorDockMaster.MakeDockable(AControl: TControl; Show: boolean;
|
procedure TAnchorDockMaster.MakeDockable(AControl: TControl; Show: boolean;
|
||||||
BringToFront: boolean; AddDockHeader: boolean);
|
BringToFront: boolean; AddDockHeader: boolean);
|
||||||
|
|
||||||
procedure ShowSite(Site: TAnchorDockHostSite);
|
|
||||||
var
|
|
||||||
CurControl: TControl;
|
|
||||||
begin
|
|
||||||
CurControl:=Site;
|
|
||||||
while CurControl<>nil do begin
|
|
||||||
CurControl.Visible:=true;
|
|
||||||
if BringToFront and (CurControl is TAnchorDockPage) then
|
|
||||||
TAnchorDockPageControl(CurControl.Parent).PageIndex:=
|
|
||||||
TAnchorDockPage(CurControl).PageIndex;
|
|
||||||
CurControl:=CurControl.Parent;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
var
|
var
|
||||||
Site: TAnchorDockHostSite;
|
Site: TAnchorDockHostSite;
|
||||||
begin
|
begin
|
||||||
@ -1017,7 +1005,7 @@ begin
|
|||||||
adrsNotSupportedHasParent, [DbgSName(AControl), DbgSName(AControl)]));
|
adrsNotSupportedHasParent, [DbgSName(AControl), DbgSName(AControl)]));
|
||||||
end;
|
end;
|
||||||
if (Site<>nil) and Show then
|
if (Site<>nil) and Show then
|
||||||
ShowSite(Site);
|
MakeVisible(Site,BringToFront);
|
||||||
finally
|
finally
|
||||||
AControl.EnableAutoSizing;
|
AControl.EnableAutoSizing;
|
||||||
end;
|
end;
|
||||||
@ -1026,6 +1014,18 @@ begin
|
|||||||
GetParentForm(Site).BringToFront;
|
GetParentForm(Site).BringToFront;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TAnchorDockMaster.MakeVisible(AControl: TControl; SwitchPages: boolean
|
||||||
|
);
|
||||||
|
begin
|
||||||
|
while AControl<>nil do begin
|
||||||
|
AControl.Visible:=true;
|
||||||
|
if SwitchPages and (AControl is TAnchorDockPage) then
|
||||||
|
TAnchorDockPageControl(AControl.Parent).PageIndex:=
|
||||||
|
TAnchorDockPage(AControl).PageIndex;
|
||||||
|
AControl:=AControl.Parent;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
function TAnchorDockMaster.ShowControl(ControlName: string;
|
function TAnchorDockMaster.ShowControl(ControlName: string;
|
||||||
BringToFront: boolean): TControl;
|
BringToFront: boolean): TControl;
|
||||||
begin
|
begin
|
||||||
@ -3107,8 +3107,8 @@ end;
|
|||||||
constructor TAnchorDockManager.Create(ADockSite: TWinControl);
|
constructor TAnchorDockManager.Create(ADockSite: TWinControl);
|
||||||
begin
|
begin
|
||||||
inherited Create(ADockSite);
|
inherited Create(ADockSite);
|
||||||
if not (ADockSite is TAnchorDockHostSite) then
|
FSite:=ADockSite;
|
||||||
raise Exception.Create('TAnchorDockManager.Create not supported: '+DbgSName(ADockSite));
|
if (ADockSite is TAnchorDockHostSite) then
|
||||||
FDockSite:=TAnchorDockHostSite(ADockSite);
|
FDockSite:=TAnchorDockHostSite(ADockSite);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -3122,12 +3122,15 @@ end;
|
|||||||
procedure TAnchorDockManager.InsertControl(Control: TControl; InsertAt: TAlign;
|
procedure TAnchorDockManager.InsertControl(Control: TControl; InsertAt: TAlign;
|
||||||
DropCtl: TControl);
|
DropCtl: TControl);
|
||||||
begin
|
begin
|
||||||
debugln(['TAnchorDockManager.InsertControl DockSite="',DockSite.Caption,'" Control=',Control,' InsertAt=',dbgs(InsertAt),' DropCtl=',DbgSName(DropCtl)]);
|
if DockSite<>nil then
|
||||||
|
debugln(['TAnchorDockManager.InsertControl DockSite="',DockSite.Caption,'" Control=',DbgSName(Control),' InsertAt=',dbgs(InsertAt),' DropCtl=',DbgSName(DropCtl)])
|
||||||
|
else
|
||||||
|
debugln(['TAnchorDockManager.InsertControl DockSite=nil Site="',DbgSName(Site),'" Control=',DbgSName(Control),' InsertAt=',dbgs(InsertAt),' DropCtl=',DbgSName(DropCtl)])
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TAnchorDockManager.LoadFromStream(Stream: TStream);
|
procedure TAnchorDockManager.LoadFromStream(Stream: TStream);
|
||||||
begin
|
begin
|
||||||
debugln(['TAnchorDockManager.LoadFromStream TODO DockSite="',DockSite.Caption,'"']);
|
debugln(['TAnchorDockManager.LoadFromStream TODO Site="',DbgSName(Site),'"']);
|
||||||
if Stream=nil then ;
|
if Stream=nil then ;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -3142,33 +3145,34 @@ var
|
|||||||
Offset: TPoint;
|
Offset: TPoint;
|
||||||
Inside: Boolean;
|
Inside: Boolean;
|
||||||
begin
|
begin
|
||||||
Inside:=(DropCtl=DockSite) or (DockSite.Parent<>nil);
|
Inside:=(DropCtl=Site) or (Site.Parent<>nil);
|
||||||
case DropAlign of
|
case DropAlign of
|
||||||
alLeft:
|
alLeft:
|
||||||
if Inside then
|
if Inside then
|
||||||
DockRect:=Rect(0,0,Min(Client.Width,DockSite.ClientWidth div 2),DockSite.ClientHeight)
|
DockRect:=Rect(0,0,Min(Client.Width,Site.ClientWidth div 2),Site.ClientHeight)
|
||||||
else
|
else
|
||||||
DockRect:=Rect(-Client.Width,0,0,DockSite.ClientHeight);
|
DockRect:=Rect(-Client.Width,0,0,Site.ClientHeight);
|
||||||
alRight:
|
alRight:
|
||||||
if Inside then begin
|
if Inside then begin
|
||||||
DockRect:=Rect(0,0,Min(Client.Width,DockSite.Width div 2),DockSite.ClientHeight);
|
DockRect:=Rect(0,0,Min(Client.Width,Site.Width div 2),Site.ClientHeight);
|
||||||
OffsetRect(DockRect,DockSite.ClientWidth-DockRect.Right,0);
|
OffsetRect(DockRect,Site.ClientWidth-DockRect.Right,0);
|
||||||
end else
|
end else
|
||||||
DockRect:=Bounds(DockSite.ClientWidth,0,Client.Width,DockSite.ClientHeight);
|
DockRect:=Bounds(Site.ClientWidth,0,Client.Width,Site.ClientHeight);
|
||||||
alTop:
|
alTop:
|
||||||
if Inside then
|
if Inside then
|
||||||
DockRect:=Rect(0,0,DockSite.ClientWidth,Min(Client.Height,DockSite.ClientHeight div 2))
|
DockRect:=Rect(0,0,Site.ClientWidth,Min(Client.Height,Site.ClientHeight div 2))
|
||||||
else
|
else
|
||||||
DockRect:=Rect(0,-Client.Height,DockSite.ClientWidth,0);
|
DockRect:=Rect(0,-Client.Height,Site.ClientWidth,0);
|
||||||
alBottom:
|
alBottom:
|
||||||
if Inside then begin
|
if Inside then begin
|
||||||
DockRect:=Rect(0,0,DockSite.ClientWidth,Min(Client.Height,DockSite.ClientHeight div 2));
|
DockRect:=Rect(0,0,Site.ClientWidth,Min(Client.Height,Site.ClientHeight div 2));
|
||||||
OffsetRect(DockRect,0,DockSite.ClientHeight-DockRect.Bottom);
|
OffsetRect(DockRect,0,Site.ClientHeight-DockRect.Bottom);
|
||||||
end else
|
end else
|
||||||
DockRect:=Bounds(0,DockSite.ClientHeight,DockSite.ClientWidth,Client.Height);
|
DockRect:=Bounds(0,Site.ClientHeight,Site.ClientWidth,Client.Height);
|
||||||
alClient:
|
alClient:
|
||||||
begin
|
begin
|
||||||
// paged docking => show this as center
|
// paged docking => show center
|
||||||
|
if DockSite<>nil then
|
||||||
DockRect:=DockSite.GetPageArea;
|
DockRect:=DockSite.GetPageArea;
|
||||||
end;
|
end;
|
||||||
else
|
else
|
||||||
@ -3180,18 +3184,22 @@ end;
|
|||||||
|
|
||||||
procedure TAnchorDockManager.RemoveControl(Control: TControl);
|
procedure TAnchorDockManager.RemoveControl(Control: TControl);
|
||||||
begin
|
begin
|
||||||
debugln(['TAnchorDockManager.RemoveControl DockSite="',DockSite.Caption,'" Control=',DbgSName(Control)]);
|
if DockSite<>nil then
|
||||||
|
debugln(['TAnchorDockManager.RemoveControl DockSite="',DockSite.Caption,'" Control=',DbgSName(Control)])
|
||||||
|
else
|
||||||
|
debugln(['TAnchorDockManager.RemoveControl Site="',DbgSName(Site),'" Control=',DbgSName(Control)])
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TAnchorDockManager.ResetBounds(Force: Boolean);
|
procedure TAnchorDockManager.ResetBounds(Force: Boolean);
|
||||||
begin
|
begin
|
||||||
debugln(['TAnchorDockManager.ResetBounds DockSite="',DockSite.Caption,'" Force=',Force]);
|
if DockSite=nil then
|
||||||
|
debugln(['TAnchorDockManager.ResetBounds Site="',Site.Caption,'" Force=',Force,' ',dbgs(Site.ClientRect)]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TAnchorDockManager.SaveToStream(Stream: TStream);
|
procedure TAnchorDockManager.SaveToStream(Stream: TStream);
|
||||||
begin
|
begin
|
||||||
if STream=nil then ;
|
if Stream=nil then ;
|
||||||
debugln(['TAnchorDockManager.SaveToStream TODO DockSite="',DockSite.Caption,'"']);
|
debugln(['TAnchorDockManager.SaveToStream TODO Site="',DbgSName(Site),'"']);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TAnchorDockManager.GetDockEdge(ADockObject: TDragDockObject): boolean;
|
function TAnchorDockManager.GetDockEdge(ADockObject: TDragDockObject): boolean;
|
||||||
@ -3210,8 +3218,8 @@ var
|
|||||||
var
|
var
|
||||||
p: TPoint;
|
p: TPoint;
|
||||||
begin
|
begin
|
||||||
p:=DockSite.ScreenToClient(ADockObject.DragPos);
|
p:=Site.ScreenToClient(ADockObject.DragPos);
|
||||||
if PtInRect(DockSite.GetPageArea,p) then begin
|
if (DockSite<>nil) and PtInRect(DockSite.GetPageArea,p) then begin
|
||||||
// page docking
|
// page docking
|
||||||
ADockObject.DropAlign:=alClient;
|
ADockObject.DropAlign:=alClient;
|
||||||
end else begin
|
end else begin
|
||||||
@ -3219,17 +3227,17 @@ begin
|
|||||||
// check side
|
// check side
|
||||||
BestDistance:=High(Integer);
|
BestDistance:=High(Integer);
|
||||||
FindMinDistance(alLeft,p.X);
|
FindMinDistance(alLeft,p.X);
|
||||||
FindMinDistance(alRight,DockSite.ClientWidth-p.X);
|
FindMinDistance(alRight,Site.ClientWidth-p.X);
|
||||||
FindMinDistance(alTop,p.Y);
|
FindMinDistance(alTop,p.Y);
|
||||||
FindMinDistance(alBottom,DockSite.ClientHeight-p.Y);
|
FindMinDistance(alBottom,Site.ClientHeight-p.Y);
|
||||||
|
|
||||||
// check inside
|
// check inside
|
||||||
if ((ADockObject.DropAlign=alLeft) and (p.X>=0))
|
if ((ADockObject.DropAlign=alLeft) and (p.X>=0))
|
||||||
or ((ADockObject.DropAlign=alTop) and (p.Y>=0))
|
or ((ADockObject.DropAlign=alTop) and (p.Y>=0))
|
||||||
or ((ADockObject.DropAlign=alRight) and (p.X<DockSite.ClientWidth))
|
or ((ADockObject.DropAlign=alRight) and (p.X<Site.ClientWidth))
|
||||||
or ((ADockObject.DropAlign=alBottom) and (p.Y<DockSite.ClientHeight))
|
or ((ADockObject.DropAlign=alBottom) and (p.Y<Site.ClientHeight))
|
||||||
then
|
then
|
||||||
ADockObject.DropOnControl:=DockSite
|
ADockObject.DropOnControl:=Site
|
||||||
else
|
else
|
||||||
ADockObject.DropOnControl:=nil;
|
ADockObject.DropOnControl:=nil;
|
||||||
end;
|
end;
|
||||||
|
|||||||
20
ide/main.pp
20
ide/main.pp
@ -640,7 +640,6 @@ type
|
|||||||
procedure SetupRemoteControl;
|
procedure SetupRemoteControl;
|
||||||
procedure SetupIDEWindowsLayout;
|
procedure SetupIDEWindowsLayout;
|
||||||
procedure RestoreIDEWindows;
|
procedure RestoreIDEWindows;
|
||||||
procedure CloseIDEWindows;
|
|
||||||
procedure FreeIDEWindows;
|
procedure FreeIDEWindows;
|
||||||
function CloseQueryIDEWindows: boolean;
|
function CloseQueryIDEWindows: boolean;
|
||||||
|
|
||||||
@ -1702,7 +1701,10 @@ procedure TMainIDE.MainIDEFormClose(Sender: TObject;
|
|||||||
begin
|
begin
|
||||||
DoCallNotifyHandler(lihtIDEClose);
|
DoCallNotifyHandler(lihtIDEClose);
|
||||||
SaveEnvironment;
|
SaveEnvironment;
|
||||||
CloseIDEWindows;
|
if IDEDockMaster<>nil then
|
||||||
|
IDEDockMaster.CloseAll
|
||||||
|
else
|
||||||
|
CloseAllForms;
|
||||||
SaveIncludeLinks;
|
SaveIncludeLinks;
|
||||||
InputHistories.Save;
|
InputHistories.Save;
|
||||||
PkgBoss.SaveSettings;
|
PkgBoss.SaveSettings;
|
||||||
@ -2242,20 +2244,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.CloseIDEWindows;
|
|
||||||
var
|
|
||||||
i: Integer;
|
|
||||||
AForm: TCustomForm;
|
|
||||||
begin
|
|
||||||
i:=Screen.CustomFormCount-1;
|
|
||||||
while i>=0 do begin
|
|
||||||
AForm:=Screen.CustomForms[i];
|
|
||||||
if AForm<>MainIDEBar then
|
|
||||||
AForm.Close;
|
|
||||||
i:=Math.Min(i,Screen.CustomFormCount)-1;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TMainIDE.FreeIDEWindows;
|
procedure TMainIDE.FreeIDEWindows;
|
||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
|
|||||||
@ -217,6 +217,7 @@ var
|
|||||||
|
|
||||||
procedure MakeIDEWindowDockable(AControl: TWinControl);
|
procedure MakeIDEWindowDockable(AControl: TWinControl);
|
||||||
procedure MakeIDEWindowDockSite(AForm: TCustomForm);
|
procedure MakeIDEWindowDockSite(AForm: TCustomForm);
|
||||||
|
procedure CloseAllForms;
|
||||||
|
|
||||||
procedure Register;
|
procedure Register;
|
||||||
|
|
||||||
@ -234,6 +235,21 @@ begin
|
|||||||
IDEDockMaster.MakeIDEWindowDockSite(AForm);
|
IDEDockMaster.MakeIDEWindowDockSite(AForm);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure CloseAllForms;
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
AForm: TCustomForm;
|
||||||
|
begin
|
||||||
|
i:=Screen.CustomFormCount-1;
|
||||||
|
while i>=0 do begin
|
||||||
|
AForm:=Screen.CustomForms[i];
|
||||||
|
if AForm<>Application.MainForm then
|
||||||
|
AForm.Close;
|
||||||
|
dec(i);
|
||||||
|
if i>=Screen.CustomFormCount then i:=Screen.CustomFormCount-1;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure Register;
|
procedure Register;
|
||||||
begin
|
begin
|
||||||
RegisterComponents('Misc',[TIDEDialogLayoutStorage]);
|
RegisterComponents('Misc',[TIDEDialogLayoutStorage]);
|
||||||
@ -727,18 +743,8 @@ end;
|
|||||||
{ TIDEDockMaster }
|
{ TIDEDockMaster }
|
||||||
|
|
||||||
procedure TIDEDockMaster.CloseAll;
|
procedure TIDEDockMaster.CloseAll;
|
||||||
var
|
|
||||||
i: Integer;
|
|
||||||
AForm: TCustomForm;
|
|
||||||
begin
|
begin
|
||||||
i:=Screen.CustomFormCount-1;
|
CloseAllForms;
|
||||||
while i>=0 do begin
|
|
||||||
AForm:=Screen.CustomForms[i];
|
|
||||||
if AForm<>Application.MainForm then
|
|
||||||
AForm.Close;
|
|
||||||
dec(i);
|
|
||||||
if i>=Screen.CustomFormCount then i:=Screen.CustomFormCount-1;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user