##// END OF EJS Templates
Merge remote-tracking branch 'origin/5.6' into 5.7...
Merge remote-tracking branch 'origin/5.6' into 5.7 Conflicts: sync.profile Change-Id: Icdf61d347a6d0b3624867ceb8c1e4220c6c78a76

File last commit:

r2866:bbf52870f4e3 merge
r2866:bbf52870f4e3 merge
Show More
xychart.cpp
246 lines | 7.8 KiB | text/x-c | CppLexer
Miikka Heikkinen
Updated license...
r2854 /****************************************************************************
Titta Heikkala
Updated license headers...
r2845 **
Miikka Heikkinen
Updated license...
r2854 ** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
Titta Heikkala
Updated license headers...
r2845 **
Miikka Heikkinen
Updated license...
r2854 ** This file is part of the Qt Charts module of the Qt Toolkit.
Titta Heikkala
Updated license headers...
r2845 **
Miikka Heikkinen
Updated license...
r2854 ** $QT_BEGIN_LICENSE:GPL$
Titta Heikkala
Updated license headers...
r2845 ** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
Miikka Heikkinen
Updated license...
r2854 ** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
Titta Heikkala
Updated license headers...
r2845 **
** $QT_END_LICENSE$
**
Miikka Heikkinen
Updated license...
r2854 ****************************************************************************/
Jani Honkonen
Add license headers
r794
Titta Heikkala
Fix include syntax...
r2714 #include <private/xychart_p.h>
#include <QtCharts/QXYSeries>
#include <private/qxyseries_p.h>
#include <private/chartpresenter_p.h>
#include <private/abstractdomain_p.h>
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 #include <private/chartdataset_p.h>
#include <private/glxyseriesdata_p.h>
Titta Heikkala
Fix include syntax...
r2714 #include <QtCharts/QXYModelMapper>
#include <private/qabstractaxis_p.h>
#include <QtGui/QPainter>
#include <QtCore/QAbstractItemModel>
Michal Klocek
Refactor animator...
r1735
Michal Klocek
Add missing files from previous commit
r466
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_BEGIN_NAMESPACE
Michal Klocek
Add missing files from previous commit
r466
Miikka Heikkinen
Add Polar chart support...
r2483 XYChart::XYChart(QXYSeries *series, QGraphicsItem *item):
Michal Klocek
Refactors internals...
r2273 ChartItem(series->d_func(),item),
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 m_series(series),
m_animation(0),
m_dirty(true)
Michal Klocek
Refactors animation handling for xyseries
r1217 {
Tero Ahola
Minor: extra colons, commented out code
r1782 QObject::connect(series, SIGNAL(pointReplaced(int)), this, SLOT(handlePointReplaced(int)));
Tero Ahola
Added a new QXYSeries::replace override for performance reasons....
r1783 QObject::connect(series, SIGNAL(pointsReplaced()), this, SLOT(handlePointsReplaced()));
Tero Ahola
Minor: extra colons, commented out code
r1782 QObject::connect(series, SIGNAL(pointAdded(int)), this, SLOT(handlePointAdded(int)));
QObject::connect(series, SIGNAL(pointRemoved(int)), this, SLOT(handlePointRemoved(int)));
Miikka Heikkinen
Add a method to remove more than one point to QXYSeries...
r2805 QObject::connect(series, SIGNAL(pointsRemoved(int, int)), this, SLOT(handlePointsRemoved(int, int)));
Tero Ahola
Minor: extra colons, commented out code
r1782 QObject::connect(this, SIGNAL(clicked(QPointF)), series, SIGNAL(clicked(QPointF)));
Marek Rosa
Added hovered signal to QLineSeries. Updated callout example
r2255 QObject::connect(this, SIGNAL(hovered(QPointF,bool)), series, SIGNAL(hovered(QPointF,bool)));
Titta Heikkala
Add pressed, released and doubleClicked signals...
r2739 QObject::connect(this, SIGNAL(pressed(QPointF)), series, SIGNAL(pressed(QPointF)));
QObject::connect(this, SIGNAL(released(QPointF)), series, SIGNAL(released(QPointF)));
QObject::connect(this, SIGNAL(doubleClicked(QPointF)), series, SIGNAL(doubleClicked(QPointF)));
Michal Klocek
Refactors animation handling for xyseries
r1217 }
Miikka Heikkinen
Add Polar chart support...
r2483 void XYChart::setGeometryPoints(const QVector<QPointF> &points)
Michal Klocek
Refactors animation handling for xyseries
r1217 {
m_points = points;
}
Jani Honkonen
more coding style fixes for src-folder...
r2104 void XYChart::setAnimation(XYAnimation *animation)
Michal Klocek
Add missing files from previous commit
r466 {
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 m_animation = animation;
Michal Klocek
Add missing files from previous commit
r466 }
Michal Klocek
Refactors axis animation, line animations
r1241 void XYChart::setDirty(bool dirty)
{
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 m_dirty = dirty;
Michal Klocek
Refactors axis animation, line animations
r1241 }
Miikka Heikkinen
Add Polar chart support...
r2483 // Returns a vector with same size as geometryPoints vector, indicating
// the off grid status of points.
QVector<bool> XYChart::offGridStatusVector()
{
qreal minX = domain()->minX();
qreal maxX = domain()->maxX();
qreal minY = domain()->minY();
qreal maxY = domain()->maxY();
QVector<bool> returnVector;
returnVector.resize(m_points.size());
Miikka Heikkinen
Further animation fixes...
r2492 // During remove animation series may have different number of points,
Miikka Heikkinen
Fix crash when adding/removing points during animation...
r2489 // so ensure we don't go over the index. No need to check for zero points, this
// will not be called in such a situation.
const int seriesLastIndex = m_series->count() - 1;
Miikka Heikkinen
Add Polar chart support...
r2483
for (int i = 0; i < m_points.size(); i++) {
Miikka Heikkinen
Refactor the new QXYSeries::pointAt() -> QXYSeries::at()...
r2491 const QPointF &seriesPoint = m_series->at(qMin(seriesLastIndex, i));
Miikka Heikkinen
Add Polar chart support...
r2483 if (seriesPoint.x() < minX
|| seriesPoint.x() > maxX
|| seriesPoint.y() < minY
|| seriesPoint.y() > maxY) {
returnVector[i] = true;
} else {
returnVector[i] = false;
}
}
return returnVector;
}
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 void XYChart::updateChart(QVector<QPointF> &oldPoints, QVector<QPointF> &newPoints, int index)
Michal Klocek
Add missing files from previous commit
r466 {
Michal Klocek
adds QLineAnimation fixes
r1271
Michal Klocek
Refactors animation handling for xyseries
r1217 if (m_animation) {
Michal Klocek
adds QLineAnimation fixes
r1271 m_animation->setup(oldPoints, newPoints, index);
Tero Ahola
Minor: extra colons, commented out code
r1782 m_points = newPoints;
Michal Klocek
Refactors axis animation, line animations
r1241 setDirty(false);
presenter()->startAnimation(m_animation);
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 } else {
Tero Ahola
Minor: extra colons, commented out code
r1782 m_points = newPoints;
Michal Klocek
Refactors animation handling for xyseries
r1217 updateGeometry();
Michal Klocek
Animation refactor...
r530 }
Michal Klocek
Add missing files from previous commit
r466 }
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 void XYChart::updateGlChart()
{
dataSet()->glXYSeriesDataManager()->setPoints(m_series, domain());
Miikka Heikkinen
Explicitly update GLWidget when we set new points...
r2865 presenter()->updateGLWidget();
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 updateGeometry();
}
Michal Klocek
Add missing files from previous commit
r466 //handlers
Michal Klocek
Refactor xychartitem -> xychart
r1218 void XYChart::handlePointAdded(int index)
Michal Klocek
Add missing files from previous commit
r466 {
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 Q_ASSERT(index < m_series->count());
Q_ASSERT(index >= 0);
Michal Klocek
Refactors animation handling for xyseries
r1217
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 if (m_series->useOpenGL()) {
updateGlChart();
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 } else {
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 QVector<QPointF> points;
if (m_dirty || m_points.isEmpty()) {
points = domain()->calculateGeometryPoints(m_series->pointsVector());
} else {
points = m_points;
QPointF point = domain()->calculateGeometryPoint(m_series->pointsVector().at(index),
m_validData);
if (!m_validData)
m_points.clear();
else
points.insert(index, point);
}
updateChart(m_points, points, index);
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 }
Michal Klocek
Add missing files from previous commit
r466 }
Marek Rosa
QXYSeries: support for adding data to model when using custom mapping
r1054
Michal Klocek
Refactor xychartitem -> xychart
r1218 void XYChart::handlePointRemoved(int index)
Michal Klocek
Adds big fat pimpl to series classes...
r938 {
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 Q_ASSERT(index <= m_series->count());
Q_ASSERT(index >= 0);
Michal Klocek
Refactors animation handling for xyseries
r1217
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 if (m_series->useOpenGL()) {
updateGlChart();
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 } else {
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 QVector<QPointF> points;
if (m_dirty || m_points.isEmpty()) {
points = domain()->calculateGeometryPoints(m_series->pointsVector());
} else {
points = m_points;
points.remove(index);
}
updateChart(m_points, points, index);
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 }
Michal Klocek
Add missing files from previous commit
r466 }
Miikka Heikkinen
Add a method to remove more than one point to QXYSeries...
r2805 void XYChart::handlePointsRemoved(int index, int count)
{
Q_ASSERT(index <= m_series->count());
Q_ASSERT(index >= 0);
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 if (m_series->useOpenGL()) {
updateGlChart();
Miikka Heikkinen
Add a method to remove more than one point to QXYSeries...
r2805 } else {
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 QVector<QPointF> points;
if (m_dirty || m_points.isEmpty()) {
points = domain()->calculateGeometryPoints(m_series->pointsVector());
} else {
points = m_points;
points.remove(index, count);
}
updateChart(m_points, points, index);
Miikka Heikkinen
Add a method to remove more than one point to QXYSeries...
r2805 }
}
Michal Klocek
Refactor xychartitem -> xychart
r1218 void XYChart::handlePointReplaced(int index)
Michal Klocek
Add missing files from previous commit
r466 {
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 Q_ASSERT(index < m_series->count());
Q_ASSERT(index >= 0);
Michal Klocek
Refactors animation handling for xyseries
r1217
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 if (m_series->useOpenGL()) {
updateGlChart();
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 } else {
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 QVector<QPointF> points;
if (m_dirty || m_points.isEmpty()) {
points = domain()->calculateGeometryPoints(m_series->pointsVector());
} else {
QPointF point = domain()->calculateGeometryPoint(m_series->pointsVector().at(index),
m_validData);
if (!m_validData)
m_points.clear();
points = m_points;
if (m_validData)
points.replace(index, point);
}
updateChart(m_points, points, index);
Jani Honkonen
astyle and manual coding style fixes for src-folder
r2097 }
Michal Klocek
Add missing files from previous commit
r466 }
Tero Ahola
Added a new QXYSeries::replace override for performance reasons....
r1783 void XYChart::handlePointsReplaced()
{
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 if (m_series->useOpenGL()) {
updateGlChart();
} else {
// All the points were replaced -> recalculate
QVector<QPointF> points = domain()->calculateGeometryPoints(m_series->pointsVector());
updateChart(m_points, points, -1);
}
Tero Ahola
Added a new QXYSeries::replace override for performance reasons....
r1783 }
Michal Klocek
Refactors Domain and Axis...
r1698 void XYChart::handleDomainUpdated()
Michal Klocek
Add missing files from previous commit
r466 {
Miikka Heikkinen
Accelerating lineseries with OpenGL...
r2820 if (m_series->useOpenGL()) {
updateGlChart();
} else {
if (isEmpty()) return;
QVector<QPointF> points = domain()->calculateGeometryPoints(m_series->pointsVector());
updateChart(m_points, points);
}
Michal Klocek
Add missing files from previous commit
r466 }
Michal Klocek
Refactor xychartitem -> xychart
r1218 bool XYChart::isEmpty()
Michal Klocek
Add missing files from previous commit
r466 {
Michal Klocek
Refactors internals...
r2273 return domain()->isEmpty() || m_series->points().isEmpty();
Michal Klocek
Add missing files from previous commit
r466 }
Michal Klocek
Refactor xychartitem -> xychart
r1218 #include "moc_xychart_p.cpp"
Michal Klocek
Add missing files from previous commit
r466
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_END_NAMESPACE