summaryrefslogtreecommitdiff
path: root/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp
diff options
context:
space:
mode:
authorDaniel Molkentin <daniel.molkentin@nokia.com>2009-11-30 19:38:02 +0100
committerDaniel Molkentin <daniel.molkentin@nokia.com>2009-11-30 19:38:26 +0100
commit275146afdfc2e75dcdc74f5737e65c315ea5851a (patch)
tree431c7e6c6ca71e7bc19918142a32b1eba61af33e /src/plugins/coreplugin/progressmanager/progressmanager_win.cpp
parent3565fe4e82562557125a24493276aa58c0798fd2 (diff)
downloadqt-creator-275146afdfc2e75dcdc74f5737e65c315ea5851a.tar.gz
Implement ProgressManager's progress-bar-on-icon on Windows 7.
Allow compiling with older Windows SDKs, link ole32 explictly. If you want this feature to work, you need to compile and test it on Windows 7. Task-Number: QTCREATORBUG-252
Diffstat (limited to 'src/plugins/coreplugin/progressmanager/progressmanager_win.cpp')
-rw-r--r--src/plugins/coreplugin/progressmanager/progressmanager_win.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp b/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp
index a427349c0f..2e4cb614bd 100644
--- a/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp
+++ b/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp
@@ -27,8 +27,91 @@
**
**************************************************************************/
+#include <QtCore/QVariant>
+#include <QtGui/QMainWindow>
+
+#include <coreplugin/icore.h>
+
#include "progressmanager_p.h"
+// for windows progress bar
+#include <shobjidl.h>
+
+// Windows 7 SDK required
+#ifdef __ITaskbarList3_INTERFACE_DEFINED__
+
+namespace {
+ int total = 0;
+ ITaskbarList3* pITask = 0;
+}
+
+void Core::Internal::ProgressManagerPrivate::init()
+{
+ CoInitialize(NULL);
+ HRESULT hRes = CoCreateInstance(CLSID_TaskbarList,
+ NULL,CLSCTX_INPROC_SERVER,
+ IID_ITaskbarList3,(LPVOID*) &pITask);
+ if (FAILED(hRes))
+ {
+ pITask = 0;
+ CoUninitialize();
+ return;
+ }
+
+ pITask->HrInit();
+ return;
+}
+
+void Core::Internal::ProgressManagerPrivate::cleanup()
+{
+ if (pITask) {
+ pITask->Release();
+ pITask = NULL;
+ CoUninitialize();
+ }
+}
+
+
+void Core::Internal::ProgressManagerPrivate::setApplicationLabel(const QString &text)
+{
+ Q_UNUSED(text)
+}
+
+void Core::Internal::ProgressManagerPrivate::setApplicationProgressRange(int min, int max)
+{
+ total = max-min;
+}
+
+void Core::Internal::ProgressManagerPrivate::setApplicationProgressValue(int value)
+{
+ if (pITask) {
+ WId winId = Core::ICore::instance()->mainWindow()->winId();
+ pITask->SetProgressValue(winId, value, total);
+ }
+}
+
+void Core::Internal::ProgressManagerPrivate::setApplicationProgressVisible(bool visible)
+{
+ if (!pITask)
+ return;
+
+ WId winId = Core::ICore::instance()->mainWindow()->winId();
+ if (visible)
+ pITask->SetProgressState(winId, TBPF_NORMAL);
+ else
+ pITask->SetProgressState(winId, TBPF_NOPROGRESS);
+}
+
+#else
+
+void Core::Internal::ProgressManagerPrivate::init()
+{
+}
+
+void Core::Internal::ProgressManagerPrivate::cleanup()
+{
+}
+
void Core::Internal::ProgressManagerPrivate::setApplicationLabel(const QString &text)
{
Q_UNUSED(text)
@@ -49,3 +132,6 @@ void Core::Internal::ProgressManagerPrivate::setApplicationProgressVisible(bool
{
Q_UNUSED(visible)
}
+
+
+#endif // __ITaskbarList2_INTERFACE_DEFINED__