From dd8847d63a12f38793300b99fe87a01bdfb0441f Mon Sep 17 00:00:00 2001 From: Bent Witthold Date: Fri, 31 Oct 2025 15:22:20 +0100 Subject: [PATCH] Save and restore window geometry and state. --- mainwindow.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- mainwindow.h | 4 ++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index 3cb460e..ecf8e55 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,7 +1,10 @@ #include "mainwindow.h" #include "./ui_mainwindow.h" -#include "../../libs/GenericCore/genericcore.h" +#include + +#include "data/settingshandler.h" +#include "genericcore.h" MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) @@ -21,6 +24,12 @@ MainWindow::MainWindow(QWidget* parent) #else setWindowIcon(QIcon(iconString)); #endif + + /// TODO restore window geometry and state (& save it in closeEvent) + const QVariantMap settings = SettingsHandler::getSettings("GUI"); + restoreGeometry(settings.value("geometry").toByteArray()); + restoreState(settings.value("windowState").toByteArray()); + connect(m_core, &GenericCore::displayStatusMessage, this, &MainWindow::displayStatusMessage); connect(this, &MainWindow::displayStatusMessage, this, &MainWindow::showStatusMessage); } @@ -39,3 +48,41 @@ void MainWindow::showStatusMessage(const QString text) { qInfo() << text; ui->statusbar->showMessage(text); } + +void MainWindow::closeEvent(QCloseEvent* event) { + if (isWindowModified()) { + QMessageBox msgBox; + msgBox.setWindowTitle(windowTitle() + " - Save dialog"); + msgBox.setText("The document has been modified."); + msgBox.setInformativeText("Do you want to save your changes?"); + msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Save); + int ret = msgBox.exec(); + + switch (ret) { + case QMessageBox::Save: + // TODO m_core->saveItems(); + event->accept(); + break; + case QMessageBox::Discard: + event->accept(); + break; + case QMessageBox::Cancel: + event->ignore(); + break; + default: + /// should never be reached + qCritical() << "unexpected switch case in closeEvent:" << ret; + event->ignore(); + break; + } + } else { + event->accept(); + } + + if (event->isAccepted()) { + qInfo() << "Saving GUI settings..."; + SettingsHandler::saveSettings({{"geometry", saveGeometry()}, {"windowState", saveState()}}, + "GUI"); + } +} diff --git a/mainwindow.h b/mainwindow.h index 3b4d8d2..f47ea80 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -21,6 +21,10 @@ class MainWindow : public QMainWindow { signals: void displayStatusMessage(QString message); + + protected: + void closeEvent(QCloseEvent* event) override; + private slots: void on_pushButton_clicked();