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 ApplyFilter;
procedure TVDeleteUnneededNodes(p: integer); procedure TVDeleteUnneededNodes(p: integer);
procedure TVClearUnneededAndCreateHierachy(Filename: string); procedure TVClearUnneededAndCreateHierachy(Filename: string);
procedure FreeNodeData(ANode : TTreeNode);
procedure RemoveChildrenData(ARootNode : TTreeNode);
public public
constructor Create(AOwner: TTreeFilterEdit; ARootNode: TTreeNode); constructor Create(AOwner: TTreeFilterEdit; ARootNode: TTreeNode);
destructor Destroy; override; destructor Destroy; override;
procedure AddNodeData(ANodeText: string; AData: TObject; AFullFilename: string = ''); procedure AddNodeData(ANodeText: string; AData: TObject; AFullFilename: string = '');
function GetData(AIndex: integer): TObject; function GetData(AIndex: integer): TObject;
procedure Clear;
end; end;
TBranchList = specialize TFPGObjectList<TTreeFilterBranch>; TBranchList = specialize TFPGObjectList<TTreeFilterBranch>;
@ -141,6 +144,9 @@ end;
destructor TTreeFilterBranch.Destroy; destructor TTreeFilterBranch.Destroy;
begin begin
Clear;
FreeAndNil(fNodeTextToFullFilenameMap); FreeAndNil(fNodeTextToFullFilenameMap);
FreeAndNil(fNodeTextToDataMap); FreeAndNil(fNodeTextToDataMap);
FreeAndNil(fSortedData); FreeAndNil(fSortedData);
@ -202,8 +208,10 @@ var
ena: Boolean; ena: Boolean;
AObject: TObject; AObject: TObject;
begin begin
if Assigned(fRootNode) then if Assigned(fRootNode) then Begin
fRootNode.DeleteChildren // Delete old tree nodes. Clear;
fRootNode.DeleteChildren; // Delete old tree nodes.
end
else else
fOwner.fFilteredTreeview.Items.Clear; fOwner.fFilteredTreeview.Items.Clear;
if fOwner.ShowDirHierarchy then if fOwner.ShowDirHierarchy then
@ -317,6 +325,40 @@ begin
end; end;
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 } { TFileNameItem }
constructor TFileNameItem.Create(AFilename: string; aData: Pointer); constructor TFileNameItem.Create(AFilename: string; aData: Pointer);

View File

@ -671,11 +671,11 @@ var
Filename: String; Filename: String;
ANodeData : TProjectNodeData; ANodeData : TProjectNodeData;
begin begin
FreeNodeData(pntFile);
ItemsTreeView.BeginUpdate; ItemsTreeView.BeginUpdate;
try try
FilesBranch:=FilterEdit.GetBranch(FFilesNode); FilesBranch:=FilterEdit.GetBranch(FFilesNode);
FilesBranch.Clear;
FreeNodeData(pntFile);
if LazProject<>nil then begin if LazProject<>nil then begin
FilterEdit.SelectedPart:=FNextSelectedPart; FilterEdit.SelectedPart:=FNextSelectedPart;
FilterEdit.ShowDirHierarchy:=ShowDirectoryHierarchy; FilterEdit.ShowDirHierarchy:=ShowDirectoryHierarchy;
@ -705,11 +705,11 @@ var
NodeText, AFilename: String; NodeText, AFilename: String;
ANodeData : TProjectNodeData; ANodeData : TProjectNodeData;
begin begin
FreeNodeData(pntDependency);
ItemsTreeView.BeginUpdate; ItemsTreeView.BeginUpdate;
try try
RequiredBranch:=FilterEdit.GetBranch(DependenciesNode); RequiredBranch:=FilterEdit.GetBranch(DependenciesNode);
RequiredBranch.Clear;
FreeNodeData(pntDependency);
Dependency:=Nil; Dependency:=Nil;
if LazProject<>nil then begin if LazProject<>nil then begin
// required packages // required packages
@ -854,9 +854,9 @@ var
begin begin
IdleConnected:=false; IdleConnected:=false;
LazProject:=nil; LazProject:=nil;
inherited Destroy;
for nt:=Low(TProjectNodeType) to High(TProjectNodeType) do for nt:=Low(TProjectNodeType) to High(TProjectNodeType) do
FreeNodeData(nt); FreeNodeData(nt);
inherited Destroy;
if ProjInspector=Self then if ProjInspector=Self then
ProjInspector:=nil; ProjInspector:=nil;
end; end;
@ -959,22 +959,11 @@ procedure TProjectInspectorForm.FreeNodeData(Typ: TProjectNodeType);
var var
NodeData, NodeData,
n: TProjectNodeData; n: TProjectNodeData;
AObject : TObject;
ANode : TTreeNode;
begin begin
NodeData:=FProjectNodeDataList[Typ]; NodeData:=FProjectNodeDataList[Typ];
while NodeData<>nil do begin while NodeData<>nil do begin
n:=NodeData; n:=NodeData;
NodeData:=NodeData.Next; 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; n.Free;
end; end;
FProjectNodeDataList[Typ]:=nil; FProjectNodeDataList[Typ]:=nil;

