From ef065b8807722b6ee15551fcaad9058759eee8de Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 25 Jan 2023 17:56:18 +0100 Subject: [PATCH] TaskProgress: Add setAutoStopOnCancel() property By default it's true. When turned off task progress just emits canceled() signal and leaves the further handling to the user. Change-Id: Ice4456ac5ead5ca45712d1eb2c988302b273760c Reviewed-by: Eike Ziller --- .../coreplugin/progressmanager/processprogress.cpp | 2 +- .../coreplugin/progressmanager/taskprogress.cpp | 10 +++++++++- src/plugins/coreplugin/progressmanager/taskprogress.h | 6 ++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/plugins/coreplugin/progressmanager/processprogress.cpp b/src/plugins/coreplugin/progressmanager/processprogress.cpp index f52204197e3..9a545561a78 100644 --- a/src/plugins/coreplugin/progressmanager/processprogress.cpp +++ b/src/plugins/coreplugin/progressmanager/processprogress.cpp @@ -82,7 +82,7 @@ ProcessProgress::ProcessProgress(QtcProcess *process) , d(new ProcessProgressPrivate(this, process)) { connect(&d->m_watcher, &QFutureWatcher::canceled, this, [this] { - d->m_process->stop(); // TODO: should we have different cancel policies? + d->m_process->stop(); // TODO: See TaskProgress::setAutoStopOnCancel }); connect(d->m_process, &QtcProcess::starting, this, [this] { d->m_futureInterface = QFutureInterface(); diff --git a/src/plugins/coreplugin/progressmanager/taskprogress.cpp b/src/plugins/coreplugin/progressmanager/taskprogress.cpp index 044b4ddf190..3c36cae6a87 100644 --- a/src/plugins/coreplugin/progressmanager/taskprogress.cpp +++ b/src/plugins/coreplugin/progressmanager/taskprogress.cpp @@ -39,6 +39,7 @@ public: QFutureWatcher m_watcher; QFutureInterface m_futureInterface; QPointer m_futureProgress; + bool m_isAutoStopOnCancel = true; int m_halfLifeTimePerTask = 1000; // 1000 ms QString m_displayName; FutureProgress::KeepOnFinishType m_keep = FutureProgress::HideOnFinish; @@ -99,7 +100,9 @@ TaskProgress::TaskProgress(TaskTree *taskTree) , d(new TaskProgressPrivate(this, taskTree)) { connect(&d->m_watcher, &QFutureWatcher::canceled, this, [this] { - d->m_taskTree->stop(); // TODO: should we have different cancel policies? + emit canceled(); + if (d->m_isAutoStopOnCancel) + d->m_taskTree->stop(); }); connect(d->m_taskTree, &TaskTree::started, this, [this] { d->m_futureInterface = QFutureInterface(); @@ -133,6 +136,11 @@ TaskProgress::TaskProgress(TaskTree *taskTree) TaskProgress::~TaskProgress() = default; +void TaskProgress::setAutoStopOnCancel(bool enable) +{ + d->m_isAutoStopOnCancel = enable; +} + void TaskProgress::setHalfLifeTimePerTask(int msecs) { d->m_halfLifeTimePerTask = msecs; diff --git a/src/plugins/coreplugin/progressmanager/taskprogress.h b/src/plugins/coreplugin/progressmanager/taskprogress.h index c1fa41cbd06..04eb6739740 100644 --- a/src/plugins/coreplugin/progressmanager/taskprogress.h +++ b/src/plugins/coreplugin/progressmanager/taskprogress.h @@ -17,16 +17,22 @@ class TaskProgressPrivate; class CORE_EXPORT TaskProgress : public QObject { + Q_OBJECT + public: TaskProgress(Utils::TaskTree *taskTree); // Makes TaskProgress a child of task tree ~TaskProgress() override; + void setAutoStopOnCancel(bool enable); // Default is true void setHalfLifeTimePerTask(int msecs); // Default is 1000 ms void setDisplayName(const QString &name); void setKeepOnFinish(FutureProgress::KeepOnFinishType keepType); void setSubtitleVisibleInStatusBar(bool visible); void setSubtitle(const QString &subtitle); +signals: + void canceled(); + private: std::unique_ptr d; };