Procházet zdrojové kódy

Merge topic 'windows-taskbar-progress'

9175a378f5 QtDialog: Add windows taskbar progress

Acked-by: Kitware Robot <[email protected]>
Merge-request: !2628
Brad King před 7 roky
rodič
revize
5bc33226b2

+ 11 - 0
Source/QtDialog/CMakeLists.txt

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

+ 24 - 0
Source/QtDialog/CMakeSetupDialog.cxx

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

+ 8 - 0
Source/QtDialog/CMakeSetupDialog.h

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