feat: add canAbort() status change in Task

By now, it's a recurring pattern of wanting to restrict aborting in
certain situations. This avoids further code duplication, and adds a
signal that external users can hook up to to respond to such change.

Signed-off-by: flow <flowlnlnln@gmail.com>
This commit is contained in:
flow 2022-07-31 17:56:51 -03:00
parent 6541570969
commit 6a50fa35ec
No known key found for this signature in database
GPG Key ID: 8D0F221F0A59F469

View File

@ -68,7 +68,7 @@ class Task : public QObject, public QRunnable {
virtual QStringList warnings() const; virtual QStringList warnings() const;
virtual bool canAbort() const { return false; } virtual bool canAbort() const { return m_can_abort; }
auto getState() const -> State { return m_state; } auto getState() const -> State { return m_state; }
@ -96,6 +96,10 @@ class Task : public QObject, public QRunnable {
void status(QString status); void status(QString status);
void stepStatus(QString status); void stepStatus(QString status);
/** Emitted when the canAbort() status has changed.
*/
void abortStatusChanged(bool can_abort);
public slots: public slots:
// QRunnable's interface // QRunnable's interface
void run() override { start(); } void run() override { start(); }
@ -103,6 +107,8 @@ class Task : public QObject, public QRunnable {
virtual void start(); virtual void start();
virtual bool abort() { if(canAbort()) emitAborted(); return canAbort(); }; virtual bool abort() { if(canAbort()) emitAborted(); return canAbort(); };
void setAbortStatus(bool can_abort) { m_can_abort = can_abort; emit abortStatusChanged(can_abort); }
protected: protected:
virtual void executeTask() = 0; virtual void executeTask() = 0;
@ -125,4 +131,8 @@ class Task : public QObject, public QRunnable {
// TODO: Nuke in favor of QLoggingCategory // TODO: Nuke in favor of QLoggingCategory
bool m_show_debug = true; bool m_show_debug = true;
private:
// Change using setAbortStatus
bool m_can_abort = false;
}; };