QtDialog: Add windows taskbar progress

This commit is contained in:
Julien Jomier
2018-11-17 14:01:23 +01:00
parent 7aa41095fd
commit 9175a378f5
3 changed files with 43 additions and 0 deletions

View File

@@ -19,9 +19,20 @@ if (Qt5Widgets_FOUND)
macro(qt4_add_resources)
qt5_add_resources(${ARGN})
endmacro()
set(CMake_QT_LIBRARIES ${Qt5Widgets_LIBRARIES})
set(QT_QTMAIN_LIBRARY ${Qt5Core_QTMAIN_LIBRARIES})
# Try to find the package WinExtras for the task bar progress
if(WIN32)
find_package(Qt5WinExtras QUIET)
if (Qt5WinExtras_FOUND)
include_directories(${Qt5WinExtras_INCLUDE_DIRS})
add_definitions(-DQT_WINEXTRAS)
list(APPEND CMake_QT_LIBRARIES ${Qt5WinExtras_LIBRARIES})
endif()
endif()
# Remove this when the minimum version of Qt is 4.6.
add_definitions(-DQT_DISABLE_DEPRECATED_BEFORE=0)

View File

@@ -21,6 +21,11 @@
#include <QToolButton>
#include <QUrl>
#ifdef QT_WINEXTRAS
# include <QWinTaskbarButton>
# include <QWinTaskbarProgress>
#endif
#include "AddCacheEntry.h"
#include "FirstConfigure.h"
#include "QCMake.h"
@@ -294,6 +299,12 @@ void CMakeSetupDialog::initialize()
} else {
this->onBinaryDirectoryChanged(this->BinaryDirectory->lineEdit()->text());
}
#ifdef QT_WINEXTRAS
this->TaskbarButton = new QWinTaskbarButton(this);
this->TaskbarButton->setWindow(this->windowHandle());
this->TaskbarButton->setOverlayIcon(QIcon(":/loading.png"));
#endif
}
CMakeSetupDialog::~CMakeSetupDialog()
@@ -381,6 +392,10 @@ void CMakeSetupDialog::doConfigure()
this->CacheValues->scrollToTop();
}
this->ProgressBar->reset();
#ifdef QT_WINEXTRAS
this->TaskbarButton->progress()->reset();
#endif
}
bool CMakeSetupDialog::doConfigureInternal()
@@ -495,6 +510,9 @@ void CMakeSetupDialog::doGenerate()
this->enterState(ReadyConfigure);
this->ProgressBar->reset();
#ifdef QT_WINEXTRAS
this->TaskbarButton->progress()->reset();
#endif
this->ConfigureNeeded = true;
}
@@ -674,6 +692,12 @@ void CMakeSetupDialog::showProgress(const QString& /*msg*/, float percent)
{
percent = (percent * ProgressFactor) + ProgressOffset;
this->ProgressBar->setValue(qRound(percent * 100));
#ifdef QT_WINEXTRAS
QWinTaskbarProgress* progress = this->TaskbarButton->progress();
progress->setVisible(true);
progress->setValue(qRound(percent * 100));
#endif
}
void CMakeSetupDialog::error(const QString& msg)

View File

@@ -15,6 +15,10 @@ class CMakeCacheModel;
class QProgressBar;
class QToolButton;
#ifdef QT_WINEXTRAS
class QWinTaskbarButton;
#endif
/// Qt user interface for CMake
class CMakeSetupDialog
: public QMainWindow
@@ -118,6 +122,10 @@ protected:
QEventLoop LocalLoop;
#ifdef QT_WINEXTRAS
QWinTaskbarButton* TaskbarButton;
#endif
float ProgressOffset;
float ProgressFactor;
};