##// END OF EJS Templates
Nicer animation for adding a pie initially.
Jani Honkonen -
r634:5a177f3a506b
parent child
Show More
@@ -224,11 +224,11 void ChartAnimator::updateLayout(XYChartItem* item, QVector<QPointF>& oldPoints
224 224 QTimer::singleShot(0,animation,SLOT(start()));
225 225 }
226 226
227 void ChartAnimator::addAnimation(PieChartItem* item, QPieSlice *slice, const PieSliceLayout &layout)
227 void ChartAnimator::addAnimation(PieChartItem* item, QPieSlice *slice, const PieSliceLayout &layout, bool isEmpty)
228 228 {
229 229 PieAnimation* animation = static_cast<PieAnimation*>(m_animations.value(item));
230 230 Q_ASSERT(animation);
231 animation->addSlice(slice, layout);
231 animation->addSlice(slice, layout, isEmpty);
232 232 }
233 233
234 234 void ChartAnimator::removeAnimation(PieChartItem* item, QPieSlice *slice)
@@ -35,7 +35,7 public:
35 35 void updateLayout(SplineChartItem* item, QVector<QPointF>& oldPoints , QVector<QPointF>& newPoints, QVector<QPointF>& oldControlPoints, QVector<QPointF>& newContorlPoints,int index);
36 36 void applyLayout(AxisItem* item, QVector<qreal>& layout);
37 37
38 void addAnimation(PieChartItem* item, QPieSlice *slice, const PieSliceLayout &layout);
38 void addAnimation(PieChartItem* item, QPieSlice *slice, const PieSliceLayout &layout, bool isEmpty);
39 39 void removeAnimation(PieChartItem* item, QPieSlice *slice);
40 40 void updateLayout(PieChartItem* item, const PieLayout &layout);
41 41 void updateLayout(PieChartItem* item, QPieSlice *slice, const PieSliceLayout &layout);
@@ -35,14 +35,17 void PieAnimation::updateValue(QPieSlice *slice, const PieSliceLayout &endLayout
35 35 QTimer::singleShot(0, animation, SLOT(start()));
36 36 }
37 37
38 void PieAnimation::addSlice(QPieSlice *slice, const PieSliceLayout &endLayout)
38 void PieAnimation::addSlice(QPieSlice *slice, const PieSliceLayout &endLayout, bool isEmpty)
39 39 {
40 40 PieSliceAnimation *animation = new PieSliceAnimation(m_item, slice);
41 41 m_animations.insert(slice, animation);
42 42
43 43 PieSliceLayout startLayout = endLayout;
44 44 startLayout.m_radius = 0;
45 startLayout.m_startAngle = endLayout.m_startAngle + (endLayout.m_angleSpan/2);
45 if (isEmpty)
46 startLayout.m_startAngle = 0;
47 else
48 startLayout.m_startAngle = endLayout.m_startAngle + (endLayout.m_angleSpan/2);
46 49 startLayout.m_angleSpan = 0;
47 50 animation->setValue(startLayout, endLayout);
48 51
@@ -18,7 +18,7 public:
18 18 ~PieAnimation();
19 19 void updateValues(const PieLayout &newValues);
20 20 void updateValue(QPieSlice *slice, const PieSliceLayout &newValue);
21 void addSlice(QPieSlice *slice, const PieSliceLayout &endLayout);
21 void addSlice(QPieSlice *slice, const PieSliceLayout &endLayout, bool isEmpty);
22 22 void removeSlice(QPieSlice *slice);
23 23
24 24 public: // from QVariantAnimation
@@ -47,6 +47,8 void PieChartItem::initialize()
47 47
48 48 void PieChartItem::handleSlicesAdded(QList<QPieSlice*> slices)
49 49 {
50 bool isEmpty = m_slices.isEmpty();
51
50 52 foreach (QPieSlice *s, slices) {
51 53 PieSlice* slice = new PieSlice(this);
52 54 m_slices.insert(s, slice);
@@ -58,7 +60,7 void PieChartItem::handleSlicesAdded(QList<QPieSlice*> slices)
58 60 PieSliceLayout layout = calculateSliceLayout(s);
59 61
60 62 if (m_animator)
61 m_animator->addAnimation(this, s, layout);
63 m_animator->addAnimation(this, s, layout, isEmpty);
62 64 else
63 65 setLayout(s, layout);
64 66 }
General Comments 0
You need to be logged in to leave comments. Login now