From a339e81faa022d005ec70a664a7871bc524423e2 Mon Sep 17 00:00:00 2001
From: Michael Morgan <84428382+aa5sh@users.noreply.github.com>
Date: Thu, 2 Apr 2026 10:33:05 -0500
Subject: [PATCH] Add SQL Query dialog with highlighter
Introduce a read-only SQL Query dialog and SQL syntax highlighter. Adds new UI and implementation files (ui/SqlQueryDialog.{cpp,h,ui} and ui/component/SqlHighlighter.{cpp,h}), updates QLog.pro to include them, and wires a new menu action in MainWindow (showSqlQuery). The dialog provides syntax highlighting, schema-aware autocomplete, keyboard shortcuts (F5 / Ctrl+Return / Ctrl+Space), safety checks to allow only read-only SELECT/CTE queries, and export options (TXT/CSV/ADIF). ADIF export reuses the existing ExportDialog path and dialog geometry/last-dir are persisted via QSettings.
---
QLog.pro | 5 +
ui/MainWindow.cpp | 9 +
ui/MainWindow.h | 1 +
ui/MainWindow.ui | 31 ++
ui/SqlQueryDialog.cpp | 619 ++++++++++++++++++++++++++++++++
ui/SqlQueryDialog.h | 51 +++
ui/SqlQueryDialog.ui | 155 ++++++++
ui/component/SqlHighlighter.cpp | 170 +++++++++
ui/component/SqlHighlighter.h | 36 ++
9 files changed, 1077 insertions(+)
create mode 100644 ui/SqlQueryDialog.cpp
create mode 100644 ui/SqlQueryDialog.h
create mode 100644 ui/SqlQueryDialog.ui
create mode 100644 ui/component/SqlHighlighter.cpp
create mode 100644 ui/component/SqlHighlighter.h
diff --git a/QLog.pro b/QLog.pro
index f4cd0930..819bc9dd 100644
--- a/QLog.pro
+++ b/QLog.pro
@@ -160,6 +160,7 @@ SOURCES += \
ui/DxccTableWidget.cpp \
ui/EditActivitiesDialog.cpp \
ui/ExportDialog.cpp \
+ ui/SqlQueryDialog.cpp \
ui/ExportPasswordDialog.cpp \
ui/LoadDatabaseDialog.cpp \
ui/PlatformSettingsDialog.cpp \
@@ -199,6 +200,7 @@ SOURCES += \
ui/component/MultiselectCompleter.cpp \
ui/component/RepeatButton.cpp \
ui/component/SmartSearchBox.cpp \
+ ui/component/SqlHighlighter.cpp \
ui/component/SwitchButton.cpp
HEADERS += \
@@ -324,6 +326,7 @@ HEADERS += \
ui/DxccTableWidget.h \
ui/EditActivitiesDialog.h \
ui/ExportDialog.h \
+ ui/SqlQueryDialog.h \
ui/ExportPasswordDialog.h \
ui/LoadDatabaseDialog.h \
ui/PlatformSettingsDialog.h \
@@ -368,6 +371,7 @@ HEADERS += \
ui/component/RepeatButton.h \
ui/component/ShutdownAwareWidget.h \
ui/component/SmartSearchBox.h \
+ ui/component/SqlHighlighter.h \
ui/component/StyleItemDelegate.h \
ui/component/SwitchButton.h
@@ -388,6 +392,7 @@ FORMS += \
ui/DxWidget.ui \
ui/EditActivitiesDialog.ui \
ui/ExportDialog.ui \
+ ui/SqlQueryDialog.ui \
ui/ExportPasswordDialog.ui \
ui/LoadDatabaseDialog.ui \
ui/PlatformSettingsDialog.ui \
diff --git a/ui/MainWindow.cpp b/ui/MainWindow.cpp
index 5fb7b679..9343ade0 100644
--- a/ui/MainWindow.cpp
+++ b/ui/MainWindow.cpp
@@ -11,6 +11,7 @@
#include "ui/SettingsDialog.h"
#include "ui/ImportDialog.h"
#include "ui/ExportDialog.h"
+#include "ui/SqlQueryDialog.h"
#include "core/FldigiTCPServer.h"
#include "rig/Rig.h"
#include "rotator/Rotator.h"
@@ -1100,6 +1101,14 @@ void MainWindow::showQSLGallery()
dialog.exec();
}
+void MainWindow::showSqlQuery()
+{
+ FCT_IDENTIFICATION;
+
+ SqlQueryDialog dialog(this);
+ dialog.exec();
+}
+
void MainWindow::showDumpDB()
{
FCT_IDENTIFICATION;
diff --git a/ui/MainWindow.h b/ui/MainWindow.h
index b8b7a114..19856c16 100644
--- a/ui/MainWindow.h
+++ b/ui/MainWindow.h
@@ -80,6 +80,7 @@ private slots:
void showDumpDB();
void showLoadDB();
void showQSLGallery();
+ void showSqlQuery();
void saveProfileLayoutGeometry();
void setEquipmentKeepOptions(bool);
diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui
index 3f52230c..72ea0359 100644
--- a/ui/MainWindow.ui
+++ b/ui/MainWindow.ui
@@ -80,6 +80,8 @@
+
+