Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_busy_progress_indicator.cpp
Go to the documentation of this file.
1
/*
2
* SPDX-FileCopyrightText: 2015 Dmitry Kazakov <dimula73@gmail.com>
3
*
4
* SPDX-License-Identifier: GPL-2.0-or-later
5
*/
6
7
#include "
kis_busy_progress_indicator.h
"
8
9
#include <QTimer>
10
#include <QAtomicInt>
11
12
#include "
KoProgressProxy.h
"
13
14
15
struct
KisBusyProgressIndicator::Private
16
{
17
Private
(
KisBusyProgressIndicator
*_q)
18
:
timer
(new QTimer(_q))
19
{}
20
21
QTimer *
timer
{
nullptr
};
// owned by QObject hierarchy
22
int
numEmptyTicks
{0};
23
QAtomicInt
numUpdates
;
24
QAtomicInt
timerStarted
;
25
KoProgressProxy
*
progressProxy
{
nullptr
};
26
27
bool
isStarted
{
false
};
28
29
void
startProgressReport
()
30
{
31
if
(!
progressProxy
) {
32
return
;
33
}
34
isStarted
=
true
;
35
progressProxy
->
setRange
(0, 0);
36
}
37
38
void
stopProgressReport
()
39
{
40
if
(!
isStarted
|| !
progressProxy
) {
41
return
;
42
}
43
progressProxy
->
setRange
(0, 100);
44
progressProxy
->
setValue
(100);
45
isStarted
=
false
;
46
}
47
};
48
49
50
KisBusyProgressIndicator::KisBusyProgressIndicator
(
KoProgressProxy
*progressProxy)
51
: m_d(new
Private
(this))
52
{
53
connect
(
m_d
->timer, SIGNAL(timeout()), SLOT(
timerFinished
()));
54
connect
(
this
, SIGNAL(
sigStartTimer
()), SLOT(
slotStartTimer
()));
55
m_d
->timer->setInterval(200);
56
m_d
->progressProxy = progressProxy;
57
}
58
59
KisBusyProgressIndicator::~KisBusyProgressIndicator
()
60
{
61
m_d
->stopProgressReport();
62
}
63
64
void
KisBusyProgressIndicator::prepareDestroying
()
65
{
66
m_d
->progressProxy = 0;
67
}
68
69
void
KisBusyProgressIndicator::timerFinished
()
70
{
71
int
value
=
m_d
->numUpdates.fetchAndStoreOrdered(0);
72
73
if
(!
value
) {
74
m_d
->numEmptyTicks++;
75
76
if
(
m_d
->numEmptyTicks > 2) {
77
m_d
->timerStarted = 0;
78
m_d
->timer->stop();
79
m_d
->stopProgressReport();
80
}
81
}
else
{
82
m_d
->numEmptyTicks = 0;
83
}
84
}
85
86
void
KisBusyProgressIndicator::update
()
87
{
88
m_d
->numUpdates.ref();
89
90
if
(!
m_d
->timerStarted) {
91
Q_EMIT
sigStartTimer
();
92
}
93
}
94
95
void
KisBusyProgressIndicator::slotStartTimer
()
96
{
97
m_d
->timerStarted.ref();
98
m_d
->timer->start();
99
m_d
->startProgressReport();
100
}
value
float value(const T *src, size_t ch)
Definition
JPEGXLImport.cpp:93
KoProgressProxy.h
connect
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KisBusyProgressIndicator
Definition
kis_busy_progress_indicator.h:16
KisBusyProgressIndicator::update
void update()
Definition
kis_busy_progress_indicator.cpp:86
KisBusyProgressIndicator::prepareDestroying
void prepareDestroying()
Definition
kis_busy_progress_indicator.cpp:64
KisBusyProgressIndicator::KisBusyProgressIndicator
KisBusyProgressIndicator(KoProgressProxy *progressProxy)
Definition
kis_busy_progress_indicator.cpp:50
KisBusyProgressIndicator::sigStartTimer
void sigStartTimer()
KisBusyProgressIndicator::timerFinished
void timerFinished()
Definition
kis_busy_progress_indicator.cpp:69
KisBusyProgressIndicator::slotStartTimer
void slotStartTimer()
Definition
kis_busy_progress_indicator.cpp:95
KisBusyProgressIndicator::~KisBusyProgressIndicator
~KisBusyProgressIndicator() override
Definition
kis_busy_progress_indicator.cpp:59
KisBusyProgressIndicator::m_d
const QScopedPointer< Private > m_d
Definition
kis_busy_progress_indicator.h:48
KoProgressProxy
Definition
KoProgressProxy.h:20
KoProgressProxy::setValue
virtual void setValue(int value)=0
KoProgressProxy::setRange
virtual void setRange(int minimum, int maximum)=0
kis_busy_progress_indicator.h
Private
Definition
SvgTransformParser.cpp:20
KisBusyProgressIndicator::Private
Definition
kis_busy_progress_indicator.cpp:16
KisBusyProgressIndicator::Private::isStarted
bool isStarted
Definition
kis_busy_progress_indicator.cpp:27
KisBusyProgressIndicator::Private::progressProxy
KoProgressProxy * progressProxy
Definition
kis_busy_progress_indicator.cpp:25
KisBusyProgressIndicator::Private::numEmptyTicks
int numEmptyTicks
Definition
kis_busy_progress_indicator.cpp:22
KisBusyProgressIndicator::Private::Private
Private(KisBusyProgressIndicator *_q)
Definition
kis_busy_progress_indicator.cpp:17
KisBusyProgressIndicator::Private::stopProgressReport
void stopProgressReport()
Definition
kis_busy_progress_indicator.cpp:38
KisBusyProgressIndicator::Private::numUpdates
QAtomicInt numUpdates
Definition
kis_busy_progress_indicator.cpp:23
KisBusyProgressIndicator::Private::timer
QTimer * timer
Definition
kis_busy_progress_indicator.cpp:21
KisBusyProgressIndicator::Private::timerStarted
QAtomicInt timerStarted
Definition
kis_busy_progress_indicator.cpp:24
KisBusyProgressIndicator::Private::startProgressReport
void startProgressReport()
Definition
kis_busy_progress_indicator.cpp:29
libs
image
kis_busy_progress_indicator.cpp
Generated at
2025-11-04 02:30:02+01:00
from
Krita
branch
master
, commit
c9dde2e79561a8aea4a7e8d9ac99c98a7bac9e52