mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-12 22:24:33 +01:00
lazcontrols: TTreeFilterEdit: added Clean, bug #24662
git-svn-id: trunk@41930 -
This commit is contained in:
parent
ff5f02afd2
commit
7309c93641
@ -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);
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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 }
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user