From 44ce3527f06d368e57ee4e7adf99318db9eb4351 Mon Sep 17 00:00:00 2001 From: Ansgar Becker Date: Sun, 22 Feb 2026 16:15:27 +0100 Subject: [PATCH] feat: add "Display" main menu, move some spread items there, and add two items for toggling log panel and tree filters Refs #1891 --- source/apphelpers.pas | 4 ++- source/main.dfm | 53 ++++++++++++++++++++++++++---- source/main.pas | 75 +++++++++++++++++++++++++++++++------------ 3 files changed, 104 insertions(+), 28 deletions(-) diff --git a/source/apphelpers.pas b/source/apphelpers.pas index de1e8558..54cf019f 100644 --- a/source/apphelpers.pas +++ b/source/apphelpers.pas @@ -236,7 +236,7 @@ type asCreateDbCollation, asRealTrailingZeros, asSequalSuggestWindowWidth, asSequalSuggestWindowHeight, asSequalSuggestPrompt, asSequalSuggestRecentPrompts, asReformatter, asReformatterNoDialog, asAlwaysGenerateFilter, - asGenerateDataNumRows, asGenerateDataNullAmount, asWebOnceAction, + asGenerateDataNumRows, asGenerateDataNullAmount, asWebOnceAction, asDisplayLogPanel, asDisplayTreeFilters, asUnused); TAppSetting = record Name: String; @@ -4112,6 +4112,8 @@ begin InitSetting(asRowBackgroundOdd, 'RowBackgroundOdd', clNone); InitSetting(asGroupTreeObjects, 'GroupTreeObjects', 0, False); InitSetting(asDisplayObjectSizeColumn, 'DisplayObjectSizeColumn', 0, True); + InitSetting(asDisplayLogPanel, 'DisplayLogPanel', 0, True); + InitSetting(asDisplayTreeFilters, 'DisplayTreeFilters', 0, True); InitSetting(asActionShortcut1, 'Shortcut1_%s', 0); InitSetting(asActionShortcut2, 'Shortcut2_%s', 0); InitSetting(asHighlighterForeground, 'SQL Attr %s Foreground', 0); diff --git a/source/main.dfm b/source/main.dfm index 6b063f13..cf589bdb 100644 --- a/source/main.dfm +++ b/source/main.dfm @@ -1886,10 +1886,35 @@ object MainForm: TMainForm object Inverseselection1: TMenuItem Action = actSelectInverse end - object actFindInVT1: TMenuItem + end + object MainMenuDisplay: TMenuItem + Caption = 'Display' + object menuDisplaysizeofobjects1: TMenuItem + Action = actDisplayObjectSize + AutoCheck = True + end + object menuShowonlyfavorites1: TMenuItem + Action = actFavoriteObjectsOnly + AutoCheck = True + end + object menuFilterpanel1: TMenuItem Action = actFilterPanel AutoCheck = True end + object menuDisplayLogPanel1: TMenuItem + Action = actDisplayLogPanel + AutoCheck = True + end + object menuTreefilters1: TMenuItem + Action = actDisplayTreeFilters + AutoCheck = True + end + object N27: TMenuItem + Caption = '-' + end + object menuResetpaneldimensions1: TMenuItem + Action = actResetPanelDimensions + end end object MainMenuSearch: TMenuItem Caption = 'Search' @@ -2056,9 +2081,6 @@ object MainForm: TMainForm object N4: TMenuItem Caption = '-' end - object Resetpaneldimensions1: TMenuItem - Action = actResetPanelDimensions - end object MenuPreferences: TMenuItem Action = actPreferences end @@ -2831,7 +2853,6 @@ object MainForm: TMainForm AutoCheck = True Caption = 'Filter panel' Hint = 'Activates the filter panel' - ImageIndex = 30 ImageName = 'icons8-find' ShortCut = 49222 OnExecute = actFilterPanelExecute @@ -3386,6 +3407,24 @@ object MainForm: TMainForm ImageIndex = 57 OnExecute = actQueryTableExecute end + object actDisplayObjectSize: TAction + Category = 'Various' + AutoCheck = True + Caption = 'Display size of objects' + OnExecute = actDisplayObjectSizeExecute + end + object actDisplayLogPanel: TAction + Category = 'Various' + AutoCheck = True + Caption = 'Log panel' + OnExecute = actDisplayLogPanelExecute + end + object actDisplayTreeFilters: TAction + Category = 'Various' + AutoCheck = True + Caption = 'Tree filters' + OnExecute = actDisplayTreeFiltersExecute + end end object menuConnections: TPopupMenu AutoHotkeys = maManual @@ -3499,8 +3538,8 @@ object MainForm: TMainForm AutoCheck = True end object menuShowSizeColumn: TMenuItem - Caption = 'Display size of objects' - OnClick = menuShowSizeColumnClick + Action = actDisplayObjectSize + AutoCheck = True end object menuAutoExpand: TMenuItem Caption = 'Auto expand on click' diff --git a/source/main.pas b/source/main.pas index 33ec65d9..af0cfb4d 100644 --- a/source/main.pas +++ b/source/main.pas @@ -503,7 +503,6 @@ type pnlRight: TPanel; btnCloseFilterPanel: TSpeedButton; actFilterPanel: TAction; - actFindInVT1: TMenuItem; TimerFilterVT: TTimer; actFindTextOnServer: TAction; actFindTextOnServer1: TMenuItem; @@ -789,7 +788,6 @@ type ToolBarDonate: TToolBar; btnDonate: TToolButton; actResetPanelDimensions: TAction; - Resetpaneldimensions1: TMenuItem; popupApplyFilter: TPopupMenu; menuAlwaysGenerateFilter: TMenuItem; actGenerateData: TAction; @@ -799,6 +797,17 @@ type actCopyGridNodes1: TMenuItem; actQueryTable: TAction; Selecttop1000rows1: TMenuItem; + MainMenuDisplay: TMenuItem; + actDisplayObjectSize: TAction; + menuDisplaysizeofobjects1: TMenuItem; + menuShowonlyfavorites1: TMenuItem; + menuFilterpanel1: TMenuItem; + menuResetpaneldimensions1: TMenuItem; + actDisplayLogPanel: TAction; + actDisplayTreeFilters: TAction; + menuDisplayLogPanel1: TMenuItem; + menuTreefilters1: TMenuItem; + N27: TMenuItem; procedure actCreateDBObjectExecute(Sender: TObject); procedure menuConnectionsPopup(Sender: TObject); procedure actExitApplicationExecute(Sender: TObject); @@ -957,7 +966,7 @@ type procedure AnyGridAfterCellPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellRect: TRect); - procedure menuShowSizeColumnClick(Sender: TObject); + procedure actDisplayObjectSizeExecute(Sender: TObject); procedure AnyGridBeforeCellPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect); @@ -1202,6 +1211,8 @@ type var HintText: string); procedure actCopyGridNodesExecute(Sender: TObject); procedure actQueryTableExecute(Sender: TObject); + procedure actDisplayLogPanelExecute(Sender: TObject); + procedure actDisplayTreeFiltersExecute(Sender: TObject); private // Executable file details FAppVerMajor, FAppVerMinor, FAppVerRelease, FAppVerRevision: Word; @@ -2073,10 +2084,14 @@ begin DataGridTable := nil; FActiveDbObj := nil; - // Database tree options + // Display options, and database tree options actGroupObjects.Checked := AppSettings.ReadBool(asGroupTreeObjects); - if AppSettings.ReadBool(asDisplayObjectSizeColumn) then - menuShowSizeColumn.Click; + actDisplayObjectSize.Checked := AppSettings.ReadBool(asDisplayObjectSizeColumn); + actDisplayObjectSizeExecute(nil); + actDisplayLogPanel.Checked := AppSettings.ReadBool(asDisplayLogPanel); + actDisplayLogPanelExecute(nil); + actDisplayTreeFilters.Checked := AppSettings.ReadBool(asDisplayTreeFilters); + actDisplayTreeFiltersExecute(nil); if AppSettings.ReadBool(asAutoExpand) then menuAutoExpand.Click; if AppSettings.ReadBool(asDoubleClickInsertsNodeText) then @@ -11114,20 +11129,43 @@ begin end; -procedure TMainForm.menuShowSizeColumnClick(Sender: TObject); -var - Item: TMenuItem; +procedure TMainForm.actDisplayLogPanelExecute(Sender: TObject); begin - if coVisible in DBtree.Header.Columns[1].Options then - DBtree.Header.Columns[1].Options := DBtree.Header.Columns[1].Options - [coVisible] - else - DBtree.Header.Columns[1].Options := DBtree.Header.Columns[1].Options + [coVisible]; - Item := Sender as TMenuItem; - Item.Checked := coVisible in DBtree.Header.Columns[1].Options; + if actDisplayLogPanel.Checked then begin + SynMemoSQLLog.Visible := True; + spltTopBottom.Visible := True; + // ensure z-order: top panel, splitter, memo + spltTopBottom.BringToFront; + SynMemoSQLLog.BringToFront; + end + else begin + spltTopBottom.Visible := False; + SynMemoSQLLog.Visible := False; + end; AppSettings.ResetPath; - AppSettings.WriteBool(asDisplayObjectSizeColumn, Item.Checked); + AppSettings.WriteBool(asDisplayLogPanel, actDisplayLogPanel.Checked); end; +procedure TMainForm.actDisplayObjectSizeExecute(Sender: TObject); +var + ColOptions: TVTColumnOptions; +begin + ColOptions := DBtree.Header.Columns[1].Options; + if actDisplayObjectSize.Checked then + ColOptions := ColOptions + [coVisible] + else + ColOptions := ColOptions - [coVisible]; + DBtree.Header.Columns[1].Options := ColOptions; + AppSettings.ResetPath; + AppSettings.WriteBool(asDisplayObjectSizeColumn, actDisplayObjectSize.Checked); +end; + +procedure TMainForm.actDisplayTreeFiltersExecute(Sender: TObject); +begin + ToolBarTree.Visible := actDisplayTreeFilters.Checked; + AppSettings.ResetPath; + AppSettings.WriteBool(asDisplayTreeFilters, actDisplayTreeFilters.Checked); +end; procedure TMainForm.menuAlwaysGenerateFilterClick(Sender: TObject); begin @@ -12768,10 +12806,7 @@ procedure TMainForm.actFavoriteObjectsOnlyExecute(Sender: TObject); begin // Click on "tree favorites" main button editDatabaseTableFilterChange(Sender); - if actFavoriteObjectsOnly.Checked then - actFavoriteObjectsOnly.ImageIndex := 112 - else - actFavoriteObjectsOnly.ImageIndex := 113; + actFavoriteObjectsOnly.ImageIndex := IfThen(actFavoriteObjectsOnly.Checked, 112, 113); end;