LCL: Add BeginUpdate..EndUpdate for FullCollapse and FullExpand in TreeView. Issue #40304, patch by n7800.

This commit is contained in:
Juha 2023-06-08 18:39:21 +03:00
parent 510d99957d
commit ab21cfa331

View File

@ -743,24 +743,32 @@ procedure TTreeNode.ExpandItem(ExpandIt, Recurse: Boolean);
var var
ANode: TTreeNode; ANode: TTreeNode;
begin begin
if Recurse then begin if TreeView <> nil then
ExpandItem(ExpandIt, False); TreeView.BeginUpdate;
ANode := GetFirstChild; try
while ANode<>nil do begin if Recurse then
ANode.ExpandItem(ExpandIt, true); begin
ANode := ANode.FNextBrother; ExpandItem(ExpandIt, False);
end; ANode := GetFirstChild;
end while ANode <> nil do
else begin begin
if TreeView<>nil then ANode.ExpandItem(ExpandIt, true);
Include(TreeView.FStates,tvsManualNotify); ANode := ANode.FNextBrother;
try end;
if DoCanExpand(ExpandIt) then end else begin
DoExpand(ExpandIt); if TreeView <> nil then
finally Include(TreeView.FStates, tvsManualNotify);
if TreeView<>nil then try
Exclude(TreeView.FStates,tvsManualNotify); if DoCanExpand(ExpandIt) then
DoExpand(ExpandIt);
finally
if TreeView <> nil then
Exclude(TreeView.FStates, tvsManualNotify);
end;
end; end;
finally
if TreeView <> nil then
TreeView.EndUpdate;
end; end;
end; end;
@ -4364,10 +4372,15 @@ procedure TCustomTreeView.FullExpand;
var var
Node: TTreeNode; Node: TTreeNode;
begin begin
Node := Items.GetFirstNode; BeginUpdate;
while Node <> nil do begin try
Node.Expand(True); Node := Items.GetFirstNode;
Node := Node.GetNextSibling; while Node <> nil do begin
Node.Expand(True);
Node := Node.GetNextSibling;
end;
finally
EndUpdate;
end; end;
end; end;
@ -4375,10 +4388,15 @@ procedure TCustomTreeView.FullCollapse;
var var
Node: TTreeNode; Node: TTreeNode;
begin begin
Node := Items.GetFirstNode; BeginUpdate;
while Node <> nil do begin try
Node.Collapse(True); Node := Items.GetFirstNode;
Node := Node.GetNextSibling; while Node <> nil do begin
Node.Collapse(True);
Node := Node.GetNextSibling;
end;
finally
EndUpdate;
end; end;
end; end;