lazcontrols: TTreeFilterEdit: added Clean, bug #24662

git-svn-id: trunk@41930 -
This commit is contained in:
mattias 2013-06-28 06:49:27 +00:00
parent ff5f02afd2
commit 7309c93641
3 changed files with 54 additions and 34 deletions

View File

@ -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<TTreeFilterBranch>;
@ -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);

View File

@ -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;

View File

@ -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 }