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
8QT_BEGIN_NAMESPACE
9
10PieAnimation::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
19PieAnimation::~PieAnimation()
20{
21}
22
23ChartAnimation *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
40ChartAnimation *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
63ChartAnimation *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
87void PieAnimation::updateCurrentValue(const QVariant &)
88{
89 // nothing to do...
90}
91
92QT_END_NAMESPACE
93
94#include "moc_pieanimation_p.cpp"
95

source code of qtcharts/src/charts/animations/pieanimation.cpp