mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-05 19:46:01 +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 NextVisible: TDockZone;
|
||||
function PrevVisible: TDockZone;
|
||||
procedure AddSibling(NewZone: TDockZone; InsertAt: TAlign);
|
||||
procedure AddAsFirstChild(NewChildZone: TDockZone);
|
||||
procedure AddAsLastChild(NewChildZone: TDockZone);
|
||||
procedure ReplaceChild(OldChild, NewChild: TDockZone);
|
||||
@ -2050,7 +2051,6 @@ type
|
||||
procedure DeleteZone(Zone: TDockZone);
|
||||
procedure SetDockSite(const AValue: TWinControl);
|
||||
protected
|
||||
procedure AdjustDockRect(AControl: TControl; var ARect: TRect); virtual;
|
||||
function HitTest(const MousePos: TPoint; var HTFlag: Integer): TControl; virtual;
|
||||
procedure PaintDockFrame(ACanvas: TCanvas; AControl: TControl;
|
||||
const ARect: TRect); virtual;
|
||||
@ -2061,6 +2061,7 @@ type
|
||||
destructor Destroy; override;
|
||||
procedure BeginUpdate; override;
|
||||
procedure EndUpdate; override;
|
||||
procedure AdjustDockRect(AControl: TControl; var ARect: TRect); virtual;
|
||||
procedure GetControlBounds(AControl: TControl;
|
||||
out ControlBounds: TRect); override;
|
||||
procedure InsertControl(AControl: TControl; InsertAt: TAlign;
|
||||
|
@ -118,14 +118,19 @@ var
|
||||
begin
|
||||
//determine drop zone
|
||||
if DropCtl = nil then
|
||||
DropZone := RootZone
|
||||
begin
|
||||
DropZone := RootZone;
|
||||
R := DockSite.ClientRect;
|
||||
end
|
||||
else
|
||||
begin
|
||||
DropZone := RootZone.FindZone(DropCtl);
|
||||
|
||||
if DropZone = nil then
|
||||
DropZone := RootZone;
|
||||
//get the zone extent.
|
||||
//r := dzone.FBounds; //todo: doesn't work
|
||||
with DropZone do
|
||||
R := Rect(Left, Top, Width, Height);
|
||||
end;
|
||||
|
||||
// if there are no zones then use the whole rect
|
||||
// else split drop zone
|
||||
|
@ -290,6 +290,29 @@ begin
|
||||
inc(FChildCount);
|
||||
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);
|
||||
begin
|
||||
NewChild.FParentZone := Self;
|
||||
|
@ -1318,10 +1318,8 @@ begin
|
||||
RaiseGDBException('TLazDockTree.InsertControl Inconsistency DropZone.Orientation<>NewOrientation');
|
||||
|
||||
// insert new node
|
||||
if InsertAt in [alLeft, alTop] then
|
||||
DropZone.Parent.AddAsFirstChild(NewZone)
|
||||
else
|
||||
DropZone.Parent.AddAsLastChild(NewZone);
|
||||
//DoDi: should insert relative to dropzone, not at begin/end of the parent zone
|
||||
DropZone.AddSibling(NewZone, InsertAt);
|
||||
|
||||
// add AControl to DockSite
|
||||
PrepareControlForResize(AControl);
|
||||
|
Loading…
Reference in New Issue
Block a user