diff --git a/src/animations/chartanimator.cpp b/src/animations/chartanimator.cpp index d342065..e377927 100644 --- a/src/animations/chartanimator.cpp +++ b/src/animations/chartanimator.cpp @@ -224,11 +224,11 @@ void ChartAnimator::updateLayout(XYChartItem* item, QVector& oldPoints QTimer::singleShot(0,animation,SLOT(start())); } -void ChartAnimator::addAnimation(PieChartItem* item, QPieSlice *slice, const PieSliceLayout &layout) +void ChartAnimator::addAnimation(PieChartItem* item, QPieSlice *slice, const PieSliceLayout &layout, bool isEmpty) { PieAnimation* animation = static_cast(m_animations.value(item)); Q_ASSERT(animation); - animation->addSlice(slice, layout); + animation->addSlice(slice, layout, isEmpty); } void ChartAnimator::removeAnimation(PieChartItem* item, QPieSlice *slice) diff --git a/src/animations/chartanimator_p.h b/src/animations/chartanimator_p.h index c478978..bf90269 100644 --- a/src/animations/chartanimator_p.h +++ b/src/animations/chartanimator_p.h @@ -35,7 +35,7 @@ public: void updateLayout(SplineChartItem* item, QVector& oldPoints , QVector& newPoints, QVector& oldControlPoints, QVector& newContorlPoints,int index); void applyLayout(AxisItem* item, QVector& layout); - void addAnimation(PieChartItem* item, QPieSlice *slice, const PieSliceLayout &layout); + void addAnimation(PieChartItem* item, QPieSlice *slice, const PieSliceLayout &layout, bool isEmpty); void removeAnimation(PieChartItem* item, QPieSlice *slice); void updateLayout(PieChartItem* item, const PieLayout &layout); void updateLayout(PieChartItem* item, QPieSlice *slice, const PieSliceLayout &layout); diff --git a/src/animations/pieanimation.cpp b/src/animations/pieanimation.cpp index fa04c43..a777598 100644 --- a/src/animations/pieanimation.cpp +++ b/src/animations/pieanimation.cpp @@ -35,14 +35,17 @@ void PieAnimation::updateValue(QPieSlice *slice, const PieSliceLayout &endLayout QTimer::singleShot(0, animation, SLOT(start())); } -void PieAnimation::addSlice(QPieSlice *slice, const PieSliceLayout &endLayout) +void PieAnimation::addSlice(QPieSlice *slice, const PieSliceLayout &endLayout, bool isEmpty) { PieSliceAnimation *animation = new PieSliceAnimation(m_item, slice); m_animations.insert(slice, animation); PieSliceLayout startLayout = endLayout; startLayout.m_radius = 0; - startLayout.m_startAngle = endLayout.m_startAngle + (endLayout.m_angleSpan/2); + if (isEmpty) + startLayout.m_startAngle = 0; + else + startLayout.m_startAngle = endLayout.m_startAngle + (endLayout.m_angleSpan/2); startLayout.m_angleSpan = 0; animation->setValue(startLayout, endLayout); diff --git a/src/animations/pieanimation_p.h b/src/animations/pieanimation_p.h index 7277338..c88dc38 100644 --- a/src/animations/pieanimation_p.h +++ b/src/animations/pieanimation_p.h @@ -18,7 +18,7 @@ public: ~PieAnimation(); void updateValues(const PieLayout &newValues); void updateValue(QPieSlice *slice, const PieSliceLayout &newValue); - void addSlice(QPieSlice *slice, const PieSliceLayout &endLayout); + void addSlice(QPieSlice *slice, const PieSliceLayout &endLayout, bool isEmpty); void removeSlice(QPieSlice *slice); public: // from QVariantAnimation diff --git a/src/piechart/piechartitem.cpp b/src/piechart/piechartitem.cpp index 61cf050..d3c8448 100644 --- a/src/piechart/piechartitem.cpp +++ b/src/piechart/piechartitem.cpp @@ -47,6 +47,8 @@ void PieChartItem::initialize() void PieChartItem::handleSlicesAdded(QList slices) { + bool isEmpty = m_slices.isEmpty(); + foreach (QPieSlice *s, slices) { PieSlice* slice = new PieSlice(this); m_slices.insert(s, slice); @@ -58,7 +60,7 @@ void PieChartItem::handleSlicesAdded(QList slices) PieSliceLayout layout = calculateSliceLayout(s); if (m_animator) - m_animator->addAnimation(this, s, layout); + m_animator->addAnimation(this, s, layout, isEmpty); else setLayout(s, layout); }