About
Contact
QtCreator
KDevelop
Solarized
line #s on
1
// Copyright (C) 2016 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4
#include <private/pieanimation_p.h>
5
#include <private/piesliceanimation_p.h>
6
#include <private/piechartitem_p.h>
7
8
QT_BEGIN_NAMESPACE
9
10
PieAnimation
::
PieAnimation
(
PieChartItem
*
item
,
int
duration
,
QEasingCurve
&
curve
)
11
:
ChartAnimation
(
item
),
12
m_item
(
item
),
13
m_animationDuration
(
duration
),
14
m_animationCurve
(
curve
)
15
{
16
Q_UNUSED
(
m_item
);
17
}
18
19
PieAnimation
::
~PieAnimation
()
20
{
21
}
22
23
ChartAnimation
*
PieAnimation
::
updateValue
(
PieSliceItem
*
sliceItem
,
const
PieSliceData
&
sliceData
)
24
{
25
PieSliceAnimation
*
animation
=
m_animations
.
value
(
key:
sliceItem
);
26
if
(!
animation
) {
27
animation
=
new
PieSliceAnimation
(
sliceItem
);
28
animation
->
setDuration
(
m_animationDuration
);
29
animation
->
setEasingCurve
(
m_animationCurve
);
30
m_animations
.
insert
(
key:
sliceItem
,
value:
animation
);
31
}
else
{
32
animation
->
stop
();
33
}
34
35
animation
->
updateValue
(
endValue:
sliceData
);
36
37
return
animation
;
38
}
39
40
ChartAnimation
*
PieAnimation
::
addSlice
(
PieSliceItem
*
sliceItem
,
const
PieSliceData
&
sliceData
,
bool
startupAnimation
)
41
{
42
PieSliceAnimation
*
animation
=
new
PieSliceAnimation
(
sliceItem
);
43
animation
->
setDuration
(
m_animationDuration
);
44
animation
->
setEasingCurve
(
m_animationCurve
);
45
m_animations
.
insert
(
key:
sliceItem
,
value:
animation
);
46
47
PieSliceData
startValue
=
sliceData
;
48
startValue
.
m_radius
=
0
;
49
if
(
startupAnimation
)
50
startValue
.
m_startAngle
=
0
;
51
else
52
startValue
.
m_startAngle
=
sliceData
.
m_startAngle
+ (
sliceData
.
m_angleSpan
/
2
);
53
startValue
.
m_angleSpan
=
0
;
54
55
if
(
sliceData
.
m_holeRadius
>
0
)
56
startValue
.
m_radius
=
sliceData
.
m_holeRadius
;
57
58
animation
->
setValue
(
startValue
,
endValue:
sliceData
);
59
60
return
animation
;
61
}
62
63
ChartAnimation
*
PieAnimation
::
removeSlice
(
PieSliceItem
*
sliceItem
)
64
{
65
PieSliceAnimation
*
animation
=
m_animations
.
value
(
key:
sliceItem
);
66
Q_ASSERT
(
animation
);
67
animation
->
stop
();
68
69
PieSliceData
endValue
=
animation
->
currentSliceValue
();
70
if
(
endValue
.
m_holeRadius
>
0
)
71
endValue
.
m_radius
=
endValue
.
m_holeRadius
;
72
else
73
endValue
.
m_radius
=
0
;
74
endValue
.
m_startAngle
=
endValue
.
m_startAngle
+
endValue
.
m_angleSpan
;
75
endValue
.
m_angleSpan
=
0
;
76
endValue
.
m_isLabelVisible
=
false
;
77
78
animation
->
updateValue
(
endValue
);
79
80
// PieSliceItem is the parent of PieSliceAnimation so the animation will be deleted as well..
81
connect
(
sender:
animation
,
SIGNAL
(finished()),
receiver:
sliceItem
,
SLOT
(deleteLater()));
82
m_animations
.
remove
(
key:
sliceItem
);
83
84
return
animation
;
85
}
86
87
void
PieAnimation
::
updateCurrentValue
(
const
QVariant
&)
88
{
89
// nothing to do...
90
}
91
92
QT_END_NAMESPACE
93
94
#include
"moc_pieanimation_p.cpp"
95
Definitions
PieAnimation
~PieAnimation
updateValue
addSlice
removeSlice
Learn Advanced QML with KDAB
Find out more