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,25 +743,33 @@ procedure TTreeNode.ExpandItem(ExpandIt, Recurse: Boolean);
var var
ANode: TTreeNode; ANode: TTreeNode;
begin begin
if Recurse then begin if TreeView <> nil then
TreeView.BeginUpdate;
try
if Recurse then
begin
ExpandItem(ExpandIt, False); ExpandItem(ExpandIt, False);
ANode := GetFirstChild; ANode := GetFirstChild;
while ANode<>nil do begin while ANode <> nil do
begin
ANode.ExpandItem(ExpandIt, true); ANode.ExpandItem(ExpandIt, true);
ANode := ANode.FNextBrother; ANode := ANode.FNextBrother;
end; end;
end end else begin
else begin if TreeView <> nil then
if TreeView<>nil then Include(TreeView.FStates, tvsManualNotify);
Include(TreeView.FStates,tvsManualNotify);
try try
if DoCanExpand(ExpandIt) then if DoCanExpand(ExpandIt) then
DoExpand(ExpandIt); DoExpand(ExpandIt);
finally finally
if TreeView<>nil then if TreeView <> nil then
Exclude(TreeView.FStates,tvsManualNotify); Exclude(TreeView.FStates, tvsManualNotify);
end; end;
end; end;
finally
if TreeView <> nil then
TreeView.EndUpdate;
end;
end; end;
procedure TTreeNode.Expand(Recurse: Boolean); procedure TTreeNode.Expand(Recurse: Boolean);
@ -4364,22 +4372,32 @@ procedure TCustomTreeView.FullExpand;
var var
Node: TTreeNode; Node: TTreeNode;
begin begin
BeginUpdate;
try
Node := Items.GetFirstNode; Node := Items.GetFirstNode;
while Node <> nil do begin while Node <> nil do begin
Node.Expand(True); Node.Expand(True);
Node := Node.GetNextSibling; Node := Node.GetNextSibling;
end; end;
finally
EndUpdate;
end;
end; end;
procedure TCustomTreeView.FullCollapse; procedure TCustomTreeView.FullCollapse;
var var
Node: TTreeNode; Node: TTreeNode;
begin begin
BeginUpdate;
try
Node := Items.GetFirstNode; Node := Items.GetFirstNode;
while Node <> nil do begin while Node <> nil do begin
Node.Collapse(True); Node.Collapse(True);
Node := Node.GetNextSibling; Node := Node.GetNextSibling;
end; end;
finally
EndUpdate;
end;
end; end;
function TCustomTreeView.IsNodeVisible(ANode: TTreeNode): Boolean; function TCustomTreeView.IsNodeVisible(ANode: TTreeNode): Boolean;