summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkh1 <karsten.heimrich@digia.com>2014-09-10 11:54:44 +0200
committerKarsten Heimrich <karsten.heimrich@digia.com>2014-09-11 11:11:45 +0200
commit520a9f300fb0c14a704bb2cad3fb555a47a1ddbc (patch)
treef158ec390b4dc722b40a7a86e43ec022a5d77a83
parentdbd94d02756d48f2412be1c02e59ba4f13b572c7 (diff)
Implement progress indicator on taskbar on Windows.
Task-number: QTIFW-15 Change-Id: Ia11c185f25dff2f1614425ec5ff78e79b2fa2a77 Reviewed-by: Jarek Kobus <jaroslaw.kobus@digia.com> Reviewed-by: Kai Koehne <kai.koehne@digia.com>
-rw-r--r--installerfw.pri1
-rw-r--r--src/libs/installer/installer.pro1
-rw-r--r--src/libs/installer/packagemanagergui.cpp28
-rw-r--r--src/libs/installer/packagemanagergui.h5
-rw-r--r--src/libs/installer/performinstallationform.cpp16
-rw-r--r--src/libs/installer/performinstallationform.h5
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 <QApplication>
+
#include <QtCore/QDir>
#include <QtCore/QPair>
#include <QtCore/QProcess>
@@ -80,7 +82,9 @@
#include <QShowEvent>
#ifdef Q_OS_WIN
-# include <qt_windows.h>
+# include <qt_windows.h>
+# include <QWinTaskbarButton>
+# include <QWinTaskbarProgress>
#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 <QApplication>
#include <QLabel>
#include <QProgressBar>
#include <QPushButton>
@@ -53,6 +53,11 @@
#include <QtCore/QTimer>
+#ifdef Q_OS_WIN
+# include <QWinTaskbarButton>
+# include <QWinTaskbarProgress>
+#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