Use ValidateNode to initialize all column nodes early, so they keep their FColumn data after click on Remove button. Closes #245

This commit is contained in:
Ansgar Becker
2020-06-25 23:22:35 +02:00
parent a3cf8b3c92
commit c113ff6ec7

View File

@ -342,6 +342,8 @@ begin
listColumns.RootNodeCount := FColumns.Count; listColumns.RootNodeCount := FColumns.Count;
DeInitializeVTNodes(listColumns); DeInitializeVTNodes(listColumns);
listColumns.EndUpdate; listColumns.EndUpdate;
// Init all nodes, so they keep their FColumn data after click on Remove button, see #245
listColumns.ValidateNode(nil, True);
// Set root nodes per BeforePaint event: // Set root nodes per BeforePaint event:
treeIndexes.Invalidate; treeIndexes.Invalidate;
@ -888,7 +890,7 @@ end;
procedure TfrmTableEditor.btnRemoveColumnClick(Sender: TObject); procedure TfrmTableEditor.btnRemoveColumnClick(Sender: TObject);
var var
Node, NodeDelete, NodeFocus: PVirtualNode; Node, NodeFocus: PVirtualNode;
Col: PTableColumn; Col: PTableColumn;
begin begin
// Remove selected column(s) // Remove selected column(s)
@ -909,13 +911,8 @@ begin
end; end;
Node := listColumns.GetNextSibling(Node); Node := listColumns.GetNextSibling(Node);
end; end;
// Delete selected + visible // Delete selected, including those which are invisible through filter
Node := GetNextNode(listColumns, nil, True); listColumns.DeleteSelectedNodes;
while Assigned(Node) do begin
NodeDelete := Node;
Node := GetNextNode(listColumns, Node, True);
listColumns.DeleteNode(NodeDelete);
end;
if not Assigned(NodeFocus) then if not Assigned(NodeFocus) then
NodeFocus := listColumns.GetLast; NodeFocus := listColumns.GetLast;
@ -1091,6 +1088,7 @@ var
begin begin
btnRemoveColumn.Enabled := listColumns.SelectedCount > 0; btnRemoveColumn.Enabled := listColumns.SelectedCount > 0;
LastSelected := nil;
NextSelected := GetNextNode(listColumns, nil, True); NextSelected := GetNextNode(listColumns, nil, True);
while Assigned(NextSelected) do begin while Assigned(NextSelected) do begin
LastSelected := NextSelected; LastSelected := NextSelected;