mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-10-19 05:24:11 +02:00
TreeFilterEdit: add FreeNotification to ensure all memory is freed before TreeView gets destroyed.
git-svn-id: trunk@34984 -
This commit is contained in:
parent
016fc56e24
commit
f873fc3512
@ -18,7 +18,7 @@ type
|
||||
|
||||
{ TTreeFilterBranch }
|
||||
|
||||
// A branch in the tree which can be sorted
|
||||
// A branch in the tree which can be sorted and filtered
|
||||
TTreeFilterBranch = class
|
||||
private
|
||||
fOwner: TTreeFilterEdit;
|
||||
@ -40,6 +40,7 @@ type
|
||||
constructor Create(AOwner: TTreeFilterEdit; ARootNode: TTreeNode);
|
||||
destructor Destroy; override;
|
||||
procedure AddNodeData(ANodeText: string; AData: TObject; AFullFilename: string = '');
|
||||
procedure CleanUp;
|
||||
end;
|
||||
|
||||
TBranchList = specialize TFPGObjectList<TTreeFilterBranch>;
|
||||
@ -56,11 +57,11 @@ type
|
||||
fExpandAllInitially: Boolean; // Expand all levels when searched for the first time.
|
||||
fIsFirstTime: Boolean; // Needed for fExpandAllInitially.
|
||||
fOnGetImageIndex: TImageIndexEvent;
|
||||
function GetFilteredTreeview: TCustomTreeview;
|
||||
procedure SetFilteredTreeview(const AValue: TCustomTreeview);
|
||||
procedure SetShowDirHierarchy(const AValue: Boolean);
|
||||
function FilterTree(Node: TTreeNode): Boolean;
|
||||
protected
|
||||
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
||||
procedure MoveNext; override;
|
||||
procedure MovePrev; override;
|
||||
procedure SortAndFilter; override;
|
||||
@ -79,7 +80,7 @@ type
|
||||
property SelectionList: TStringList read fSelectionList;
|
||||
property ShowDirHierarchy: Boolean read fShowDirHierarchy write SetShowDirHierarchy;
|
||||
published
|
||||
property FilteredTreeview: TCustomTreeview read GetFilteredTreeview write SetFilteredTreeview;
|
||||
property FilteredTreeview: TCustomTreeview read fFilteredTreeview write SetFilteredTreeview;
|
||||
property ExpandAllInitially: Boolean read fExpandAllInitially write fExpandAllInitially default False;
|
||||
property OnGetImageIndex: TImageIndexEvent read fOnGetImageIndex write fOnGetImageIndex;
|
||||
end;
|
||||
@ -134,6 +135,13 @@ begin
|
||||
fFilenameMap[ANodeText]:=AFullFilename;
|
||||
end;
|
||||
|
||||
procedure TTreeFilterBranch.CleanUp;
|
||||
// Will be called at the end.
|
||||
begin
|
||||
FreeTVNodeData(fRootNode);
|
||||
fRootNode := nil;
|
||||
end;
|
||||
|
||||
function TTreeFilterBranch.CompareFNs(AFilename1,AFilename2: string): integer;
|
||||
begin
|
||||
if fOwner.SortData then
|
||||
@ -332,13 +340,11 @@ end;
|
||||
procedure TTreeFilterEdit.SetFilteredTreeview(const AValue: TCustomTreeview);
|
||||
begin
|
||||
if fFilteredTreeview = AValue then Exit;
|
||||
if fFilteredTreeview <> nil then
|
||||
fFilteredTreeview.RemoveFreeNotification(Self);
|
||||
fFilteredTreeview := AValue;
|
||||
if AValue = nil then Exit;
|
||||
end;
|
||||
|
||||
function TTreeFilterEdit.GetFilteredTreeview: TCustomTreeview;
|
||||
begin
|
||||
Result:=fFilteredTreeview;
|
||||
if fFilteredTreeview <> nil then
|
||||
fFilteredTreeview.FreeNotification(Self);
|
||||
end;
|
||||
|
||||
procedure TTreeFilterEdit.SetShowDirHierarchy(const AValue: Boolean);
|
||||
@ -366,6 +372,16 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TTreeFilterEdit.Notification(AComponent: TComponent; Operation: TOperation);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
inherited Notification(AComponent, Operation);
|
||||
if (Operation = opRemove) and Assigned(fBranches) then
|
||||
for i := 0 to fBranches.Count-1 do
|
||||
fBranches[i].CleanUp;
|
||||
end;
|
||||
|
||||
procedure TTreeFilterEdit.SortAndFilter;
|
||||
// Copy data from fOriginalData to fSortedData in sorted order
|
||||
var
|
||||
|
Loading…
Reference in New Issue
Block a user