From b2d95f471eed6e1ad00a198ceffac7a8b53202b4 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 25 Apr 2017 14:39:18 +0200 Subject: [PATCH] Ref T41, download dialog available for all swift UI applications --- src/blackgui/guiapplication.cpp | 27 +++++++++++++++++++++++++++ src/blackgui/guiapplication.h | 16 +++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/blackgui/guiapplication.cpp b/src/blackgui/guiapplication.cpp index fdd6792b6..09cda8c72 100644 --- a/src/blackgui/guiapplication.cpp +++ b/src/blackgui/guiapplication.cpp @@ -11,6 +11,7 @@ #include "blackcore/context/contextnetwork.h" #include "blackcore/data/globalsetup.h" #include "blackgui/components/applicationclosedialog.h" +#include "blackgui/components/downloadandinstalldialog.h" #include "blackgui/guiapplication.h" #include "blackgui/guiutility.h" #include "blackgui/registermetadata.h" @@ -386,6 +387,10 @@ namespace BlackGui QDesktopServices::openUrl(QUrl::fromLocalFile(path)); } }); + + a = menu.addAction(CIcons::swift24(), "Check for updates"); + c = connect(a, &QAction::triggered, this, &CGuiApplication::checkNewVersion); + Q_ASSERT_X(c, Q_FUNC_INFO, "Connect failed"); Q_UNUSED(c); } @@ -622,6 +627,28 @@ namespace BlackGui return true; } + void CGuiApplication::checkNewVersion() + { + if (!m_installDialog) + { + // without parent stylesheet is not inherited + m_installDialog = new CDownloadAndInstallDialog(this->mainApplicationWindow()); + } + + if (!m_installDialog->isNewVersionAvailable()) return; + const int result = m_installDialog->exec(); + if (result != QDialog::Accepted) { return; } + } + + void CGuiApplication::triggerNewVersionCheck(int delayedMs) + { + QTimer::singleShot(delayedMs, this, [ = ] + { + if (this->m_installDialog) { return; } + this->checkNewVersion(); + }); + } + void CGuiApplication::settingsChanged() { // changing widget style is slow, so I try to prevent setting it when nothing changed diff --git a/src/blackgui/guiapplication.h b/src/blackgui/guiapplication.h index 8fb9838a2..32770f630 100644 --- a/src/blackgui/guiapplication.h +++ b/src/blackgui/guiapplication.h @@ -35,7 +35,14 @@ class QWidget; class QMainWindow; namespace BlackMisc { class CLogCategoryList; } -namespace BlackGui { namespace Components { class CApplicationCloseDialog; }} +namespace BlackGui +{ + namespace Components + { + class CApplicationCloseDialog; + class CDownloadAndInstallDialog; + } +} namespace BlackGui { /*! @@ -154,6 +161,9 @@ namespace BlackGui //! Show close dialog QDialog::DialogCode showCloseDialog(QMainWindow *mainWindow, QCloseEvent *closeEvent); + //! Trigger new version check + void triggerNewVersionCheck(int delayedMs); + //! Set icon //! \note Pixmap requires a valid QApplication, so it cannot be passed as constructor parameter static void setWindowIcon(const QPixmap &icon); @@ -192,11 +202,15 @@ namespace BlackGui //! Handle paring of special GUI cmd arguments virtual bool parsingHookIn() override; + //! Check for a new version (update) + void checkNewVersion(); + //! Register metadata static void registerMetadata(); private: QPixmap m_windowIcon; + BlackGui::Components::CDownloadAndInstallDialog *m_installDialog = nullptr; //!< software installation dialog QCommandLineOption m_cmdWindowStateMinimized { "empty" }; //!< window state (minimized) QCommandLineOption m_cmdWindowMode { "empty" }; //!< window mode (flags: frameless ...) CStyleSheetUtility m_styleSheetUtility{{}, this}; //!< style sheet utility