##// END OF EJS Templates
Added support for data from model to QBarSeries. Various fixes and small modifications to data from model support to other series
Added support for data from model to QBarSeries. Various fixes and small modifications to data from model support to other series

File last commit:

r629:54034d98d5c4
r630:dd8db9a3a988
Show More
pieanimation.cpp
89 lines | 2.5 KiB | text/x-c | CppLexer
#include "pieanimation_p.h"
#include "piesliceanimation_p.h"
#include "piechartitem_p.h"
#include <QParallelAnimationGroup>
#include <QTimer>
QTCOMMERCIALCHART_BEGIN_NAMESPACE
PieAnimation::PieAnimation(PieChartItem *item)
:ChartAnimation(item),
m_item(item)
{
}
PieAnimation::~PieAnimation()
{
}
void PieAnimation::updateValues(const PieLayout &newValues)
{
foreach (QPieSlice* s, newValues.keys())
updateValue(s, newValues.value(s));
}
void PieAnimation::updateValue(QPieSlice *slice, const PieSliceLayout &endLayout)
{
PieSliceAnimation *animation = m_animations.value(slice);
Q_ASSERT(animation);
animation->stop();
animation->updateValue(endLayout);
animation->setDuration(1000);
animation->setEasingCurve(QEasingCurve::OutQuart);
QTimer::singleShot(0, animation, SLOT(start()));
}
void PieAnimation::addSlice(QPieSlice *slice, const PieSliceLayout &endLayout)
{
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);
startLayout.m_angleSpan = 0;
animation->setValue(startLayout, endLayout);
animation->setDuration(1000);
animation->setEasingCurve(QEasingCurve::OutQuart);
QTimer::singleShot(0, animation, SLOT(start()));
}
void PieAnimation::removeSlice(QPieSlice *slice)
{
PieSliceAnimation *animation = m_animations.value(slice);
Q_ASSERT(animation);
animation->stop();
PieSliceLayout endLayout = animation->currentSliceValue();
endLayout.m_radius = 0;
// TODO: find the actual angle where this slice disappears
endLayout.m_startAngle = endLayout.m_startAngle + endLayout.m_angleSpan;
endLayout.m_angleSpan = 0;
animation->updateValue(endLayout);
animation->setDuration(1000);
animation->setEasingCurve(QEasingCurve::OutQuart);
connect(animation, SIGNAL(finished()), this, SLOT(destroySliceAnimationComplete()));
QTimer::singleShot(0, animation, SLOT(start()));
}
void PieAnimation::updateCurrentValue(const QVariant &)
{
// nothing to do...
}
void PieAnimation::destroySliceAnimationComplete()
{
PieSliceAnimation *animation = static_cast<PieSliceAnimation*>(sender());
QPieSlice *slice = m_animations.key(animation);
m_item->destroySlice(slice);
delete m_animations.take(slice);
}
#include "moc_pieanimation_p.cpp"
QTCOMMERCIALCHART_END_NAMESPACE