Krita Source Code Documentation
Loading...
Searching...
No Matches
KisIdleTasksManager.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2023 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6#ifndef KISIDLETASKSMANAGER_H
7#define KISIDLETASKSMANAGER_H
8
9#include "kritaui_export.h"
11#include <QPointer>
12
13
46class KRITAUI_EXPORT KisIdleTasksManager : public QObject
47{
48 Q_OBJECT
49
50public:
56 struct TaskGuard {
58 TaskGuard(int _taskId,
60 : taskId(_taskId)
61 , manager(_manager)
62 {}
63
64 TaskGuard(const TaskGuard &rhs) = delete;
65 TaskGuard& operator=(const TaskGuard &rhs) = delete;
66
68 std::swap(taskId, rhs.taskId);
69 std::swap(manager, rhs.manager);
70 };
71
73 std::swap(taskId, rhs.taskId);
74 std::swap(manager, rhs.manager);
75 return *this;
76 }
77
79 if (manager) {
80 manager->removeIdleTask(taskId);
81 }
82 }
83
87 bool isValid() const {
88 return manager;
89 }
90
96 void trigger() {
98 manager->triggerIdleTask(taskId);
99 }
100
101 int taskId = -1;
103 };
104
105public:
108
109 void setImage(KisImageSP image);
110
121 [[nodiscard]]
122 TaskGuard addIdleTaskWithGuard(KisIdleTaskStrokeStrategyFactory factory);
123
124private:
125 int addIdleTask(KisIdleTaskStrokeStrategyFactory factory);
126 void removeIdleTask(int id);
127 void triggerIdleTask(int id);
128
129private Q_SLOTS:
130 void slotImageIsModified();
131 void slotImageIsIdle();
132 void slotTaskIsCompleted();
133
134private:
135
136private:
137 struct Private;
138 QScopedPointer<Private> m_d;
139};
140
141#endif // KISIDLETASKSMANAGER_H
std::function< KisIdleTaskStrokeStrategy *(KisImageSP image)> KisIdleTaskStrokeStrategyFactory
QScopedPointer< Private > m_d
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
TaskGuard(int _taskId, QPointer< KisIdleTasksManager > _manager)
TaskGuard & operator=(const TaskGuard &rhs)=delete
TaskGuard(const TaskGuard &rhs)=delete
TaskGuard & operator=(TaskGuard &&rhs)
QPointer< KisIdleTasksManager > manager