mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-13 11:29:19 +02:00
lcl: Patch for docking: InsertControl (from Hans-Peter Diettrich, mantis #0012909)
git-svn-id: trunk@18094 -
This commit is contained in:
parent
968747c675
commit
c92465fa27
@ -1916,6 +1916,7 @@ type
|
|||||||
function GetNextVisibleZone: TDockZone;
|
function GetNextVisibleZone: TDockZone;
|
||||||
function NextVisible: TDockZone;
|
function NextVisible: TDockZone;
|
||||||
function PrevVisible: TDockZone;
|
function PrevVisible: TDockZone;
|
||||||
|
procedure AddSibling(NewZone: TDockZone; InsertAt: TAlign);
|
||||||
procedure AddAsFirstChild(NewChildZone: TDockZone);
|
procedure AddAsFirstChild(NewChildZone: TDockZone);
|
||||||
procedure AddAsLastChild(NewChildZone: TDockZone);
|
procedure AddAsLastChild(NewChildZone: TDockZone);
|
||||||
procedure ReplaceChild(OldChild, NewChild: TDockZone);
|
procedure ReplaceChild(OldChild, NewChild: TDockZone);
|
||||||
@ -2050,7 +2051,6 @@ type
|
|||||||
procedure DeleteZone(Zone: TDockZone);
|
procedure DeleteZone(Zone: TDockZone);
|
||||||
procedure SetDockSite(const AValue: TWinControl);
|
procedure SetDockSite(const AValue: TWinControl);
|
||||||
protected
|
protected
|
||||||
procedure AdjustDockRect(AControl: TControl; var ARect: TRect); virtual;
|
|
||||||
function HitTest(const MousePos: TPoint; var HTFlag: Integer): TControl; virtual;
|
function HitTest(const MousePos: TPoint; var HTFlag: Integer): TControl; virtual;
|
||||||
procedure PaintDockFrame(ACanvas: TCanvas; AControl: TControl;
|
procedure PaintDockFrame(ACanvas: TCanvas; AControl: TControl;
|
||||||
const ARect: TRect); virtual;
|
const ARect: TRect); virtual;
|
||||||
@ -2061,6 +2061,7 @@ type
|
|||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure BeginUpdate; override;
|
procedure BeginUpdate; override;
|
||||||
procedure EndUpdate; override;
|
procedure EndUpdate; override;
|
||||||
|
procedure AdjustDockRect(AControl: TControl; var ARect: TRect); virtual;
|
||||||
procedure GetControlBounds(AControl: TControl;
|
procedure GetControlBounds(AControl: TControl;
|
||||||
out ControlBounds: TRect); override;
|
out ControlBounds: TRect); override;
|
||||||
procedure InsertControl(AControl: TControl; InsertAt: TAlign;
|
procedure InsertControl(AControl: TControl; InsertAt: TAlign;
|
||||||
|
@ -118,14 +118,19 @@ var
|
|||||||
begin
|
begin
|
||||||
//determine drop zone
|
//determine drop zone
|
||||||
if DropCtl = nil then
|
if DropCtl = nil then
|
||||||
DropZone := RootZone
|
begin
|
||||||
|
DropZone := RootZone;
|
||||||
|
R := DockSite.ClientRect;
|
||||||
|
end
|
||||||
else
|
else
|
||||||
|
begin
|
||||||
DropZone := RootZone.FindZone(DropCtl);
|
DropZone := RootZone.FindZone(DropCtl);
|
||||||
|
if DropZone = nil then
|
||||||
//get the zone extent.
|
DropZone := RootZone;
|
||||||
//r := dzone.FBounds; //todo: doesn't work
|
//get the zone extent.
|
||||||
with DropZone do
|
with DropZone do
|
||||||
R := Rect(Left, Top, Width, Height);
|
R := Rect(Left, Top, Width, Height);
|
||||||
|
end;
|
||||||
|
|
||||||
// if there are no zones then use the whole rect
|
// if there are no zones then use the whole rect
|
||||||
// else split drop zone
|
// else split drop zone
|
||||||
|
@ -290,6 +290,29 @@ begin
|
|||||||
inc(FChildCount);
|
inc(FChildCount);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TDockZone.AddSibling(NewZone: TDockZone; InsertAt: TAlign);
|
||||||
|
var
|
||||||
|
LinkAfter: TDockZone;
|
||||||
|
begin
|
||||||
|
case InsertAt of
|
||||||
|
alLeft, alTop: LinkAfter := FPrevSibling;
|
||||||
|
alRight, alBottom: LinkAfter := Self;
|
||||||
|
else
|
||||||
|
raise Exception.Create('TDockZone.AddSibling: unhandled insertion');
|
||||||
|
end;
|
||||||
|
if LinkAfter = nil then
|
||||||
|
Parent.AddAsFirstChild(NewZone)
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
NewZone.FPrevSibling := LinkAfter;
|
||||||
|
NewZone.FNextSibling := LinkAfter.NextSibling;
|
||||||
|
NewZone.FParentZone := Parent;
|
||||||
|
if LinkAfter.NextSibling <> nil then
|
||||||
|
LinkAfter.NextSibling.FPrevSibling := NewZone;
|
||||||
|
LinkAfter.FNextSibling := NewZone;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TDockZone.ReplaceChild(OldChild, NewChild: TDockZone);
|
procedure TDockZone.ReplaceChild(OldChild, NewChild: TDockZone);
|
||||||
begin
|
begin
|
||||||
NewChild.FParentZone := Self;
|
NewChild.FParentZone := Self;
|
||||||
|
@ -1318,10 +1318,8 @@ begin
|
|||||||
RaiseGDBException('TLazDockTree.InsertControl Inconsistency DropZone.Orientation<>NewOrientation');
|
RaiseGDBException('TLazDockTree.InsertControl Inconsistency DropZone.Orientation<>NewOrientation');
|
||||||
|
|
||||||
// insert new node
|
// insert new node
|
||||||
if InsertAt in [alLeft, alTop] then
|
//DoDi: should insert relative to dropzone, not at begin/end of the parent zone
|
||||||
DropZone.Parent.AddAsFirstChild(NewZone)
|
DropZone.AddSibling(NewZone, InsertAt);
|
||||||
else
|
|
||||||
DropZone.Parent.AddAsLastChild(NewZone);
|
|
||||||
|
|
||||||
// add AControl to DockSite
|
// add AControl to DockSite
|
||||||
PrepareControlForResize(AControl);
|
PrepareControlForResize(AControl);
|
||||||
|
Loading…
Reference in New Issue
Block a user