Save and restore window geometry and state.

This commit is contained in:
2025-10-31 15:22:20 +01:00
parent f359a1fb11
commit dd8847d63a
2 changed files with 52 additions and 1 deletions

View File

@ -1,7 +1,10 @@
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include "../../libs/GenericCore/genericcore.h"
#include <QCloseEvent>
#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");
}
}