##// END OF EJS Templates
Add Polar chart support...
Add Polar chart support This commit also heavily refactors things as polar chart needs separate implementation of various classes that previously only needed one, such as ChartAxis and ChartLayout. Task-number: QTRD-1757 Change-Id: I3d3db23920314987ceef3ae92879960b833b7136 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>

File last commit:

r2483:f494279b6366
r2483:f494279b6366
Show More
axisanimation.cpp
141 lines | 4.4 KiB | text/x-c | CppLexer
Jani Honkonen
Add license headers
r794 /****************************************************************************
**
Miikka Heikkinen
Fixed the copyright year 2012 -> 2013
r2432 ** Copyright (C) 2013 Digia Plc
Jani Honkonen
Add license headers
r794 ** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
** This file is part of the Qt Commercial Charts Add-on.
**
** $QT_BEGIN_LICENSE$
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia.
**
** If you have questions regarding the use of this file, please use
** contact form at http://qt.digia.com
** $QT_END_LICENSE$
**
****************************************************************************/
Michal Klocek
Animation refactor...
r530 #include "axisanimation_p.h"
Miikka Heikkinen
Add Polar chart support...
r2483 #include "chartaxiselement_p.h"
#include "qabstractaxis_p.h"
Michal Klocek
Animation refactor...
r530
Q_DECLARE_METATYPE(QVector<qreal>)
QTCOMMERCIALCHART_BEGIN_NAMESPACE
Miikka Heikkinen
Add Polar chart support...
r2483 AxisAnimation::AxisAnimation(ChartAxisElement *axis)
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 : ChartAnimation(axis),
m_axis(axis),
m_type(DefaultAnimation)
Michal Klocek
Animation refactor...
r530 {
Michal Klocek
Refactors axis animation, line animations
r1241 setDuration(ChartAnimationDuration);
setEasingCurve(QEasingCurve::OutQuart);
Michal Klocek
Animation refactor...
r530 }
AxisAnimation::~AxisAnimation()
{
}
Michal Klocek
Refactors axis animation, line animations
r1241 void AxisAnimation::setAnimationType(Animation type)
{
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 if (state() != QAbstractAnimation::Stopped)
stop();
m_type = type;
Michal Klocek
Refactors axis animation, line animations
r1241 }
Jani Honkonen
more coding style fixes for src-folder...
r2104 void AxisAnimation::setAnimationPoint(const QPointF &point)
Michal Klocek
Refactors axis animation, line animations
r1241 {
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 if (state() != QAbstractAnimation::Stopped)
stop();
m_point = point;
Michal Klocek
Refactors axis animation, line animations
r1241 }
void AxisAnimation::setValues(QVector<qreal> &oldLayout, QVector<qreal> &newLayout)
{
Michal Klocek
Refactors layout:...
r2105 if (state() != QAbstractAnimation::Stopped) stop();
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097
Miikka Heikkinen
Revert "Remove TODOs for 1.2.1 release, revert this after release"...
r2477 // TODO: cannot return even if layout is empty
// New layout is not set properly without it (crash)
// if (newLayout.count() == 0)
// return;
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 switch (m_type) {
Jani Honkonen
src folder: another massive victory for coding style police
r2131 case ZoomOutAnimation: {
QRectF rect = m_axis->gridGeometry();
oldLayout.resize(newLayout.count());
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097
Jani Honkonen
src folder: another massive victory for coding style police
r2131 for (int i = 0, j = oldLayout.count() - 1; i < (oldLayout.count() + 1) / 2; ++i, --j) {
Miikka Heikkinen
Add Polar chart support...
r2483 oldLayout[i] = m_axis->axis()->orientation() == Qt::Horizontal ? rect.left() : rect.bottom();
oldLayout[j] = m_axis->axis()->orientation() == Qt::Horizontal ? rect.right() : rect.top();
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 }
Jani Honkonen
src folder: another massive victory for coding style police
r2131 }
break;
case ZoomInAnimation: {
Miikka Heikkinen
Add Polar chart support...
r2483 int index = qMin(oldLayout.count() * (m_axis->axis()->orientation() == Qt::Horizontal ? m_point.x() : (1 - m_point.y())), newLayout.count() - (qreal)1.0);
Jani Honkonen
src folder: another massive victory for coding style police
r2131 oldLayout.resize(newLayout.count());
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097
Jani Honkonen
src folder: another massive victory for coding style police
r2131 for (int i = 0; i < oldLayout.count(); i++)
oldLayout[i] = oldLayout[index];
}
break;
case MoveForwardAnimation: {
oldLayout.resize(newLayout.count());
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097
Jani Honkonen
src folder: another massive victory for coding style police
r2131 for (int i = 0, j = i + 1; i < oldLayout.count() - 1; ++i, ++j)
oldLayout[i] = oldLayout[j];
}
break;
case MoveBackwordAnimation: {
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 = m_axis->gridGeometry();
for (int i = 0, j = oldLayout.count() - 1; i < oldLayout.count(); ++i, --j)
Miikka Heikkinen
Add Polar chart support...
r2483 oldLayout[i] = m_axis->axis()->orientation() == Qt::Horizontal ? rect.left() : rect.top();
Jani Honkonen
src folder: another massive victory for coding style police
r2131 }
break;
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 }
QVariantAnimation::KeyValues value;
setKeyValues(value); //workaround for wrong interpolation call
setKeyValueAt(0.0, qVariantFromValue(oldLayout));
setKeyValueAt(1.0, qVariantFromValue(newLayout));
Michal Klocek
Refactors axis animation, line animations
r1241 }
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 QVariant AxisAnimation::interpolated(const QVariant &start, const QVariant &end, qreal progress) const
Michal Klocek
Animation refactor...
r530 {
Jani Honkonen
Fix deprecation errors from Qt5
r2241 QVector<qreal> startVector = qvariant_cast<QVector<qreal> >(start);
QVector<qreal> endVecotr = qvariant_cast<QVector<qreal> >(end);
Michal Klocek
Animation refactor...
r530 QVector<qreal> result;
Q_ASSERT(startVector.count() == endVecotr.count()) ;
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 for (int i = 0; i < startVector.count(); i++) {
qreal value = startVector[i] + ((endVecotr[i] - startVector[i]) * progress); //qBound(0.0, progress, 1.0));
result << value;
Michal Klocek
Animation refactor...
r530 }
return qVariantFromValue(result);
}
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 void AxisAnimation::updateCurrentValue(const QVariant &value)
Michal Klocek
Animation refactor...
r530 {
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 if (state() != QAbstractAnimation::Stopped) { //workaround
Jani Honkonen
Fix deprecation errors from Qt5
r2241 QVector<qreal> vector = qvariant_cast<QVector<qreal> >(value);
Miikka Heikkinen
Revert "Remove TODOs for 1.2.1 release, revert this after release"...
r2477 // Q_ASSERT(vector.count() != 0);
Michal Klocek
Animation refactor...
r530 m_axis->setLayout(vector);
Michal Klocek
Refactors axis animation, line animations
r1241 m_axis->updateGeometry();
Michal Klocek
Animation refactor...
r530 }
}
QTCOMMERCIALCHART_END_NAMESPACE