LCL: anchordocking: ManualFloat now calls DoUnDockClientMsg if HostDockSIte=nil and DockManager set

git-svn-id: trunk@14074 -
This commit is contained in:
mattias 2008-02-10 23:21:27 +00:00
parent c2d668eb0c
commit 11e7b203ca
4 changed files with 24 additions and 39 deletions

View File

@ -1116,9 +1116,9 @@ type
function ManualDock(NewDockSite: TWinControl;
DropControl: TControl = nil;
ControlSide: TAlign = alNone;
KeepDockSiteSize: Boolean = true): Boolean;
KeepDockSiteSize: Boolean = true): Boolean; dynamic;
function ManualFloat(TheScreenRect: TRect;
KeepDockSiteSize: Boolean = true): Boolean;
KeepDockSiteSize: Boolean = true): Boolean; dynamic;
function ReplaceDockedControl(Control: TControl; NewDockSite: TWinControl;
DropControl: TControl; ControlSide: TAlign): Boolean;
function Dragging: Boolean;
@ -1561,9 +1561,6 @@ type
procedure DoChildSizingChange(Sender: TObject); virtual;
procedure ResizeDelayedAutoSizeChildren; virtual;
function CanTab: Boolean; override;
function DoDragMsg(ADragMessage: TDragMessage; APosition: TPoint; ADragObject: TDragObject; ATarget: TControl; ADocking: Boolean):LRESULT; override;
function DoDockClientMsg(DragDockObject: TDragDockObject; Position: TPoint): boolean; virtual;
function DoUndockClientMsg(NewTarget, Client: TControl):boolean; virtual;
procedure CMShowingChanged(var Message: TLMessage); message CM_SHOWINGCHANGED;
procedure CMVisibleChanged(var TheMessage: TLMessage); message CM_VISIBLECHANGED;
procedure DoSendShowHideToInterface; virtual;
@ -1613,7 +1610,12 @@ type
procedure CNSysKeyUp(var Message: TLMKeyUp); message CN_SYSKEYUP;
procedure CNChar(var Message: TLMKeyUp); message CN_CHAR;
protected
// drag and drop
// drag and drop/dock
function DoDragMsg(ADragMessage: TDragMessage; APosition: TPoint;
ADragObject: TDragObject; ATarget:
TControl; ADocking: Boolean): LRESULT; override;
function DoDockClientMsg(DragDockObject: TDragDockObject; Position: TPoint): boolean; virtual;
function DoUndockClientMsg(NewTarget, Client: TControl):boolean; virtual;
procedure DoAddDockClient(Client: TControl; const ARect: TRect); dynamic;
procedure DockOver(Source: TDragDockObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); dynamic;

View File

@ -3490,9 +3490,16 @@ function TControl.ManualFloat(TheScreenRect: TRect;
var
FloatHost: TWinControl;
begin
// undock from old floating host dock site
Result := (HostDockSite=nil)
or HostDockSite.DoUndock(nil,Self,KeepDockSiteSize);
DebugLn(['TControl.ManualFloat ',DbgSName(Self)]);
// undock from old host dock site
if HostDockSite=nil then
begin
Result := true;
if Parent<>nil then
Parent.DoUndockClientMsg(nil,Self);
end else begin
Result := HostDockSite.DoUndock(nil,Self,KeepDockSiteSize);
end;
// create new float dock site and dock this control into it.
if Result then begin
FloatHost := CreateFloatingDockSite(TheScreenRect);

View File

@ -6996,8 +6996,9 @@ end;
function TWinControl.DoUnDockClientMsg(NewTarget, Client: TControl): boolean;
begin
Result := true;
DebugLn(['TWinControl.DoUnDockClientMsg ',DbgSName(Self),' ',DbgSName(Client),' ',DbgSName(Client.Parent)]);
if FUseDockManager and (FDockManager <> nil) then
FDockManager.RemoveControl(Client)
FDockManager.RemoveControl(Client);
end;
{------------------------------------------------------------------------------

View File

@ -213,8 +213,6 @@ type
procedure DeleteDockForm(ADockForm: TLazDockForm);
function GetAnchorDepth(AControl: TControl; Side: TAnchorKind): Integer;
function GetPreferredTitlePosition(AWidth, AHeight: integer): TAnchorKind;
procedure OnLazDockFormDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
public
constructor Create;
destructor Destroy; override;
@ -1521,32 +1519,6 @@ end;
{ TCustomAnchoredDockManager }
procedure TCustomAnchoredDockManager.OnLazDockFormDragOver(Sender,
Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
var
Form: TLazDockForm;
DragCtrlObj: TDragControlObject;
SrcForm: TLazDockForm;
begin
Accept:=false;
//DebugLn(['TCustomAnchoredDockManager.CustomAnchoredDockManagerDragOver ',DbgSName(Sender),' ',DbgSName(Source)]);
if not (Sender is TLazDockForm) then exit;
Form:=TLazDockForm(Sender);
if Form.Owner<>FOwnerComponent then exit;
if (Source is TDragControlObject) then
begin
DragCtrlObj:=TDragControlObject(Source);
if DragCtrlObj.Control is TLazDockForm then
begin
SrcForm:=TLazDockForm(DragCtrlObj.Control);
end else
exit;
if SrcForm.Owner<>FOwnerComponent then exit;
end else
exit;
Accept:=true;
end;
procedure TCustomAnchoredDockManager.DeleteSideSplitter(Splitter: TLazDockSplitter;
Side: TAnchorKind; NewAnchorControl: TControl);
var
@ -2591,7 +2563,10 @@ end;
function TCustomAnchoredDockManager.CreateForm: TLazDockForm;
begin
Result:=TLazDockForm.Create(FOwnerComponent);
Result.OnDragOver:=@OnLazDockFormDragOver;
{$IFDEF EnableAnchorDockManager}
Result.DockManager:=Self;
Result.UseDockManager:=true;
{$ENDIF}
end;
procedure TCustomAnchoredDockManager.ReplaceAnchoredControl(OldControl,