141 lines
4.6 KiB
C++
141 lines
4.6 KiB
C++
#include "mainwindow.h"
|
|
#include "./ui_mainwindow.h"
|
|
|
|
#include <QCloseEvent>
|
|
#include <QMessageBox>
|
|
|
|
#include "../../ApplicationConfig.h"
|
|
#include "data/settingshandler.h"
|
|
#include "genericcore.h"
|
|
|
|
static QString updateTextClean = "Do you want to update the application now?";
|
|
static QString updateTextDirty = "Do you want to save the tasks & update the application now?";
|
|
|
|
MainWindow::MainWindow(QWidget* parent)
|
|
: QMainWindow(parent)
|
|
, ui(new Ui::MainWindow) {
|
|
ui->setupUi(this);
|
|
|
|
m_core = new GenericCore();
|
|
|
|
/// application icon
|
|
const QString iconString = "://feature.png";
|
|
#ifdef QT_DEBUG
|
|
QPixmap pixmap = QPixmap(iconString);
|
|
QTransform transform = QTransform();
|
|
transform.rotate(180);
|
|
QPixmap rotated = pixmap.transformed(transform);
|
|
setWindowIcon(QIcon(rotated));
|
|
#else
|
|
setWindowIcon(QIcon(iconString));
|
|
#endif
|
|
|
|
createActions();
|
|
createHelpMenu();
|
|
|
|
/// 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);
|
|
connect(this, &MainWindow::checkForUpdates, this,
|
|
&MainWindow::on_actionCheck_for_update_triggered, Qt::QueuedConnection);
|
|
}
|
|
|
|
MainWindow::~MainWindow() {
|
|
delete ui;
|
|
delete m_core;
|
|
}
|
|
|
|
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");
|
|
}
|
|
}
|
|
|
|
void MainWindow::onAboutClicked() {
|
|
const QString applicationName = APPLICATION_NAME;
|
|
const QString titlePrefix = tr("About ");
|
|
const QString aboutText =
|
|
tr(QString("<b>%1 v%2</b> is a template for Qt applications."
|
|
"<br><br><a href=\"https://working-copy.org/\">Working-Copy_Collective website</a>"
|
|
"<br><br><a href=\"mailto:support@working-copy.org\">Mail to support</a>"
|
|
"<br><br>It uses the <a href=\"https://qt.io\">Qt Framework</a>.")
|
|
.arg(applicationName)
|
|
.arg(APPLICATION_VERSION)
|
|
.toLatin1());
|
|
QMessageBox::about(this, titlePrefix + applicationName, aboutText);
|
|
}
|
|
|
|
void MainWindow::showStatusMessage(const QString text) {
|
|
qInfo() << text;
|
|
ui->statusbar->showMessage(text);
|
|
}
|
|
|
|
void MainWindow::on_actionCheck_for_update_triggered() {
|
|
showStatusMessage("Checking for update...");
|
|
const bool updateAvailable = m_core->isApplicationUpdateAvailable();
|
|
if (updateAvailable) {
|
|
const QString text = isWindowModified() ? updateTextDirty : updateTextClean;
|
|
const QMessageBox::StandardButton clickedButton = QMessageBox::question(
|
|
this, tr("Update available."), text, QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
|
|
if (clickedButton == QMessageBox::Yes) {
|
|
m_core->triggerApplicationUpdate();
|
|
close();
|
|
}
|
|
}
|
|
}
|
|
|
|
void MainWindow::on_pushButton_clicked() {
|
|
const QString prefix("Backend provided by: ");
|
|
ui->label->setText(prefix + m_core->toString());
|
|
}
|
|
|
|
void MainWindow::createHelpMenu() {
|
|
QMenu* helpMenu = ui->menu_Help;
|
|
helpMenu->addSeparator();
|
|
QAction* aboutAct = helpMenu->addAction(tr("&About"), this, &MainWindow::onAboutClicked);
|
|
aboutAct->setStatusTip(tr("Show the application's About box"));
|
|
|
|
QAction* aboutQtAct = helpMenu->addAction(tr("About &Qt"), qApp, &QApplication::aboutQt);
|
|
aboutQtAct->setStatusTip(tr("Show the Qt library's About box"));
|
|
}
|
|
|
|
void MainWindow::createActions() {
|
|
// TODO add generic menu actions (file/new, edit/cut, ...)
|
|
}
|