##// END OF EJS Templates
Fix crash when removing pie series from chart...
Fix crash when removing pie series from chart Connections cleanup in PieChartItem destructor didn't account for the possibility of series already having been destroyed. Changed m_series to QPointer so that it'll notice when series gets destroyed, and also added cleaning of slices to series destructor. Task-number: QTRD-1946 Change-Id: I651347bfcfbe7cd78dd26220a811fea5c8071fce Reviewed-by: Mika Salmela Reviewed-by: Mika Salmela <mika.salmela@digia.com>

File last commit:

r2432:53927f716a3d
r2475:9e35a3a169ed
Show More
xyanimation.cpp
149 lines | 4.2 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 "xyanimation_p.h"
Michal Klocek
Refactor xychartitem -> xychart
r1218 #include "xychart_p.h"
Michal Klocek
Improves build configuration...
r996 #include <QDebug>
Michal Klocek
Animation refactor...
r530
Q_DECLARE_METATYPE(QVector<QPointF>)
QTCOMMERCIALCHART_BEGIN_NAMESPACE
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 XYAnimation::XYAnimation(XYChart *item)
: ChartAnimation(item),
m_type(NewAnimation),
m_dirty(false),
m_index(-1),
m_item(item)
Michal Klocek
Animation refactor...
r530 {
Michal Klocek
Refactors axis animation, line animations
r1241 setDuration(ChartAnimationDuration);
setEasingCurve(QEasingCurve::OutQuart);
Michal Klocek
Animation refactor...
r530 }
XYAnimation::~XYAnimation()
{
}
Michal Klocek
adds QLineAnimation fixes
r1271 void XYAnimation::setup(const QVector<QPointF> &oldPoints, const QVector<QPointF> &newPoints, int index)
Michal Klocek
Refactors animation handling for xyseries
r1217 {
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 m_type = NewAnimation;
if (state() != QAbstractAnimation::Stopped) {
stop();
m_dirty = false;
}
if (!m_dirty) {
m_dirty = true;
m_oldPoints = oldPoints;
}
m_newPoints = newPoints;
int x = m_oldPoints.count();
int y = m_newPoints.count();
if (x - y == 1 && index >= 0 && y > 0) {
//remove point
m_newPoints.insert(index, index > 0 ? newPoints[index - 1] : newPoints[index]);
m_index = index;
m_type = RemovePointAnimation;
}
if (x - y == -1 && index >= 0) {
//add point
m_oldPoints.insert(index, index > 0 ? newPoints[index - 1] : newPoints[index]);
m_index = index;
m_type = AddPointAnimation;
}
x = m_oldPoints.count();
y = m_newPoints.count();
if (x != y)
m_type = NewAnimation;
else if (m_type == NewAnimation)
m_type = ReplacePointAnimation;
Michal Klocek
Refactors axis animation, line animations
r1241
setKeyValueAt(0.0, qVariantFromValue(m_oldPoints));
setKeyValueAt(1.0, qVariantFromValue(m_newPoints));
Michal Klocek
Animation refactor...
r530 }
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 QVariant XYAnimation::interpolated(const QVariant &start, const QVariant &end, qreal progress) const
Michal Klocek
Animation refactor...
r530 {
Jani Honkonen
Fix deprecation errors from Qt5
r2241 QVector<QPointF> startVector = qvariant_cast<QVector<QPointF> >(start);
QVector<QPointF> endVector = qvariant_cast<QVector<QPointF> >(end);
Michal Klocek
Animation refactor...
r530 QVector<QPointF> result;
Marek Rosa
Animation folder formating: white spaces, brackets, etc fixed
r738 switch (m_type) {
Michal Klocek
Bugfix wrong index when points added to xychart
r602
Michal Klocek
Refactors axis animation, line animations
r1241 case ReplacePointAnimation:
case AddPointAnimation:
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 case RemovePointAnimation: {
if (startVector.count() != endVector.count())
Michal Klocek
Animation refactor...
r530 break;
Marek Rosa
Animation folder formating: white spaces, brackets, etc fixed
r738
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 for (int i = 0; i < startVector.count(); i++) {
Marek Rosa
Animation folder formating: white spaces, brackets, etc fixed
r738 qreal x = startVector[i].x() + ((endVector[i].x() - startVector[i].x()) * progress);
qreal y = startVector[i].y() + ((endVector[i].y() - startVector[i].y()) * progress);
result << QPointF(x, y);
Michal Klocek
Animation refactor...
r530 }
Marek Rosa
Animation folder formating: white spaces, brackets, etc fixed
r738
}
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 break;
Michal Klocek
Refactors axis animation, line animations
r1241 case NewAnimation: {
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 for (int i = 0; i < endVector.count() * qBound(qreal(0), progress, qreal(1)); i++)
Marek Rosa
Animation folder formating: white spaces, brackets, etc fixed
r738 result << endVector[i];
}
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 break;
Marek Rosa
Animation folder formating: white spaces, brackets, etc fixed
r738 default:
qWarning() << "Unknown type of animation";
break;
Michal Klocek
Animation refactor...
r530 }
return qVariantFromValue(result);
}
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 void XYAnimation::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
Michal Klocek
adds QLineAnimation fixes
r1271
Jani Honkonen
Fix deprecation errors from Qt5
r2241 QVector<QPointF> vector = qvariant_cast<QVector<QPointF> >(value);
Michal Klocek
Refactors animation handling for xyseries
r1217 m_item->setGeometryPoints(vector);
m_item->updateGeometry();
Michal Klocek
Refactors axis animation, line animations
r1241 m_item->setDirty(true);
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 m_dirty = false;
Michal Klocek
adds QLineAnimation fixes
r1271
Michal Klocek
Animation refactor...
r530 }
}
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 void XYAnimation::updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
Michal Klocek
Refactors axis animation, line animations
r1241 {
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 if (oldState == QAbstractAnimation::Running && newState == QAbstractAnimation::Stopped) {
if (m_item->isDirty() && m_type == RemovePointAnimation) {
if (!m_newPoints.isEmpty())
m_newPoints.remove(m_index);
m_item->setGeometryPoints(m_newPoints);
}
}
Michal Klocek
Refactors axis animation, line animations
r1241 }
#include "moc_chartanimation_p.cpp"
Michal Klocek
Animation refactor...
r530 QTCOMMERCIALCHART_END_NAMESPACE