add QWinTasbarProgress to windows build

This commit is contained in:
MA-DEVELOP\apeltauer
2019-04-30 16:15:14 +02:00
committed by wmayer
parent cd74f2e929
commit 3f367f8292
4 changed files with 86 additions and 0 deletions

View File

@@ -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")

View File

@@ -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}

View File

@@ -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) {

View File

@@ -25,6 +25,11 @@
#define GUI_PROGRESSBAR_H
#include <QProgressBar>
#if QT_VERSION >= 0x050000
#include <QWinTaskbarProgress>
#include <QWinTaskbarButton>
#endif
#include <Base/Sequencer.h>
@@ -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;
};