From ef50035e337817da8a3070a833ff031f73eea41b Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Tue, 10 Dec 2019 21:08:18 +0100 Subject: [PATCH] Table editor: support moving down or up more than one column. See https://www.heidisql.com/forum.php?t=17765 --- source/table_editor.dfm | 3 ++- source/table_editor.pas | 54 +++++++++++++++++++++++++++++++++-------- 2 files changed, 46 insertions(+), 11 deletions(-) diff --git a/source/table_editor.dfm b/source/table_editor.dfm index 9d850c38..4cf9e203 100644 --- a/source/table_editor.dfm +++ b/source/table_editor.dfm @@ -637,12 +637,13 @@ object frmTableEditor: TfrmTableEditor PopupMenu = popupColumns TabOrder = 2 TreeOptions.AutoOptions = [toAutoDropExpand, toAutoScrollOnExpand, toAutoTristateTracking, toAutoChangeScale] - TreeOptions.MiscOptions = [toAcceptOLEDrop, toCheckSupport, toEditable, toFullRepaintOnResize, toGridExtensions, toInitOnSave, toToggleOnDblClick, toWheelPanning, toFullRowDrag, toEditOnClick] + TreeOptions.MiscOptions = [toAcceptOLEDrop, toCheckSupport, toEditable, toFullRepaintOnResize, toGridExtensions, toInitOnSave, toWheelPanning, toFullRowDrag, toEditOnClick] TreeOptions.PaintOptions = [toHotTrack, toShowDropmark, toShowHorzGridLines, toShowVertGridLines, toThemeAware, toUseBlendedImages, toUseExplorerTheme, toHideTreeLinesIfThemed] TreeOptions.SelectionOptions = [toExtendedFocus, toFullRowSelect, toMultiSelect, toRightClickSelect] WantTabs = True OnAfterCellPaint = listColumnsAfterCellPaint OnBeforeCellPaint = listColumnsBeforeCellPaint + OnChange = listColumnsChange OnClick = listColumnsClick OnCreateEditor = listColumnsCreateEditor OnDragOver = listColumnsDragOver diff --git a/source/table_editor.pas b/source/table_editor.pas index a9d50c9a..5e34a224 100644 --- a/source/table_editor.pas +++ b/source/table_editor.pas @@ -170,6 +170,7 @@ type Node: PVirtualNode; Column: TColumnIndex; HitPositions: THitPositions); procedure menuCopyColumnsClick(Sender: TObject); procedure menuPasteColumnsClick(Sender: TObject); + procedure listColumnsChange(Sender: TBaseVirtualTree; Node: PVirtualNode); private { Private declarations } FLoaded: Boolean; @@ -919,19 +920,37 @@ end; procedure TfrmTableEditor.btnMoveUpColumnClick(Sender: TObject); +var + Node: PVirtualNode; begin - // Move column up + // Move up selected columns listColumns.EndEditNode; - listColumns.MoveTo(listColumns.FocusedNode, listColumns.GetPreviousSibling(listColumns.FocusedNode), amInsertBefore, False); + + Node := GetNextNode(listColumns, nil, true); + while Assigned(Node) do begin + listColumns.MoveTo(Node, listColumns.GetPreviousSibling(Node), amInsertBefore, False); + Node := GetNextNode(listColumns, Node, true); + end; + ValidateColumnControls; end; procedure TfrmTableEditor.btnMoveDownColumnClick(Sender: TObject); +var + Node: PVirtualNode; begin - // Move column down + // Move down selected columns listColumns.EndEditNode; - listColumns.MoveTo(listColumns.FocusedNode, listColumns.GetNextSibling(listColumns.FocusedNode), amInsertAfter, False); + + Node := listColumns.GetLast; + while Assigned(Node) do begin + if listColumns.Selected[Node] then begin + listColumns.MoveTo(Node, listColumns.GetNextSibling(Node), amInsertAfter, False); + end; + Node := listColumns.GetPrevious(Node); + end; + ValidateColumnControls; end; @@ -1060,15 +1079,22 @@ end; procedure TfrmTableEditor.ValidateColumnControls; -var Node: PVirtualNode; +var + NextSelected, LastSelected: PVirtualNode; begin - Node := listColumns.FocusedNode; btnRemoveColumn.Enabled := listColumns.SelectedCount > 0; - btnMoveUpColumn.Enabled := Assigned(Node) - and (Node <> listColumns.GetFirst) + + NextSelected := GetNextNode(listColumns, nil, True); + while Assigned(NextSelected) do begin + LastSelected := NextSelected; + NextSelected := GetNextNode(listColumns, NextSelected, True); + end; + + btnMoveUpColumn.Enabled := (listColumns.SelectedCount > 0) + and (listColumns.GetFirstSelected <> listColumns.GetFirst) and (DBObject.Connection.Parameters.NetTypeGroup = ngMySQL); - btnMoveDownColumn.Enabled := Assigned(Node) - and (Node <> listColumns.GetLast) + btnMoveDownColumn.Enabled := (listColumns.SelectedCount > 0) + and (LastSelected <> listColumns.GetLast) and (DBObject.Connection.Parameters.NetTypeGroup = ngMySQL); menuRemoveColumn.Enabled := btnRemoveColumn.Enabled; @@ -1333,6 +1359,14 @@ begin end; +procedure TfrmTableEditor.listColumnsChange(Sender: TBaseVirtualTree; + Node: PVirtualNode); +begin + // Enable/disable move buttons + ValidateColumnControls; +end; + + procedure TfrmTableEditor.listColumnsClick(Sender: TObject); var VT: TVirtualStringTree;