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

View File

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