From 3f367f8292ebd427182d14b48e7dcff8c1ca5fda Mon Sep 17 00:00:00 2001 From: "MA-DEVELOP\\apeltauer" Date: Tue, 30 Apr 2019 16:15:14 +0200 Subject: [PATCH] add QWinTasbarProgress to windows build --- CMakeLists.txt | 7 ++++++ src/Gui/CMakeLists.txt | 8 +++++++ src/Gui/ProgressBar.cpp | 52 +++++++++++++++++++++++++++++++++++++++++ src/Gui/ProgressBar.h | 19 +++++++++++++++ 4 files changed, 86 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 81955e9f9a..d01884ab1a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -913,6 +913,9 @@ endif() endif() endif() endif() + if(MSVC) + find_package(Qt5WinExtras REQUIRED) + endif(MSVC) endif(BUILD_GUI) # This is a special version of the built in macro qt5_wrap_cpp @@ -1341,6 +1344,10 @@ ELSE(NOT BUILD_QT5) MESSAGE(STATUS "Qt5WebKitWidgets: not needed (BUILD_WEB)") MESSAGE(STATUS "Qt5WebEngineWidgets: not needed (BUILD_WEB)") ENDIF(BUILD_WEB) + IF(MSVC) + MESSAGE(STATUS "Qt5WinExtras: ${Qt5WinExtras_VERSION}") + ENDIF(MSVC) + ELSE(BUILD_GUI) MESSAGE(STATUS "Qt5Widgets: not needed") MESSAGE(STATUS "Qt5PrintSupport: not needed") diff --git a/src/Gui/CMakeLists.txt b/src/Gui/CMakeLists.txt index 40777f8785..3541861e23 100644 --- a/src/Gui/CMakeLists.txt +++ b/src/Gui/CMakeLists.txt @@ -95,6 +95,14 @@ if (BUILD_QT5) ${Qt5Network_LIBRARIES} ${Qt5UiTools_LIBRARIES} ) + if(MSVC) + include_directories( + ${Qt5WinExtras_INCLUDE_DIRS} + ) + list(APPEND FreeCADGui_LIBS + ${Qt5WinExtras_LIBRARIES} + ) + endif(MSVC) else() include_directories( ${QT_INCLUDE_DIR} diff --git a/src/Gui/ProgressBar.cpp b/src/Gui/ProgressBar.cpp index 165fbace19..1e0de3d1b5 100644 --- a/src/Gui/ProgressBar.cpp +++ b/src/Gui/ProgressBar.cpp @@ -335,6 +335,8 @@ QProgressBar* Sequencer::getProgressBar(QWidget* parent) ProgressBar::ProgressBar (Sequencer* s, QWidget * parent) : QProgressBar(parent), sequencer(s) + , m_taskbarButton(nullptr) + , m_taskbarProgress(nullptr) { d = new Gui::ProgressBarPrivate; d->minimumDuration = 2000; // 2 seconds @@ -362,6 +364,36 @@ int ProgressBar::minimumDuration() const return d->minimumDuration; } +void Gui::ProgressBar::reset() +{ + QProgressBar::reset(); + if (setupTaskBarProgress()) m_taskbarProgress->reset(); +} + +void Gui::ProgressBar::setRange(int minimum, int maximum) +{ + QProgressBar::setRange(minimum, maximum); + if (setupTaskBarProgress()) m_taskbarProgress->setRange(minimum, maximum); +} + +void Gui::ProgressBar::setMinimum(int minimum) +{ + QProgressBar::setMinimum(minimum); + if (setupTaskBarProgress()) m_taskbarProgress->setMinimum(minimum); +} + +void Gui::ProgressBar::setMaximum(int maximum) +{ + QProgressBar::setMaximum(maximum); + if (setupTaskBarProgress()) m_taskbarProgress->setMaximum(maximum); +} + +void Gui::ProgressBar::setValue(int value) +{ + QProgressBar::setValue(value); + if (setupTaskBarProgress()) m_taskbarProgress->setValue(value); +} + void ProgressBar::setMinimumDuration (int ms) { if (value() == 0) @@ -428,6 +460,26 @@ void ProgressBar::leaveControlEvents() releaseKeyboard(); } +bool Gui::ProgressBar::setupTaskBarProgress(void) +{ + if (!m_taskbarButton || !m_taskbarProgress) + { +#if QT_VERSION >= 0x050000 + m_taskbarButton = new QWinTaskbarButton(this); + m_taskbarButton->setWindow(MainWindow::getInstance()->windowHandle()); + //m_myButton->setOverlayIcon(QIcon("")); + + m_taskbarProgress = m_taskbarButton->progress(); + m_taskbarProgress->setVisible(true); + return true; +#else + return false; +#endif + } + else if (m_taskbarButton && m_taskbarProgress) return true; + return false; +} + bool ProgressBar::eventFilter(QObject* o, QEvent* e) { if (sequencer->isRunning() && e != 0) { diff --git a/src/Gui/ProgressBar.h b/src/Gui/ProgressBar.h index d99439cae1..70d8fdfdeb 100644 --- a/src/Gui/ProgressBar.h +++ b/src/Gui/ProgressBar.h @@ -25,6 +25,11 @@ #define GUI_PROGRESSBAR_H #include +#if QT_VERSION >= 0x050000 +#include +#include +#endif + #include @@ -151,6 +156,13 @@ public: */ int minimumDuration() const; + void reset(); + void setRange(int minimum, int maximum); + void setMinimum(int minimum); + void setMaximum(int maximum); + void setValue(int value); + + public Q_SLOTS: /** Sets the time that must pass before the progress bar appears to \a ms. */ @@ -177,9 +189,16 @@ private: void enterControlEvents(); /** Loses the control over incoming events*/ void leaveControlEvents(); + + /* Set up the task abr progress in windows */ + bool setupTaskBarProgress(void); + //@} ProgressBarPrivate* d; Sequencer* sequencer; + + QWinTaskbarProgress* m_taskbarProgress; + QWinTaskbarButton* m_taskbarButton; friend class Sequencer; };