diff options
author | Daniel Molkentin <daniel.molkentin@nokia.com> | 2009-11-30 19:38:02 +0100 |
---|---|---|
committer | Daniel Molkentin <daniel.molkentin@nokia.com> | 2009-11-30 19:38:26 +0100 |
commit | 275146afdfc2e75dcdc74f5737e65c315ea5851a (patch) | |
tree | 431c7e6c6ca71e7bc19918142a32b1eba61af33e /src/plugins/coreplugin/progressmanager/progressmanager_win.cpp | |
parent | 3565fe4e82562557125a24493276aa58c0798fd2 (diff) | |
download | qt-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.cpp | 86 |
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__ |