diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2023-04-06 17:59:27 +0200 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2023-04-17 09:10:33 +0000 |
commit | 7ab0fd56aea0ee43fc0ad36205b0b6f6823605c3 (patch) | |
tree | b0eccb90087e69a3c1119c0639da34c4976c7180 /src | |
parent | 2abe6bbe2c0d0707a533f826e903fa7a523fdce9 (diff) |
RunExtensions: Move onResultReady and onFinished into asynctask.h
Change-Id: I96dbf5b0253251224ae678172cd5fca12b34326a
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'src')
20 files changed, 77 insertions, 92 deletions
diff --git a/src/libs/qmljs/qmljsplugindumper.cpp b/src/libs/qmljs/qmljsplugindumper.cpp index 20736803d27..9e2261014f0 100644 --- a/src/libs/qmljs/qmljsplugindumper.cpp +++ b/src/libs/qmljs/qmljsplugindumper.cpp @@ -14,7 +14,6 @@ #include <utils/fileutils.h> #include <utils/hostosinfo.h> #include <utils/qtcprocess.h> -#include <utils/runextensions.h> #include <QDir> #include <QDirIterator> diff --git a/src/libs/utils/asynctask.h b/src/libs/utils/asynctask.h index a600a14b247..d7c51a66fae 100644 --- a/src/libs/utils/asynctask.h +++ b/src/libs/utils/asynctask.h @@ -45,6 +45,76 @@ auto asyncRun(Function &&function, Args &&...args) std::forward<Function>(function), std::forward<Args>(args)...); } +/*! + Adds a handler for when a result is ready. + This creates a new QFutureWatcher. Do not use if you intend to react on multiple conditions + or create a QFutureWatcher already for other reasons. +*/ +template <typename R, typename T> +const QFuture<T> &onResultReady(const QFuture<T> &future, R *receiver, void(R::*member)(const T &)) +{ + auto watcher = new QFutureWatcher<T>(); + QObject::connect(watcher, &QFutureWatcherBase::finished, watcher, &QObject::deleteLater); + QObject::connect(watcher, &QFutureWatcherBase::resultReadyAt, receiver, [=](int index) { + (receiver->*member)(watcher->future().resultAt(index)); + }); + watcher->setFuture(future); + return future; +} + +/*! + Adds a handler for when a result is ready. The guard object determines the lifetime of + the connection. + This creates a new QFutureWatcher. Do not use if you intend to react on multiple conditions + or create a QFutureWatcher already for other reasons. +*/ +template <typename T, typename Function> +const QFuture<T> &onResultReady(const QFuture<T> &future, QObject *guard, Function f) +{ + auto watcher = new QFutureWatcher<T>(); + QObject::connect(watcher, &QFutureWatcherBase::finished, watcher, &QObject::deleteLater); + QObject::connect(watcher, &QFutureWatcherBase::resultReadyAt, guard, [f, watcher](int index) { + f(watcher->future().resultAt(index)); + }); + watcher->setFuture(future); + return future; +} + +/*! + Adds a handler for when the future is finished. + This creates a new QFutureWatcher. Do not use if you intend to react on multiple conditions + or create a QFutureWatcher already for other reasons. +*/ +template<typename R, typename T> +const QFuture<T> &onFinished(const QFuture<T> &future, + R *receiver, void (R::*member)(const QFuture<T> &)) +{ + auto watcher = new QFutureWatcher<T>(); + QObject::connect(watcher, &QFutureWatcherBase::finished, watcher, &QObject::deleteLater); + QObject::connect(watcher, &QFutureWatcherBase::finished, receiver, + [=] { (receiver->*member)(watcher->future()); }); + watcher->setFuture(future); + return future; +} + +/*! + Adds a handler for when the future is finished. The guard object determines the lifetime of + the connection. + This creates a new QFutureWatcher. Do not use if you intend to react on multiple conditions + or create a QFutureWatcher already for other reasons. +*/ +template<typename T, typename Function> +const QFuture<T> &onFinished(const QFuture<T> &future, QObject *guard, Function f) +{ + auto watcher = new QFutureWatcher<T>(); + QObject::connect(watcher, &QFutureWatcherBase::finished, watcher, &QObject::deleteLater); + QObject::connect(watcher, &QFutureWatcherBase::finished, guard, [f, watcher] { + f(watcher->future()); + }); + watcher->setFuture(future); + return future; +} + class QTCREATOR_UTILS_EXPORT AsyncTaskBase : public QObject { Q_OBJECT diff --git a/src/libs/utils/runextensions.h b/src/libs/utils/runextensions.h index 3e0b7afb952..6505b12a9cf 100644 --- a/src/libs/utils/runextensions.h +++ b/src/libs/utils/runextensions.h @@ -476,79 +476,4 @@ runAsync(QThreadPool *pool, Function &&function, Args&&... args) std::forward<Args>(args)...); } - -/*! - Adds a handler for when a result is ready. - This creates a new QFutureWatcher. Do not use if you intend to react on multiple conditions - or create a QFutureWatcher already for other reasons. -*/ -template <typename R, typename T> -const QFuture<T> &onResultReady(const QFuture<T> &future, R *receiver, void(R::*member)(const T &)) -{ - auto watcher = new QFutureWatcher<T>(); - QObject::connect(watcher, &QFutureWatcherBase::finished, watcher, &QObject::deleteLater); - QObject::connect(watcher, &QFutureWatcherBase::resultReadyAt, receiver, - [receiver, member, watcher](int index) { - (receiver->*member)(watcher->future().resultAt(index)); - }); - watcher->setFuture(future); - return future; -} - -/*! - Adds a handler for when a result is ready. The guard object determines the lifetime of - the connection. - This creates a new QFutureWatcher. Do not use if you intend to react on multiple conditions - or create a QFutureWatcher already for other reasons. -*/ -template <typename T, typename Function> -const QFuture<T> &onResultReady(const QFuture<T> &future, QObject *guard, Function f) -{ - auto watcher = new QFutureWatcher<T>(); - QObject::connect(watcher, &QFutureWatcherBase::finished, watcher, &QObject::deleteLater); - QObject::connect(watcher, &QFutureWatcherBase::resultReadyAt, guard, [f, watcher](int index) { - f(watcher->future().resultAt(index)); - }); - watcher->setFuture(future); - return future; -} - -/*! - Adds a handler for when the future is finished. - This creates a new QFutureWatcher. Do not use if you intend to react on multiple conditions - or create a QFutureWatcher already for other reasons. -*/ -template<typename R, typename T> -const QFuture<T> &onFinished(const QFuture<T> &future, - R *receiver, - void (R::*member)(const QFuture<T> &)) -{ - auto watcher = new QFutureWatcher<T>(); - QObject::connect(watcher, &QFutureWatcherBase::finished, watcher, &QObject::deleteLater); - QObject::connect(watcher, - &QFutureWatcherBase::finished, - receiver, - [receiver, member, watcher] { (receiver->*member)(watcher->future()); }); - watcher->setFuture(future); - return future; -} - -/*! - Adds a handler for when the future is finished. The guard object determines the lifetime of - the connection. - This creates a new QFutureWatcher. Do not use if you intend to react on multiple conditions - or create a QFutureWatcher already for other reasons. -*/ -template<typename T, typename Function> -const QFuture<T> &onFinished(const QFuture<T> &future, QObject *guard, Function f) -{ - auto watcher = new QFutureWatcher<T>(); - QObject::connect(watcher, &QFutureWatcherBase::finished, watcher, &QObject::deleteLater); - QObject::connect(watcher, &QFutureWatcherBase::finished, guard, [f, watcher] { - f(watcher->future()); - }); - watcher->setFuture(future); - return future; -} - } // namespace Utils diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp index 3ec9457ee37..c27965a9508 100644 --- a/src/plugins/android/androidrunnerworker.cpp +++ b/src/plugins/android/androidrunnerworker.cpp @@ -24,7 +24,6 @@ #include <utils/fileutils.h> #include <utils/hostosinfo.h> #include <utils/qtcprocess.h> -#include <utils/runextensions.h> #include <utils/stringutils.h> #include <utils/temporaryfile.h> #include <utils/url.h> diff --git a/src/plugins/android/androidsdkmanagerwidget.cpp b/src/plugins/android/androidsdkmanagerwidget.cpp index 56f32833c86..81098b776aa 100644 --- a/src/plugins/android/androidsdkmanagerwidget.cpp +++ b/src/plugins/android/androidsdkmanagerwidget.cpp @@ -9,10 +9,10 @@ #include <app/app_version.h> +#include <utils/asynctask.h> #include <utils/layoutbuilder.h> #include <utils/outputformatter.h> #include <utils/qtcassert.h> -#include <utils/runextensions.h> #include <utils/utilsicons.h> #include <QAbstractButton> diff --git a/src/plugins/cmakeprojectmanager/fileapireader.cpp b/src/plugins/cmakeprojectmanager/fileapireader.cpp index 6167ad84278..2d8d4c5345c 100644 --- a/src/plugins/cmakeprojectmanager/fileapireader.cpp +++ b/src/plugins/cmakeprojectmanager/fileapireader.cpp @@ -16,7 +16,6 @@ #include <utils/algorithm.h> #include <utils/asynctask.h> #include <utils/qtcassert.h> -#include <utils/runextensions.h> #include <QLoggingCategory> diff --git a/src/plugins/coreplugin/locator/locatorwidget.cpp b/src/plugins/coreplugin/locator/locatorwidget.cpp index ba717ea0f98..7bb381ac01b 100644 --- a/src/plugins/coreplugin/locator/locatorwidget.cpp +++ b/src/plugins/coreplugin/locator/locatorwidget.cpp @@ -14,6 +14,7 @@ #include "../modemanager.h" #include <utils/algorithm.h> +#include <utils/asynctask.h> #include <utils/appmainwindow.h> #include <utils/fancylineedit.h> #include <utils/fsengine/fileiconprovider.h> diff --git a/src/plugins/coreplugin/plugininstallwizard.cpp b/src/plugins/coreplugin/plugininstallwizard.cpp index 3587d211068..02f0e15eb28 100644 --- a/src/plugins/coreplugin/plugininstallwizard.cpp +++ b/src/plugins/coreplugin/plugininstallwizard.cpp @@ -18,7 +18,6 @@ #include <utils/pathchooser.h> #include <utils/qtcassert.h> #include <utils/qtcprocess.h> -#include <utils/runextensions.h> #include <utils/temporarydirectory.h> #include <utils/wizard.h> #include <utils/wizardpage.h> diff --git a/src/plugins/coreplugin/progressmanager/progressmanager.cpp b/src/plugins/coreplugin/progressmanager/progressmanager.cpp index 18cc2f6f34f..969579aafd3 100644 --- a/src/plugins/coreplugin/progressmanager/progressmanager.cpp +++ b/src/plugins/coreplugin/progressmanager/progressmanager.cpp @@ -109,7 +109,7 @@ namespace Core { start a task concurrently in a different thread. QtConcurrent has several different functions to run e.g. a class function in a different thread. Qt Creator itself - adds a few more in \c{src/libs/qtconcurrent/runextensions.h}. + adds a few more in \c{src/libs/utils/asynctask.h}. The QtConcurrent functions to run a concurrent task return a \c QFuture object. This is what you want to give the ProgressManager in the addTask() function. diff --git a/src/plugins/git/gitgrep.cpp b/src/plugins/git/gitgrep.cpp index 9d4aeec6980..7d5dc7fa749 100644 --- a/src/plugins/git/gitgrep.cpp +++ b/src/plugins/git/gitgrep.cpp @@ -19,7 +19,6 @@ #include <utils/filesearch.h> #include <utils/qtcassert.h> #include <utils/qtcprocess.h> -#include <utils/runextensions.h> #include <QCheckBox> #include <QFuture> diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 9729dbe4240..935fa5deb79 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -42,12 +42,12 @@ #include <texteditor/textmark.h> #include <utils/algorithm.h> +#include <utils/asynctask.h> #include <utils/commandline.h> #include <utils/infobar.h> #include <utils/parameteraction.h> #include <utils/pathchooser.h> #include <utils/qtcassert.h> -#include <utils/runextensions.h> #include <utils/stringutils.h> #include <utils/utilsicons.h> diff --git a/src/plugins/haskell/haskellproject.cpp b/src/plugins/haskell/haskellproject.cpp index 916632c5dc6..f19840a67f5 100644 --- a/src/plugins/haskell/haskellproject.cpp +++ b/src/plugins/haskell/haskellproject.cpp @@ -14,7 +14,6 @@ #include <utils/algorithm.h> #include <utils/fileutils.h> #include <utils/qtcassert.h> -#include <utils/runextensions.h> #include <QFile> #include <QTextStream> diff --git a/src/plugins/help/helpmanager.cpp b/src/plugins/help/helpmanager.cpp index 69fe0dabf9e..f62aa65f352 100644 --- a/src/plugins/help/helpmanager.cpp +++ b/src/plugins/help/helpmanager.cpp @@ -12,7 +12,6 @@ #include <utils/asynctask.h> #include <utils/filesystemwatcher.h> #include <utils/qtcassert.h> -#include <utils/runextensions.h> #include <QDateTime> #include <QDebug> diff --git a/src/plugins/ios/createsimulatordialog.cpp b/src/plugins/ios/createsimulatordialog.cpp index 5dce52221eb..3eb4c2cc40d 100644 --- a/src/plugins/ios/createsimulatordialog.cpp +++ b/src/plugins/ios/createsimulatordialog.cpp @@ -7,8 +7,8 @@ #include "simulatorcontrol.h" #include <utils/algorithm.h> +#include <utils/asynctask.h> #include <utils/layoutbuilder.h> -#include <utils/runextensions.h> #include <QApplication> #include <QComboBox> diff --git a/src/plugins/ios/iossettingswidget.cpp b/src/plugins/ios/iossettingswidget.cpp index eee8b08efc8..2d13c4952ab 100644 --- a/src/plugins/ios/iossettingswidget.cpp +++ b/src/plugins/ios/iossettingswidget.cpp @@ -12,9 +12,9 @@ #include "simulatoroperationdialog.h" #include <utils/algorithm.h> +#include <utils/asynctask.h> #include <utils/layoutbuilder.h> #include <utils/pathchooser.h> -#include <utils/runextensions.h> #include <QCheckBox> #include <QDateTime> diff --git a/src/plugins/ios/iostoolhandler.cpp b/src/plugins/ios/iostoolhandler.cpp index 5db9b808a88..08e937d5ccf 100644 --- a/src/plugins/ios/iostoolhandler.cpp +++ b/src/plugins/ios/iostoolhandler.cpp @@ -17,7 +17,6 @@ #include <utils/futuresynchronizer.h> #include <utils/qtcassert.h> #include <utils/qtcprocess.h> -#include <utils/runextensions.h> #include <utils/temporarydirectory.h> #include <QDir> diff --git a/src/plugins/ios/simulatorcontrol.cpp b/src/plugins/ios/simulatorcontrol.cpp index 59970b649c1..fe015b18815 100644 --- a/src/plugins/ios/simulatorcontrol.cpp +++ b/src/plugins/ios/simulatorcontrol.cpp @@ -8,7 +8,6 @@ #include <utils/asynctask.h> #include <utils/qtcassert.h> #include <utils/qtcprocess.h> -#include <utils/runextensions.h> #ifdef Q_OS_MAC #include <CoreFoundation/CoreFoundation.h> diff --git a/src/plugins/ios/simulatorinfomodel.cpp b/src/plugins/ios/simulatorinfomodel.cpp index 8c79d161da9..4db3994f4b9 100644 --- a/src/plugins/ios/simulatorinfomodel.cpp +++ b/src/plugins/ios/simulatorinfomodel.cpp @@ -6,7 +6,7 @@ #include "iostr.h" #include <utils/algorithm.h> -#include <utils/runextensions.h> +#include <utils/asynctask.h> #include <QTimer> diff --git a/src/plugins/mesonprojectmanager/mesonprojectparser.cpp b/src/plugins/mesonprojectmanager/mesonprojectparser.cpp index 96b5fa9cb7b..6f8ce162ed7 100644 --- a/src/plugins/mesonprojectmanager/mesonprojectparser.cpp +++ b/src/plugins/mesonprojectmanager/mesonprojectparser.cpp @@ -14,7 +14,6 @@ #include <utils/asynctask.h> #include <utils/fileinprojectfinder.h> -#include <utils/runextensions.h> #include <QStringList> #include <QTextStream> diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index c12827b6b43..da68b010d58 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -50,7 +50,6 @@ #include <utils/algorithm.h> #include <utils/asynctask.h> #include <utils/qtcprocess.h> -#include <utils/runextensions.h> #include <QDebug> #include <QDir> |