From 7309c9364122d8862e44af90bf2b865e462cfa2f Mon Sep 17 00:00:00 2001 From: mattias Date: Fri, 28 Jun 2013 06:49:27 +0000 Subject: [PATCH] lazcontrols: TTreeFilterEdit: added Clean, bug #24662 git-svn-id: trunk@41930 - --- components/lazcontrols/treefilteredit.pas | 46 ++++++++++++++++++++++- ide/projectinspector.pas | 21 +++-------- packager/packageeditor.pas | 21 +++-------- 3 files changed, 54 insertions(+), 34 deletions(-) diff --git a/components/lazcontrols/treefilteredit.pas b/components/lazcontrols/treefilteredit.pas index 59f37b099e..5433caac8b 100644 --- a/components/lazcontrols/treefilteredit.pas +++ b/components/lazcontrols/treefilteredit.pas @@ -45,11 +45,14 @@ type procedure ApplyFilter; procedure TVDeleteUnneededNodes(p: integer); procedure TVClearUnneededAndCreateHierachy(Filename: string); + procedure FreeNodeData(ANode : TTreeNode); + procedure RemoveChildrenData(ARootNode : TTreeNode); public constructor Create(AOwner: TTreeFilterEdit; ARootNode: TTreeNode); destructor Destroy; override; procedure AddNodeData(ANodeText: string; AData: TObject; AFullFilename: string = ''); function GetData(AIndex: integer): TObject; + procedure Clear; end; TBranchList = specialize TFPGObjectList; @@ -141,6 +144,9 @@ end; destructor TTreeFilterBranch.Destroy; begin + + Clear; + FreeAndNil(fNodeTextToFullFilenameMap); FreeAndNil(fNodeTextToDataMap); FreeAndNil(fSortedData); @@ -202,8 +208,10 @@ var ena: Boolean; AObject: TObject; begin - if Assigned(fRootNode) then - fRootNode.DeleteChildren // Delete old tree nodes. + if Assigned(fRootNode) then Begin + Clear; + fRootNode.DeleteChildren; // Delete old tree nodes. + end else fOwner.fFilteredTreeview.Items.Clear; if fOwner.ShowDirHierarchy then @@ -317,6 +325,40 @@ begin end; end; +procedure TTreeFilterBranch.FreeNodeData(ANode : TTreeNode); +Var + AObject : TObject; +Begin + AObject := NIL; + If Assigned(ANode) And Assigned(ANode.Data) Then Begin + AObject := TObject(ANode.Data); + If Assigned(AObject) And AObject.InheritsFrom(TTFENodeData) Then + TTFENodeData(AObject).Node := NIL; + If Assigned(AObject) And (AObject is TFileNameItem) Then + AObject.Free; + ANode.Data := NIL; + end; +end; + +procedure TTreeFilterBranch.RemoveChildrenData(ARootNode : TTreeNode); +Var + ANode : TTreeNode; +Begin + ANode := NIL; + FreeNodeData(ARootNode); + If Assigned(ARootNode) Then + ANode := ARootNode.GetFirstChild; + While Assigned(ANode) Do Begin + FreeNodeData(ANode); + ANode := ANode.GetNextSibling; + end; +end; + +procedure TTreeFilterBranch.Clear; +Begin + RemoveChildrenData(fRootNode); +end; + { TFileNameItem } constructor TFileNameItem.Create(AFilename: string; aData: Pointer); diff --git a/ide/projectinspector.pas b/ide/projectinspector.pas index 9ce98793e5..8e925b2f3a 100644 --- a/ide/projectinspector.pas +++ b/ide/projectinspector.pas @@ -671,11 +671,11 @@ var Filename: String; ANodeData : TProjectNodeData; begin - FreeNodeData(pntFile); - ItemsTreeView.BeginUpdate; try FilesBranch:=FilterEdit.GetBranch(FFilesNode); + FilesBranch.Clear; + FreeNodeData(pntFile); if LazProject<>nil then begin FilterEdit.SelectedPart:=FNextSelectedPart; FilterEdit.ShowDirHierarchy:=ShowDirectoryHierarchy; @@ -705,11 +705,11 @@ var NodeText, AFilename: String; ANodeData : TProjectNodeData; begin - FreeNodeData(pntDependency); - ItemsTreeView.BeginUpdate; try RequiredBranch:=FilterEdit.GetBranch(DependenciesNode); + RequiredBranch.Clear; + FreeNodeData(pntDependency); Dependency:=Nil; if LazProject<>nil then begin // required packages @@ -854,9 +854,9 @@ var begin IdleConnected:=false; LazProject:=nil; + inherited Destroy; for nt:=Low(TProjectNodeType) to High(TProjectNodeType) do FreeNodeData(nt); - inherited Destroy; if ProjInspector=Self then ProjInspector:=nil; end; @@ -959,22 +959,11 @@ procedure TProjectInspectorForm.FreeNodeData(Typ: TProjectNodeType); var NodeData, n: TProjectNodeData; - AObject : TObject; - ANode : TTreeNode; begin NodeData:=FProjectNodeDataList[Typ]; while NodeData<>nil do begin n:=NodeData; NodeData:=NodeData.Next; - If Assigned(n.Node) Then Begin - ANode := TTreeNode(n.Node); - If Assigned(ANode.Data) Then Begin - AObject := TObject(ANode.Data); - If AObject is TFileNameItem Then - AObject.Free; - end; - ANode.Data := NIL; - end; n.Free; end; FProjectNodeDataList[Typ]:=nil; diff --git a/packager/packageeditor.pas b/packager/packageeditor.pas index 25c35455f3..08ba0606fd 100644 --- a/packager/packageeditor.pas +++ b/packager/packageeditor.pas @@ -1084,22 +1084,11 @@ procedure TPackageEditorForm.FreeNodeData(Typ: TPENodeType); var NodeData: TPENodeData; n: TPENodeData; - AObject : TObject; - ANode : TTreeNode; begin NodeData:=FFirstNodeData[Typ]; while NodeData<>nil do begin n:=NodeData; NodeData:=NodeData.Next; - If Assigned(n.Node) Then Begin - ANode := TTreeNode(n.Node); - If Assigned(ANode.Data) Then Begin - AObject := TObject(ANode.Data); - If AObject is TFileNameItem Then - AObject.Free; - end; - ANode.Data := NIL; - end; n.Free; end; FFirstNodeData[Typ]:=nil; @@ -1779,10 +1768,10 @@ var begin if LazPackage=nil then exit; - FreeNodeData(penFile); - // files belonging to package FilesBranch:=FilterEdit.GetBranch(FFilesNode); + FilesBranch.Clear; + FreeNodeData(penFile); FilterEdit.SelectedPart:=FNextSelectedPart; FilterEdit.ShowDirHierarchy:=ShowDirectoryHierarchy; FilterEdit.SortData:=SortAlphabetically; @@ -1830,10 +1819,10 @@ var begin if LazPackage=nil then exit; - FreeNodeData(penDependency); - // required packages RequiredBranch:=FilterEdit.GetBranch(FRequiredPackagesNode); + RequiredBranch.Clear; + FreeNodeData(penDependency); FilterEdit.SelectedPart:=FNextSelectedPart; CurDependency:=LazPackage.FirstRequiredDependency; while CurDependency<>nil do begin @@ -2412,9 +2401,9 @@ begin PackageEditors.DoFreeEditor(LazPackage); FLazPackage:=nil; FreeAndNil(FPlugins); + inherited Destroy; for nt:=Low(TPENodeType) to High(TPENodeType) do FreeNodeData(nt); - inherited Destroy; end; { TPackageEditors }