From 520a9f300fb0c14a704bb2cad3fb555a47a1ddbc Mon Sep 17 00:00:00 2001 From: kh1 Date: Wed, 10 Sep 2014 11:54:44 +0200 Subject: Implement progress indicator on taskbar on Windows. Task-number: QTIFW-15 Change-Id: Ia11c185f25dff2f1614425ec5ff78e79b2fa2a77 Reviewed-by: Jarek Kobus Reviewed-by: Kai Koehne --- installerfw.pri | 1 + src/libs/installer/installer.pro | 1 + src/libs/installer/packagemanagergui.cpp | 28 +++++++++++++++++++++++++- src/libs/installer/packagemanagergui.h | 5 +++++ src/libs/installer/performinstallationform.cpp | 16 ++++++++++++++- src/libs/installer/performinstallationform.h | 5 +++++ 6 files changed, 54 insertions(+), 2 deletions(-) diff --git a/installerfw.pri b/installerfw.pri index 8c3f2eee2..f2c5fe37d 100644 --- a/installerfw.pri +++ b/installerfw.pri @@ -105,6 +105,7 @@ macx:LIBS += -framework Carbon -framework Security QT += uitools core-private CONFIG(static, static|shared) { + win32:QT += winextras QT += concurrent network qml xml } CONFIG += depend_includepath no_private_qt_headers_warning c++11 diff --git a/src/libs/installer/installer.pro b/src/libs/installer/installer.pro index 0f8ec3bcb..97fa4904a 100644 --- a/src/libs/installer/installer.pro +++ b/src/libs/installer/installer.pro @@ -35,6 +35,7 @@ QT += \ concurrent \ widgets \ core-private +win32:QT += winextras HEADERS += packagemanagercore.h \ packagemanagercore_p.h \ diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp index e389c2866..cf4367d6f 100644 --- a/src/libs/installer/packagemanagergui.cpp +++ b/src/libs/installer/packagemanagergui.cpp @@ -55,6 +55,8 @@ #include "kdsysinfo.h" +#include + #include #include #include @@ -80,7 +82,9 @@ #include #ifdef Q_OS_WIN -# include +# include +# include +# include #endif using namespace KDUpdater; @@ -924,6 +928,11 @@ IntroductionPage::IntroductionPage(PackageManagerCore *core) connect(core, SIGNAL(coreNetworkSettingsChanged()), this, SLOT(onCoreNetworkSettingsChanged())); m_updateComponents->setEnabled(ProductKeyCheck::instance()->hasValidKey()); + +#ifdef Q_OS_WIN + m_taskButton = new QWinTaskbarButton(this); + connect(core, SIGNAL(metaJobProgress(int)), m_taskButton->progress(), SLOT(setValue(int))); +#endif } int IntroductionPage::nextId() const @@ -959,6 +968,15 @@ bool IntroductionPage::validatePage() showMetaInfoUdate(); } +#ifdef Q_OS_WIN + if (!m_taskButton->window()) + m_taskButton->setWindow(QApplication::activeWindow()->windowHandle()); + + m_taskButton->progress()->reset(); + m_taskButton->progress()->resume(); + m_taskButton->progress()->setVisible(true); +#endif + // fetch updater packages if (core->isUpdater()) { if (!m_updatesFetched) { @@ -1012,6 +1030,9 @@ bool IntroductionPage::validatePage() } gui()->setSettingsButtonEnabled(true); +#ifdef Q_OS_WIN + m_taskButton->progress()->setVisible(!isComplete()); +#endif return isComplete(); } @@ -1071,6 +1092,11 @@ void IntroductionPage::setErrorMessage(const QString &error) m_errorLabel->setText(error); m_errorLabel->setPalette(palette); + +#ifdef Q_OS_WIN + m_taskButton->progress()->stop(); + m_taskButton->progress()->setValue(100); +#endif } void IntroductionPage::callControlScript(const QString &callback) diff --git a/src/libs/installer/packagemanagergui.h b/src/libs/installer/packagemanagergui.h index 7231a783c..11f440668 100644 --- a/src/libs/installer/packagemanagergui.h +++ b/src/libs/installer/packagemanagergui.h @@ -61,6 +61,7 @@ class QListWidgetItem; class QProgressBar; class QRadioButton; class QTextBrowser; +class QWinTaskbarButton; QT_END_NAMESPACE namespace QInstaller { @@ -259,6 +260,10 @@ private: QRadioButton *m_packageManager; QRadioButton *m_updateComponents; QRadioButton *m_removeAllComponents; + +#ifdef Q_OS_WIN + QWinTaskbarButton *m_taskButton; +#endif }; diff --git a/src/libs/installer/performinstallationform.cpp b/src/libs/installer/performinstallationform.cpp index 5480b397a..2405fc49b 100644 --- a/src/libs/installer/performinstallationform.cpp +++ b/src/libs/installer/performinstallationform.cpp @@ -44,7 +44,7 @@ #include "lazyplaintextedit.h" #include "progresscoordinator.h" - +#include #include #include #include @@ -53,6 +53,11 @@ #include +#ifdef Q_OS_WIN +# include +# include +#endif + using namespace QInstaller; // -- PerformInstallationForm @@ -65,6 +70,10 @@ PerformInstallationForm::PerformInstallationForm(QObject *parent) , m_detailsBrowser(0) , m_updateTimer(0) { +#ifdef Q_OS_WIN + m_taskButton = new QWinTaskbarButton(this); + m_taskButton->progress()->setVisible(true); +#endif } void PerformInstallationForm::setupUi(QWidget *widget) @@ -136,6 +145,11 @@ void PerformInstallationForm::updateProgress() const int progressPercentage = progressCoordninator->progressInPercentage(); m_progressBar->setValue(progressPercentage); +#ifdef Q_OS_WIN + if (!m_taskButton->window()) + m_taskButton->setWindow(QApplication::activeWindow()->windowHandle()); + m_taskButton->progress()->setValue(progressPercentage); +#endif static QString lastLabelText; if (lastLabelText == progressCoordninator->labelText()) diff --git a/src/libs/installer/performinstallationform.h b/src/libs/installer/performinstallationform.h index 209afc42d..0f519be25 100644 --- a/src/libs/installer/performinstallationform.h +++ b/src/libs/installer/performinstallationform.h @@ -50,6 +50,7 @@ class QProgressBar; class QPushButton; class QTimer; class QWidget; +class QWinTaskbarButton; QT_END_NAMESPACE class LazyPlainTextEdit; @@ -89,6 +90,10 @@ private: QPushButton *m_detailsButton; LazyPlainTextEdit *m_detailsBrowser; QTimer *m_updateTimer; + +#ifdef Q_OS_WIN + QWinTaskbarButton *m_taskButton; +#endif }; } // namespace QInstaller -- cgit v1.2.3