Set focused node to the first selected one after a refresh action. Not doing this, the focused node somehow "jumps" randomly if the list was sorted. Plus: break early if the list doesn't have multiselection enabled.

This commit is contained in:
Ansgar Becker
2009-01-28 19:49:32 +00:00
parent 7787a70231
commit bfa3189188

View File

@ -2281,11 +2281,20 @@ procedure SetVTSelection( VT: TVirtualStringTree; Selected: TWideStringList );
var var
Node: PVirtualNode; Node: PVirtualNode;
NodeData: PVTreeData; NodeData: PVTreeData;
IsSel, FoundFocus: Boolean;
begin begin
Node := VT.GetFirst; Node := VT.GetFirst;
FoundFocus := False;
while Assigned(Node) do begin while Assigned(Node) do begin
NodeData := VT.GetNodeData(Node); NodeData := VT.GetNodeData(Node);
VT.Selected[Node] := Selected.IndexOf(NodeData.Captions[0]) > -1; IsSel := Selected.IndexOf(NodeData.Captions[0]) > -1;
VT.Selected[Node] := IsSel;
if IsSel and not FoundFocus then begin
VT.FocusedNode := Node;
FoundFocus := True;
end;
if IsSel and not (toMultiSelect in VT.TreeOptions.SelectionOptions) then
break;
Node := VT.GetNext(Node); Node := VT.GetNext(Node);
end; end;
end; end;