##// END OF EJS Templates
Added bar series draft to QML API
Added bar series draft to QML API

File last commit:

r720:605f266f80f8
r723:37842f579a1d
Show More
chartanimator.cpp
288 lines | 7.5 KiB | text/x-c | CppLexer
Michal Klocek
Animation refactor...
r530 #include "chartanimator_p.h"
#include "axisanimation_p.h"
#include "xyanimation_p.h"
Michal Klocek
Improves spline interpolation...
r622 #include "splineanimation_p.h"
Michal Klocek
Animation refactor...
r530 #include "xychartitem_p.h"
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 #include "pieanimation_p.h"
sauimone
Animation framework for barchart.
r671 #include "baranimation_p.h"
#include "barchartitem_p.h"
Michal Klocek
Adds area chart animations...
r560 #include "areachartitem_p.h"
Michal Klocek
Improves spline interpolation...
r622 #include "splinechartitem_p.h"
#include "scatterchartitem_p.h"
Michal Klocek
Animation refactor...
r530 #include <QTimer>
Q_DECLARE_METATYPE(QVector<QPointF>)
Q_DECLARE_METATYPE(QVector<qreal>)
sauimone
barchart animation mechanics working. still some todo
r681 Q_DECLARE_METATYPE(QVector<QRectF>)
Michal Klocek
Animation refactor...
r530
QTCOMMERCIALCHART_BEGIN_NAMESPACE
const static int duration = 1000;
Michal Klocek
Fixes missing intlization in chartanimator
r720 ChartAnimator::ChartAnimator(QObject *parent):QObject(parent),m_state(ShowState)
Michal Klocek
Animation refactor...
r530 {
}
ChartAnimator::~ChartAnimator()
{
}
Michal Klocek
Refactors chartitem...
r677 void ChartAnimator::addAnimation(Axis* item)
Michal Klocek
Animation refactor...
r530 {
Michal Klocek
Adds area chart animations...
r560 ChartAnimation* animation = m_animations.value(item);
Michal Klocek
Animation refactor...
r530
if(!animation) {
animation = new AxisAnimation(item);
m_animations.insert(item,animation);
}
item->setAnimator(this);
}
Michal Klocek
Improves spline interpolation...
r622 void ChartAnimator::addAnimation(SplineChartItem* item)
{
ChartAnimation* animation = m_animations.value(item);
if(!animation) {
animation = new SplineAnimation(item);
m_animations.insert(item,animation);
}
item->setAnimator(this);
}
void ChartAnimator::addAnimation(ScatterChartItem* item)
{
ChartAnimation* animation = m_animations.value(item);
if(!animation) {
animation = new XYAnimation(item);
m_animations.insert(item,animation);
}
item->setAnimator(this);
}
void ChartAnimator::addAnimation(LineChartItem* item)
Michal Klocek
Animation refactor...
r530 {
Michal Klocek
Adds area chart animations...
r560 ChartAnimation* animation = m_animations.value(item);
Michal Klocek
Animation refactor...
r530
if(!animation) {
animation = new XYAnimation(item);
m_animations.insert(item,animation);
}
item->setAnimator(this);
}
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 void ChartAnimator::addAnimation(PieChartItem* item)
{
ChartAnimation* animation = m_animations.value(item);
if(!animation) {
animation = new PieAnimation(item);
m_animations.insert(item,animation);
}
item->setAnimator(this);
}
sauimone
Animation framework for barchart.
r671 void ChartAnimator::addAnimation(BarChartItem* item)
{
ChartAnimation* animation = m_animations.value(item);
if(!animation) {
animation = new BarAnimation(item);
m_animations.insert(item,animation);
}
item->setAnimator(this);
}
Michal Klocek
Refactors chartitem...
r677 void ChartAnimator::removeAnimation(Chart* item)
Michal Klocek
Animation refactor...
r530 {
item->setAnimator(0);
m_animations.remove(item);
}
Michal Klocek
Refactors chartitem...
r677 void ChartAnimator::updateLayout(Axis* item , QVector<qreal>& newLayout)
Michal Klocek
Animation refactor...
r530 {
AxisAnimation* animation = static_cast<AxisAnimation*>(m_animations.value(item));
Michal Klocek
Adds area chart animations...
r560 Q_ASSERT(animation);
Michal Klocek
Animation refactor...
r530
QVector<qreal> oldLayout = item->layout();
if(newLayout.count()==0) return;
Michal Klocek
Adds scroll support...
r531 switch(m_state)
{
case ZoomOutState: {
QRectF rect = item->geometry();
oldLayout.resize(newLayout.count());
for(int i=0,j=oldLayout.count()-1;i<(oldLayout.count()+1)/2;i++,j--)
{
Michal Klocek
Refactors chartitem...
r677 oldLayout[i]= item->axisType()==Axis::X_AXIS?rect.left():rect.bottom();
oldLayout[j]= item->axisType()==Axis::X_AXIS?rect.right():rect.top();
Michal Klocek
Adds scroll support...
r531 }
}
break;
case ZoomInState: {
Michal Klocek
Refactors chartitem...
r677 int index = qMin(oldLayout.count()*(item->axisType()==Axis::X_AXIS?m_point.x():(1 -m_point.y())),newLayout.count()-1.0);
Michal Klocek
Adds scroll support...
r531 oldLayout.resize(newLayout.count());
for(int i=0;i<oldLayout.count();i++)
{
oldLayout[i]= oldLayout[index];
}
}
break;
case ScrollDownState:
case ScrollRightState: {
oldLayout.resize(newLayout.count());
for(int i=0, j=i+1;i<oldLayout.count()-1;i++,j++)
{
oldLayout[i]= oldLayout[j];
}
}
break;
case ScrollUpState:
case ScrollLeftState: {
oldLayout.resize(newLayout.count());
for(int i=oldLayout.count()-1, j=i-1;i>0;i--,j--)
{
oldLayout[i]= oldLayout[j];
}
}
break;
default: {
oldLayout.resize(newLayout.count());
QRectF rect = item->geometry();
for(int i=0, j=oldLayout.count()-1;i<oldLayout.count();i++,j--)
{
Michal Klocek
Refactors chartitem...
r677 oldLayout[i]= item->axisType()==Axis::X_AXIS?rect.left():rect.top();
Michal Klocek
Adds scroll support...
r531 }
}
break;
}
Michal Klocek
Animation refactor...
r530
if(animation->state()!=QAbstractAnimation::Stopped) {
animation->stop();
}
animation->setDuration(duration);
animation->setEasingCurve(QEasingCurve::OutQuart);
QVariantAnimation::KeyValues value;
animation->setKeyValues(value); //workaround for wrong interpolation call
animation->setKeyValueAt(0.0, qVariantFromValue(oldLayout));
animation->setKeyValueAt(1.0, qVariantFromValue(newLayout));
QTimer::singleShot(0,animation,SLOT(start()));
}
Michal Klocek
Improves spline interpolation...
r622 void ChartAnimator::updateLayout(SplineChartItem* item, QVector<QPointF>& oldPoints ,QVector<QPointF>& newPoints, QVector<QPointF>& oldControlPoints, QVector<QPointF>& newControlPoints,int index)
Michal Klocek
Animation refactor...
r530 {
Michal Klocek
Improves spline interpolation...
r622 SplineAnimation* animation = static_cast<SplineAnimation*>(m_animations.value(item));
Michal Klocek
Animation refactor...
r530
Michal Klocek
Adds area chart animations...
r560 Q_ASSERT(animation);
Michal Klocek
Animation refactor...
r530
Michal Klocek
Improves spline interpolation...
r622 if(newPoints.count()<2 || newControlPoints.count()<2) return;
Michal Klocek
Animation refactor...
r530
bool empty = oldPoints.count()==0;
Michal Klocek
Improves spline interpolation...
r622
Michal Klocek
Animation refactor...
r530
if(animation->state()!=QAbstractAnimation::Stopped) {
Michal Klocek
Improves spline interpolation...
r622 animation->stop();
Michal Klocek
Animation refactor...
r530 }
animation->setDuration(duration);
if(!empty)
Michal Klocek
Improves spline interpolation...
r622 animation->setAnimationType(ChartAnimation::MoveDownAnimation);
Michal Klocek
Animation refactor...
r530 else
Michal Klocek
Improves spline interpolation...
r622 animation->setAnimationType(ChartAnimation::LineDrawAnimation);
Michal Klocek
Animation refactor...
r530 animation->setEasingCurve(QEasingCurve::OutQuart);
Michal Klocek
Improves spline interpolation...
r622 animation->setValues(oldPoints,newPoints,oldControlPoints,newControlPoints,index);
Michal Klocek
Animation refactor...
r530 QTimer::singleShot(0,animation,SLOT(start()));
}
Michal Klocek
Improves spline interpolation...
r622
void ChartAnimator::updateLayout(XYChartItem* item, QVector<QPointF>& oldPoints , QVector<QPointF>& newPoints, int index)
Michal Klocek
Animation refactor...
r530 {
XYAnimation* animation = static_cast<XYAnimation*>(m_animations.value(item));
Michal Klocek
Adds area chart animations...
r560 Q_ASSERT(animation);
Michal Klocek
Animation refactor...
r530
Michal Klocek
Improves spline interpolation...
r622 if(newPoints.count()==0) return;
bool empty = oldPoints.count()==0;
if(animation->state()!=QAbstractAnimation::Stopped) {
animation->stop();
}
Michal Klocek
Animation refactor...
r530 animation->setDuration(duration);
Michal Klocek
Improves spline interpolation...
r622 if(!empty)
animation->setAnimationType(ChartAnimation::MoveDownAnimation);
else
animation->setAnimationType(ChartAnimation::LineDrawAnimation);
Michal Klocek
Animation refactor...
r530 animation->setEasingCurve(QEasingCurve::OutQuart);
Michal Klocek
Improves spline interpolation...
r622 animation->setValues(oldPoints,newPoints,index);
Michal Klocek
Animation refactor...
r530
QTimer::singleShot(0,animation,SLOT(start()));
}
Jani Honkonen
Rename PieSliceLayout -> PieSliceData. A "layout" is a bad name for this.
r668 void ChartAnimator::addAnimation(PieChartItem* item, QPieSlice *slice, const PieSliceData &sliceData, bool isEmpty)
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 {
PieAnimation* animation = static_cast<PieAnimation*>(m_animations.value(item));
Q_ASSERT(animation);
Jani Honkonen
Rename PieSliceLayout -> PieSliceData. A "layout" is a bad name for this.
r668 animation->addSlice(slice, sliceData, isEmpty);
Jani Honkonen
Refactoring pie series and animations.
r621 }
void ChartAnimator::removeAnimation(PieChartItem* item, QPieSlice *slice)
{
PieAnimation* animation = static_cast<PieAnimation*>(m_animations.value(item));
Q_ASSERT(animation);
animation->removeSlice(slice);
}
Jani Honkonen
Getting rid of slice pointer in PieSliceLayout.
r629 void ChartAnimator::updateLayout(PieChartItem* item, const PieLayout &layout)
Jani Honkonen
Refactoring pie series and animations.
r621 {
PieAnimation* animation = static_cast<PieAnimation*>(m_animations.value(item));
Q_ASSERT(animation);
animation->updateValues(layout);
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 }
Jani Honkonen
Rename PieSliceLayout -> PieSliceData. A "layout" is a bad name for this.
r668 void ChartAnimator::updateLayout(PieChartItem* item, QPieSlice *slice, const PieSliceData &sliceData)
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 {
PieAnimation* animation = static_cast<PieAnimation*>(m_animations.value(item));
Q_ASSERT(animation);
Jani Honkonen
Rename PieSliceLayout -> PieSliceData. A "layout" is a bad name for this.
r668 animation->updateValue(slice, sliceData);
Jani Honkonen
Add animations to pie. Works but has some visual issues when adding slices.
r618 }
sauimone
barchart animation mechanics working. still some todo
r681 void ChartAnimator::updateLayout(BarChartItem* item, const QVector<QRectF> &oldLayout, const QVector<QRectF> &newLayout)
sauimone
Animation framework for barchart.
r671 {
BarAnimation* animation = static_cast<BarAnimation*>(m_animations.value(item));
Q_ASSERT(animation);
sauimone
barchart animation mechanics working. still some todo
r681 animation->setDuration(duration);
animation->setKeyValueAt(0.0, qVariantFromValue(oldLayout));
animation->setKeyValueAt(1.0, qVariantFromValue(newLayout));
QTimer::singleShot(0,animation,SLOT(start()));
sauimone
Animation framework for barchart.
r671 }
Michal Klocek
Adds scroll support...
r531 void ChartAnimator::setState(State state,const QPointF& point)
{
m_state=state;
m_point=point;
}
Michal Klocek
Animation refactor...
r530 QTCOMMERCIALCHART_END_NAMESPACE