From 28bd1f2aefa67ed356485466e63a42e0ac360fa9 Mon Sep 17 00:00:00 2001 From: Ernie Pasveer Date: Fri, 30 Jan 2026 13:51:13 -0600 Subject: [PATCH] Add method to remember variable names when restarting a session. --- src/SeerGdbWidget.cpp | 38 +++----------------- src/SeerMainWindow.cpp | 44 +++++++++++++++++++++++- src/SeerVariableTrackerBrowserWidget.cpp | 38 ++++++++++++++++++++ src/SeerVariableTrackerBrowserWidget.h | 3 ++ src/SeerVariableTrackerBrowserWidget.ui | 17 +++++++++ src/resource.qrc | 2 ++ 6 files changed, 108 insertions(+), 34 deletions(-) diff --git a/src/SeerGdbWidget.cpp b/src/SeerGdbWidget.cpp index c2e245b..4f85348 100644 --- a/src/SeerGdbWidget.cpp +++ b/src/SeerGdbWidget.cpp @@ -1452,40 +1452,12 @@ void SeerGdbWidget::handleGdbTerminateExecutable (bool confirm) { if (isGdbRuning() == true) { if (confirm) { + int result = QMessageBox::warning(this, "Seer", + QString("Terminate current session?"), + QMessageBox::Ok|QMessageBox::Cancel, QMessageBox::Cancel); - QSettings settings; - bool prompt = true; - - settings.beginGroup("mainwindow"); { - prompt = settings.value("promptterminate", prompt).toBool(); - } settings.endGroup(); - - if (prompt) { - - QMessageBox msgBox(this); - msgBox.setWindowTitle("Seer"); - msgBox.setText("Terminate current session?"); - msgBox.setIcon(QMessageBox::Question); - - // Add "Don't ask again" checkbox - QCheckBox* dontAskAgainBox = new QCheckBox("Don't ask again", &msgBox); - msgBox.setCheckBox(dontAskAgainBox); - - msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); - msgBox.setDefaultButton(QMessageBox::Ok); - - int result = msgBox.exec(); - - // Save preference if checked - if (dontAskAgainBox->isChecked()) { - settings.beginGroup("mainwindow"); { - settings.setValue("promptterminate", false); - } settings.endGroup(); - } - - if (result == QMessageBox::Cancel) { - break; - } + if (result == QMessageBox::Cancel) { + break; } } diff --git a/src/SeerMainWindow.cpp b/src/SeerMainWindow.cpp index 2bcad33..aba42ec 100644 --- a/src/SeerMainWindow.cpp +++ b/src/SeerMainWindow.cpp @@ -852,7 +852,45 @@ void SeerMainWindow::handleHelpAbout () { void SeerMainWindow::handleTerminateExecutable () { - gdbWidget->handleGdbTerminateExecutable(); + if (gdbWidget->isGdbRuning() == true) { + + QSettings settings; + bool prompt = true; + + settings.beginGroup("mainwindow"); { + prompt = settings.value("promptterminate", prompt).toBool(); + } settings.endGroup(); + + if (prompt) { + + QMessageBox msgBox(this); + msgBox.setWindowTitle("Seer"); + msgBox.setText("Terminate current session?"); + msgBox.setIcon(QMessageBox::Question); + + // Add "Don't ask again" checkbox + QCheckBox* dontAskAgainBox = new QCheckBox("Don't ask again", &msgBox); + msgBox.setCheckBox(dontAskAgainBox); + + msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Ok); + + int result = msgBox.exec(); + + // Save preference if checked + if (dontAskAgainBox->isChecked()) { + settings.beginGroup("mainwindow"); { + settings.setValue("promptterminate", false); + } settings.endGroup(); + } + + if (result == QMessageBox::Cancel) { + return; + } + } + + gdbWidget->handleGdbTerminateExecutable(false); + } } void SeerMainWindow::handleRestartExecutable () { @@ -899,6 +937,10 @@ void SeerMainWindow::handleRestartExecutable () { } } + if (gdbWidget->isGdbRuning() == true) { + gdbWidget->handleGdbTerminateExecutable(false); + } + if (gdbWidget->isGdbRuning() == false && gdbWidget->hasBackupLaunchMode()) { gdbWidget->restoreLaunchMode(); } diff --git a/src/SeerVariableTrackerBrowserWidget.cpp b/src/SeerVariableTrackerBrowserWidget.cpp index 9a4b74a..940e5b4 100644 --- a/src/SeerVariableTrackerBrowserWidget.cpp +++ b/src/SeerVariableTrackerBrowserWidget.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include SeerVariableTrackerBrowserWidget::SeerVariableTrackerBrowserWidget (QWidget* parent) : QWidget(parent) { @@ -39,6 +40,10 @@ SeerVariableTrackerBrowserWidget::SeerVariableTrackerBrowserWidget (QWidget* par QObject::connect(variablesTreeWidget, &QTreeWidget::itemExpanded, this, &SeerVariableTrackerBrowserWidget::handleItemExpanded); QObject::connect(variablesTreeWidget, &QTreeWidget::itemEntered, this, &SeerVariableTrackerBrowserWidget::handleItemEntered); QObject::connect(variablesTreeWidget, &QTreeWidget::customContextMenuRequested, this, &SeerVariableTrackerBrowserWidget::handleContextMenu); + QObject::connect(variableRememberToolButton, &QToolButton::toggled, this, &SeerVariableTrackerBrowserWidget::handleRememberToolButton); + + // Read state. + readSettings(); } SeerVariableTrackerBrowserWidget::~SeerVariableTrackerBrowserWidget () { @@ -240,6 +245,11 @@ void SeerVariableTrackerBrowserWidget::handleStoppingPointReached () { void SeerVariableTrackerBrowserWidget::handleSessionTerminated () { + // Remember the variable names? + if (variableRememberToolButton->isChecked() == true) { + return; + } + // Delete previous contents. variablesTreeWidget->clear(); @@ -805,3 +815,31 @@ void SeerVariableTrackerBrowserWidget::handleContextMenu (const QPoint& pos) { } } +void SeerVariableTrackerBrowserWidget::handleRememberToolButton (bool checked) { + + Q_UNUSED(checked); + + writeSettings(); +} + +void SeerVariableTrackerBrowserWidget::readSettings () { + + QSettings settings; + bool remember = false; + + settings.beginGroup("variabletrackerwindow"); { + remember = settings.value("remembervariablenames", remember).toBool(); + } settings.endGroup(); + + variableRememberToolButton->setChecked(remember); +} + +void SeerVariableTrackerBrowserWidget::writeSettings () { + + QSettings settings; + + settings.beginGroup("variabletrackerwindow"); { + settings.setValue("remembervariablenames", variableRememberToolButton->isChecked()); + } settings.endGroup(); +} + diff --git a/src/SeerVariableTrackerBrowserWidget.h b/src/SeerVariableTrackerBrowserWidget.h index 79b4b70..98f0a9b 100644 --- a/src/SeerVariableTrackerBrowserWidget.h +++ b/src/SeerVariableTrackerBrowserWidget.h @@ -31,6 +31,7 @@ class SeerVariableTrackerBrowserWidget : public QWidget, protected Ui::SeerVaria void handleItemExpanded (QTreeWidgetItem* item); void handleItemCollapsed (QTreeWidgetItem* item); void handleContextMenu (const QPoint& pos); + void handleRememberToolButton (bool checked); signals: void refreshVariableTrackerNames (); @@ -49,6 +50,8 @@ class SeerVariableTrackerBrowserWidget : public QWidget, protected Ui::SeerVaria void showEvent (QShowEvent* event); private: + void readSettings (); + void writeSettings (); }; diff --git a/src/SeerVariableTrackerBrowserWidget.ui b/src/SeerVariableTrackerBrowserWidget.ui index 2f93938..7ed6860 100644 --- a/src/SeerVariableTrackerBrowserWidget.ui +++ b/src/SeerVariableTrackerBrowserWidget.ui @@ -29,6 +29,23 @@ + + + + Remember variable names between sessions. + + + ... + + + + :/seer/resources/RelaxLightIcons/pin.svg:/seer/resources/RelaxLightIcons/pin.svg + + + true + + + diff --git a/src/resource.qrc b/src/resource.qrc index d2e8557..3bd9fb8 100644 --- a/src/resource.qrc +++ b/src/resource.qrc @@ -59,6 +59,8 @@ resources/RelaxLightIcons/data-warning.svg resources/RelaxLightIcons/dialog-question.svg resources/RelaxLightIcons/system-shutdown.svg + resources/RelaxLightIcons/pin.svg + resources/RelaxLightIcons/lock.svg resources/help/ThreadProcessInfoBrowser.md resources/help/seergdb.hlp resources/help/StructVisualizer.md