digiKam
Loading...
Searching...
No Matches
dimgthreadedfilter.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2005-05-25
7 * Description : threaded image filter class.
8 *
9 * SPDX-FileCopyrightText: 2005-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
10 * SPDX-FileCopyrightText: 2007-2012 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
11 *
12 * SPDX-License-Identifier: GPL-2.0-or-later
13 *
14 * ============================================================ */
15
16#pragma once
17
18// Local includes
19
20#include "digikam_export.h"
21#include "dimg.h"
22#include "dynamicthread.h"
23#include "filteraction.h"
24
25class QObject;
26
27namespace Digikam
28{
29
30class DIGIKAM_EXPORT DImgThreadedFilter : public DynamicThread
31{
32 Q_OBJECT
33
34public:
35
42 explicit DImgThreadedFilter(QObject* const parent = nullptr, const QString& name = QString());
43
50 DImgThreadedFilter(DImg* const orgImage,
51 QObject* const parent,
52 const QString& name = QString());
53
54 ~DImgThreadedFilter() override;
55
61 void setupFilter(const DImg& orgImage);
62
66 void setupAndStartDirectly(const DImg& orgImage,
67 DImgThreadedFilter* const master,
68 int progressBegin = 0,
69 int progressEnd = 100);
70
71 void setOriginalImage(const DImg& orgImage);
72 void setFilterName(const QString& name);
73
75 {
76 return m_destImage;
77 };
78
79 const QString& filterName()
80 {
81 return m_name;
82 };
83
93 QList<int> multithreadedSteps(int stop, int start = 0) const;
94
98 virtual void startFilter();
99
103 virtual void cancelFilter();
104
108 virtual void startFilterDirectly();
109
114
115 virtual void readParameters(const FilterAction&) = 0;
116
120 virtual QString filterIdentifier() const = 0;
121
122 virtual QList<int> supportedVersions() const;
123
132 void setFilterVersion(int version);
133 int filterVersion() const;
134
146 virtual bool parametersSuccessfullyRead() const;
147 virtual QString readParametersError(const FilterAction& actionThatFailed) const;
148
149Q_SIGNALS:
150
154 void started();
155
159 void progress(int progress);
160
166 void finished(bool success);
167
168protected:
169
173 virtual void initFilter();
174
178 void run() override;
179
183 virtual void filterImage() = 0;
184
189 virtual void cleanupFilter() {};
190
194 void postProgress(int progress);
195
196protected:
197
216 const DImg& orgImage,
217 const DImg& destImage,
218 int progressBegin = 0,
219 int progressEnd = 100,
220 const QString& name = QString());
221
226 void initSlave(DImgThreadedFilter* const master,
227 int progressBegin = 0,
228 int progressEnd = 100);
229
233 void setSlave(DImgThreadedFilter* const slave);
234
239 virtual int modulateProgress(int progress);
240
241 void initMaster();
242 virtual void prepareDestImage();
243
247 template <class Filter>
248
250 {
251 public:
252
253 explicit DefaultFilterAction(FilterAction::Category category = FilterAction::ReproducibleFilter)
254 : FilterAction(Filter::FilterIdentifier(), Filter::CurrentVersion(), category)
255 {
256 setDisplayableName(Filter::DisplayableName());
257 }
258
259 explicit DefaultFilterAction(bool isReproducible)
260 : FilterAction(Filter::FilterIdentifier(), Filter::CurrentVersion(),
261 isReproducible ? FilterAction::ReproducibleFilter : FilterAction::ComplexFilter)
262 {
263 setDisplayableName(Filter::DisplayableName());
264 }
265
271 void supportOlderVersionIf(int version, bool condition)
272 {
273 if (condition && (version <= m_version))
274 {
275 m_version = version;
276 }
277 }
278
279 };
280
281protected:
282
283 int m_version = 1;
284
285 bool m_wasCancelled = false;
286
290 int m_progressBegin = 0;
291 int m_progressSpan = 0;
292 int m_progressCurrent = 0;
293
297 QString m_name;
298
303
308
312 DImgThreadedFilter* m_slave = nullptr;
313
317 DImgThreadedFilter* m_master = nullptr;
318};
319
320} // namespace Digikam
Definition dimgthreadedfilter.h:250
void supportOlderVersionIf(int version, bool condition)
Definition dimgthreadedfilter.h:271
DefaultFilterAction(bool isReproducible)
Definition dimgthreadedfilter.h:259
DefaultFilterAction(FilterAction::Category category=FilterAction::ReproducibleFilter)
Definition dimgthreadedfilter.h:253
Definition dimgthreadedfilter.h:31
virtual void filterImage()=0
virtual QString filterIdentifier() const =0
DImg getTargetImage()
Definition dimgthreadedfilter.h:74
virtual void cleanupFilter()
Definition dimgthreadedfilter.h:189
const QString & filterName()
Definition dimgthreadedfilter.h:79
DImg m_orgImage
Definition dimgthreadedfilter.h:302
virtual FilterAction filterAction()=0
void progress(int progress)
QString m_name
Definition dimgthreadedfilter.h:297
virtual void readParameters(const FilterAction &)=0
void finished(bool success)
DImg m_destImage
Definition dimgthreadedfilter.h:307
Definition dimg.h:52
Definition dynamicthread.h:33
Definition filteraction.h:33
Category
Definition filteraction.h:37
Definition importfilter.h:34
Definition datefolderview.cpp:34