View File

@ -1084,22 +1084,11 @@ procedure TPackageEditorForm.FreeNodeData(Typ: TPENodeType);
var var
NodeData: TPENodeData; NodeData: TPENodeData;
n: TPENodeData; n: TPENodeData;
AObject : TObject;
ANode : TTreeNode;
begin begin
NodeData:=FFirstNodeData[Typ]; NodeData:=FFirstNodeData[Typ];
while NodeData<>nil do begin while NodeData<>nil do begin
n:=NodeData; n:=NodeData;
NodeData:=NodeData.Next; 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; n.Free;
end; end;
FFirstNodeData[Typ]:=nil; FFirstNodeData[Typ]:=nil;
@ -1779,10 +1768,10 @@ var
begin begin
if LazPackage=nil then exit; if LazPackage=nil then exit;
FreeNodeData(penFile);
// files belonging to package // files belonging to package
FilesBranch:=FilterEdit.GetBranch(FFilesNode); FilesBranch:=FilterEdit.GetBranch(FFilesNode);
FilesBranch.Clear;
FreeNodeData(penFile);
FilterEdit.SelectedPart:=FNextSelectedPart; FilterEdit.SelectedPart:=FNextSelectedPart;
FilterEdit.ShowDirHierarchy:=ShowDirectoryHierarchy; FilterEdit.ShowDirHierarchy:=ShowDirectoryHierarchy;
FilterEdit.SortData:=SortAlphabetically; FilterEdit.SortData:=SortAlphabetically;
@ -1830,10 +1819,10 @@ var
begin begin
if LazPackage=nil then exit; if LazPackage=nil then exit;
FreeNodeData(penDependency);
// required packages // required packages
RequiredBranch:=FilterEdit.GetBranch(FRequiredPackagesNode); RequiredBranch:=FilterEdit.GetBranch(FRequiredPackagesNode);
RequiredBranch.Clear;
FreeNodeData(penDependency);
FilterEdit.SelectedPart:=FNextSelectedPart; FilterEdit.SelectedPart:=FNextSelectedPart;
CurDependency:=LazPackage.FirstRequiredDependency; CurDependency:=LazPackage.FirstRequiredDependency;
while CurDependency<>nil do begin while CurDependency<>nil do begin
@ -2412,9 +2401,9 @@ begin
PackageEditors.DoFreeEditor(LazPackage); PackageEditors.DoFreeEditor(LazPackage);
FLazPackage:=nil; FLazPackage:=nil;
FreeAndNil(FPlugins); FreeAndNil(FPlugins);
inherited Destroy;
for nt:=Low(TPENodeType) to High(TPENodeType) do for nt:=Low(TPENodeType) to High(TPENodeType) do
FreeNodeData(nt); FreeNodeData(nt);
inherited Destroy;
end; end;
{ TPackageEditors } { TPackageEditors }