mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-26 16:33:46 +02:00
SynEdit: Fold-Gutter: Defer creation of popup menu, until needed; use global image list
git-svn-id: trunk@32000 -
This commit is contained in:
parent
fd515183d0
commit
144a7b6e1c
@ -81,7 +81,7 @@ type
|
||||
SubType: TDrawNodeSymbolOptions);
|
||||
protected
|
||||
function PreferedWidth: Integer; override;
|
||||
procedure CreatePopUpMenuEntries(APopUp: TPopupMenu; ALine: Integer); virtual;
|
||||
procedure CreatePopUpMenuEntries(var APopUp: TPopupMenu; ALine: Integer); virtual;
|
||||
procedure PopClicked(Sender: TObject);
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
@ -108,6 +108,10 @@ implementation
|
||||
uses
|
||||
SynEdit;
|
||||
|
||||
var
|
||||
GlobalPopUpImageList: TImageList = nil;
|
||||
|
||||
|
||||
{ TSynGutterCodeFolding }
|
||||
|
||||
procedure TSynGutterCodeFolding.SetMouseActionsCollapsed(const AValue: TSynEditMouseActions);
|
||||
@ -220,7 +224,7 @@ begin
|
||||
|
||||
end;
|
||||
|
||||
procedure TSynGutterCodeFolding.CreatePopUpMenuEntries(APopUp: TPopupMenu;
|
||||
procedure TSynGutterCodeFolding.CreatePopUpMenuEntries(var APopUp: TPopupMenu;
|
||||
ALine: Integer);
|
||||
|
||||
function AddPopUpItem(const ACaption: String): TMenuItem;
|
||||
@ -241,6 +245,23 @@ var
|
||||
m: TMenuItem;
|
||||
s, s2: String;
|
||||
begin
|
||||
if APopUp = nil then begin
|
||||
if not assigned(GlobalPopUpImageList) then begin
|
||||
// Todo: Add a flag, when using global list, or make list ref-counted
|
||||
// See Destroy
|
||||
GlobalPopUpImageList := TImageList.Create(nil);
|
||||
FPopUpImageList := GlobalPopUpImageList;
|
||||
InitPopUpImageList;
|
||||
end
|
||||
else
|
||||
FPopUpImageList := GlobalPopUpImageList;
|
||||
|
||||
APopUp := TPopupMenu.Create(nil);
|
||||
APopUp.Images := FPopUpImageList;
|
||||
end
|
||||
else
|
||||
APopUp.Items.Clear;
|
||||
|
||||
c := FoldView.OpenFoldCount(ALine-1);
|
||||
if c > 0 then begin
|
||||
SetLength(FMenuInf,c);
|
||||
@ -298,11 +319,6 @@ begin
|
||||
FMouseActionsCollapsed.ResetDefaults;
|
||||
FMouseActionsExpanded.ResetDefaults;
|
||||
|
||||
FPopUpImageList := TImageList.Create(nil);
|
||||
InitPopUpImageList;
|
||||
FPopUp := TPopupMenu.Create(nil);
|
||||
FPopUp.Images := FPopUpImageList;
|
||||
|
||||
inherited Create(AOwner);
|
||||
|
||||
MarkupInfo.Background := clNone;
|
||||
@ -316,7 +332,11 @@ begin
|
||||
FreeAndNil(FMouseActionsCollapsed);
|
||||
FreeAndNil(FMouseActionsExpanded);
|
||||
FreeAndNil(FPopUp);
|
||||
FreeAndNil(FPopUpImageList);
|
||||
// Todo: Currently only the global list is used. No Free is ever needed.
|
||||
// See: CreatePopUpMenuEntries
|
||||
// SynEdit could be destroyed, after finalization of this unit, then the condition would fail
|
||||
//if FPopUpImageList <> GlobalPopUpImageList then
|
||||
// FreeAndNil(FPopUpImageList);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
@ -429,7 +449,6 @@ begin
|
||||
end;
|
||||
emcCodeFoldContextMenu:
|
||||
begin
|
||||
FPopUp.Items.Clear;
|
||||
CreatePopUpMenuEntries(FPopUp, line);
|
||||
FPopUp.PopUp;
|
||||
end;
|
||||
@ -699,5 +718,8 @@ begin
|
||||
AddCommand(emcCodeFoldExpand, False, mbLeft, ccAny, cdDown, [], [ssCtrl], emcoCodeFoldExpandAll);
|
||||
end;
|
||||
|
||||
finalization
|
||||
FreeAndNil(GlobalPopUpImageList);
|
||||
|
||||
end.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user