lazcontrols: TTreeFilterEdit: free noe data on tree destroy

git-svn-id: trunk@35091 -
This commit is contained in:
mattias 2012-02-02 16:46:57 +00:00
parent aad4d125c5
commit c0dada7561

View File

@ -60,6 +60,7 @@ type
procedure SetFilteredTreeview(const AValue: TCustomTreeview); procedure SetFilteredTreeview(const AValue: TCustomTreeview);
procedure SetShowDirHierarchy(const AValue: Boolean); procedure SetShowDirHierarchy(const AValue: Boolean);
function FilterTree(Node: TTreeNode): Boolean; function FilterTree(Node: TTreeNode): Boolean;
procedure OnBeforeTreeDestroy(Sender: TObject);
protected protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override; procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure MoveNext; override; procedure MoveNext; override;
@ -121,9 +122,9 @@ end;
destructor TTreeFilterBranch.Destroy; destructor TTreeFilterBranch.Destroy;
begin begin
fFilenameMap.Free; FreeAndNil(fFilenameMap);
fSortedData.Free; FreeAndNil(fSortedData);
fOriginalData.Free; FreeAndNil(fOriginalData);
FreeTVNodeData(fRootNode); FreeTVNodeData(fRootNode);
inherited Destroy; inherited Destroy;
end; end;
@ -330,8 +331,8 @@ end;
destructor TTreeFilterEdit.Destroy; destructor TTreeFilterEdit.Destroy;
begin begin
fBranches.Free; FreeAndNil(fBranches);
fSelectionList.Free; FreeAndNil(fSelectionList);
inherited Destroy; inherited Destroy;
end; end;
@ -340,14 +341,23 @@ begin
Result := TreeFilterGlyph; Result := TreeFilterGlyph;
end; end;
procedure TTreeFilterEdit.OnBeforeTreeDestroy(Sender: TObject);
begin
FreeAndNil(fBranches);
end;
procedure TTreeFilterEdit.SetFilteredTreeview(const AValue: TCustomTreeview); procedure TTreeFilterEdit.SetFilteredTreeview(const AValue: TCustomTreeview);
begin begin
if fFilteredTreeview = AValue then Exit; if fFilteredTreeview = AValue then Exit;
if fFilteredTreeview <> nil then if fFilteredTreeview <> nil then begin
fFilteredTreeview.RemoveFreeNotification(Self); fFilteredTreeview.RemoveFreeNotification(Self);
fFilteredTreeview.RemoveHandlerOnBeforeDestruction(@OnBeforeTreeDestroy);
end;
fFilteredTreeview := AValue; fFilteredTreeview := AValue;
if fFilteredTreeview <> nil then if fFilteredTreeview <> nil then begin
fFilteredTreeview.FreeNotification(Self); fFilteredTreeview.FreeNotification(Self);
fFilteredTreeview.AddHandlerOnBeforeDestruction(@OnBeforeTreeDestroy);
end;
end; end;
procedure TTreeFilterEdit.SetShowDirHierarchy(const AValue: Boolean); procedure TTreeFilterEdit.SetShowDirHierarchy(const AValue: Boolean);
@ -375,8 +385,6 @@ begin
end; end;
procedure TTreeFilterEdit.Notification(AComponent: TComponent; Operation: TOperation); procedure TTreeFilterEdit.Notification(AComponent: TComponent; Operation: TOperation);
var
i: Integer;
begin begin
inherited Notification(AComponent, Operation); inherited Notification(AComponent, Operation);
if (Operation = opRemove) then if (Operation = opRemove) then
@ -384,9 +392,7 @@ begin
if FilteredTreeview=AComponent then if FilteredTreeview=AComponent then
begin begin
fFilteredTreeview:=nil; fFilteredTreeview:=nil;
if Assigned(fBranches) then FreeAndNil(fBranches);
for i := 0 to fBranches.Count-1 do
fBranches[i].CleanUp;
end; end;
end; end;
end; end;