anchordocking: sharing popupmenu

git-svn-id: trunk@26053 -
This commit is contained in:
mattias 2010-06-12 10:34:09 +00:00
parent 6669dc093d
commit d0db9180ce
2 changed files with 44 additions and 7 deletions

View File

@ -346,6 +346,7 @@ type
fUpdateCount: integer;
fDisabledAutosizing: TFPList; // list of TControl
fTreeNameToDocker: TADNameToControl;
fPopupMenu: TPopupMenu;
function GetControls(Index: integer): TControl;
procedure SetHeaderAlignLeft(const AValue: integer);
procedure SetHeaderAlignTop(const AValue: integer);
@ -358,6 +359,8 @@ type
procedure DisableControlAutoSizing(AControl: TControl);
procedure EnableAllAutoSizing;
procedure ClearLayoutProperties(AControl: TControl);
procedure PopupMenuPopup(Sender: TObject);
procedure PopupMenuCloseUp(Sender: TObject);
protected
procedure Notification(AComponent: TComponent; Operation: TOperation);
override;
@ -370,6 +373,7 @@ type
function FindControl(const aName: string): TControl;
function IsSite(AControl: TControl): boolean;
function IsCustomSite(AControl: TControl): boolean;
function GetPopupMenu: TPopupMenu;
// show / make a control dockable
procedure MakeDockable(AControl: TControl; Show: boolean = true;
@ -969,6 +973,25 @@ begin
AControl.AnchorSide[a].Control:=nil;
end;
procedure TAnchorDockMaster.PopupMenuPopup(Sender: TObject);
var
Popup: TPopupMenu;
begin
if not (Sender is TPopupMenu) then exit;
Popup:=TPopupMenu(Sender);
if Popup.PopupComponent is TAnchorDockHeader then
TAnchorDockHeader(Popup.PopupComponent).PopupMenuPopup(Sender);
end;
procedure TAnchorDockMaster.PopupMenuCloseUp(Sender: TObject);
var
Popup: TPopupMenu;
begin
if not (Sender is TPopupMenu) then exit;
Popup:=TPopupMenu(Sender);
Popup.Items.Clear;
end;
procedure TAnchorDockMaster.Notification(AComponent: TComponent;
Operation: TOperation);
var
@ -1010,6 +1033,7 @@ destructor TAnchorDockMaster.Destroy;
var
AControl: TControl;
begin
FreeAndNil(fPopupMenu);
FreeAndNil(fTreeNameToDocker);
if FControls.Count>0 then begin
while ControlCount>0 do begin
@ -1059,6 +1083,16 @@ begin
and (TCustomForm(AControl).DockManager is TAnchorDockManager);
end;
function TAnchorDockMaster.GetPopupMenu: TPopupMenu;
begin
if fPopupMenu=nil then begin
fPopupMenu:=TPopupMenu.Create(Self);
fPopupMenu.OnPopup:=@PopupMenuPopup;
fPopupMenu.OnClose:=@PopupMenuCloseUp;
end;
Result:=fPopupMenu;
end;
procedure TAnchorDockMaster.MakeDockable(AControl: TControl; Show: boolean;
BringToFront: boolean; AddDockHeader: boolean);
var
@ -3098,12 +3132,16 @@ begin
// header position
HeaderPosItem:=AddPopupMenuItem('HeaderPosMenuItem', adrsHeaderPosition, nil);
AddPopupMenuItem('HeaderPosAutoMenuItem', adrsAutomatically,
Item:=AddPopupMenuItem('HeaderPosAutoMenuItem', adrsAutomatically,
@HeaderPositionItemClick, HeaderPosItem);
for Side:=Low(TAnchorKind) to High(TAnchorKind) do
AddPopupMenuItem('HeaderPos'+AnchorNames[Side]+'MenuItem',
if Item<>nil then Item.Tag:=ord(adlhpAuto);
for Side:=Low(TAnchorKind) to High(TAnchorKind) do begin
Item:=AddPopupMenuItem('HeaderPos'+AnchorNames[Side]+'MenuItem',
SideCaptions[Side], @HeaderPositionItemClick,
HeaderPosItem);
if Item<>nil then Item.Tag:=ord(Side)+1;
end;
// enlarge
for Side:=Low(TAnchorKind) to High(TAnchorKind) do begin
Item:=AddRemovePopupMenuItem(ParentSite.EnlargeSide(Side,true),
@ -3167,7 +3205,7 @@ var
begin
if not (Sender is TMenuItem) then exit;
Item:=TMenuItem(Sender);
HeaderPosition:=TADLHeaderPosition(Item.Parent.IndexOf(Item));
HeaderPosition:=TADLHeaderPosition(Item.Tag);
end;
procedure TAnchorDockHeader.UndockButtonClick(Sender: TObject);
@ -3297,8 +3335,7 @@ begin
Align:=alTop;
AutoSize:=true;
ShowHint:=true;
PopupMenu:=TPopupMenu.Create(Self);
PopupMenu.OnPopup:=@PopupMenuPopup;
PopupMenu:=DockMaster.GetPopupMenu;
end;
{ TAnchorDockCloseButton }

View File

@ -54,8 +54,8 @@ type
TADLHeaderPosition = (
adlhpAuto,
adlhpLeft,
adlhpTop,
adlhpLeft,
adlhpRight,
adlhpBottom
);