From c113ff6ec7ffda3991eb532b1d32a06e00ddebf4 Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Thu, 25 Jun 2020 23:22:35 +0200 Subject: [PATCH] Use ValidateNode to initialize all column nodes early, so they keep their FColumn data after click on Remove button. Closes #245 --- source/table_editor.pas | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/source/table_editor.pas b/source/table_editor.pas index 779fc426..48ca0c17 100644 --- a/source/table_editor.pas +++ b/source/table_editor.pas @@ -342,6 +342,8 @@ begin listColumns.RootNodeCount := FColumns.Count; DeInitializeVTNodes(listColumns); 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: treeIndexes.Invalidate; @@ -888,7 +890,7 @@ end; procedure TfrmTableEditor.btnRemoveColumnClick(Sender: TObject); var - Node, NodeDelete, NodeFocus: PVirtualNode; + Node, NodeFocus: PVirtualNode; Col: PTableColumn; begin // Remove selected column(s) @@ -909,13 +911,8 @@ begin end; Node := listColumns.GetNextSibling(Node); end; - // Delete selected + visible - Node := GetNextNode(listColumns, nil, True); - while Assigned(Node) do begin - NodeDelete := Node; - Node := GetNextNode(listColumns, Node, True); - listColumns.DeleteNode(NodeDelete); - end; + // Delete selected, including those which are invisible through filter + listColumns.DeleteSelectedNodes; if not Assigned(NodeFocus) then NodeFocus := listColumns.GetLast; @@ -1091,6 +1088,7 @@ var begin btnRemoveColumn.Enabled := listColumns.SelectedCount > 0; + LastSelected := nil; NextSelected := GetNextNode(listColumns, nil, True); while Assigned(NextSelected) do begin LastSelected := NextSelected;