##// END OF EJS Templates
Added a new QXYSeries::replace override for performance reasons....
Added a new QXYSeries::replace override for performance reasons. Also added a QML demo application for oscilloscope use case. Oscilloscope use case was selected, because it involves a lot of data and has a strict requirements for performance. It revealed performance issues in data handling in QXYSeries, painting of QLineSeries and updating data in a model.

File last commit:

r1783:86f3ac473a35
r1783:86f3ac473a35
Show More
qxyseries.cpp
469 lines | 11.0 KiB | text/x-c | CppLexer
Jani Honkonen
Add license headers
r794 /****************************************************************************
**
** Copyright (C) 2012 Digia Plc
** 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
Add missing files from previous commit
r466 #include "qxyseries.h"
Michal Klocek
Adds big fat pimpl to series classes...
r938 #include "qxyseries_p.h"
Michal Klocek
Refactor to use qseries private for implmentation interface...
r943 #include "domain_p.h"
Michal Klocek
Adds qlegend pimpl...
r950 #include "legendmarker_p.h"
Michal Klocek
Refactors core to support mulitpile axis and domains...
r1556 #include "qvaluesaxis.h"
Michal Klocek
Add missing files from previous commit
r466
QTCOMMERCIALCHART_BEGIN_NAMESPACE
/*!
\class QXYSeries
Michal Klocek
Refactor scatter chart to fit the other classes...
r470 \brief The QXYSeries class is a base class for line, spline and scatter series.
Michal Klocek
Add missing files from previous commit
r466 */
Tero Ahola
Documenting xy-series
r1491 /*!
\qmlclass XYSeries
Tero Ahola
QML methods of series: several fixes and documentation
r1521 \inherits AbstractSeries
The XYSeries class is a base class for line, spline and scatter series.
Tero Ahola
Documenting xy-series
r1491
The class cannot be instantiated directly.
*/
Michal Klocek
Add missing files from previous commit
r466
Jani Honkonen
qxyseries doc update
r1336 /*!
\property QXYSeries::pointsVisible
Tero Ahola
Documenting xy-series
r1491 Controls if the data points are visible and should be drawn.
*/
/*!
\qmlproperty bool XYSeries::pointsVisible
Jani Honkonen
qxyseries doc update
r1336 Controls if the data points are visible and should be drawn.
*/
Michal Klocek
Add missing files from previous commit
r466 /*!
\fn QPen QXYSeries::pen() const
Michal Klocek
minor. some docs fix
r480 \brief Returns pen used to draw points for series.
Michal Klocek
Add missing files from previous commit
r466 \sa setPen()
*/
Michal Klocek
minor. some docs fix
r480 /*!
\fn QBrush QXYSeries::brush() const
\brief Returns brush used to draw points for series.
\sa setBrush()
*/
Tero Ahola
color and borderColor properties to XY charts; removed unnecessary signals
r1481 /*!
\property QXYSeries::color
Tero Ahola
Documenting xy-series
r1491 The color of the series. This is line (pen) color in case of QLineSeries or QSplineSeries and
fill (brush) color in case of QScatterSeries or QAreaSeries.
\sa QXYSeries::pen(), QXYSeries::brush()
*/
/*!
\qmlproperty color XYSeries::color
The color of the series. This is line (pen) color in case of LineSeries or SplineSeries and
fill (brush) color in case of ScatterSeries or AreaSeries.
Tero Ahola
color and borderColor properties to XY charts; removed unnecessary signals
r1481 */
Michal Klocek
Updates presenter example documentation
r574 /*!
\fn void QXYSeries::clicked(const QPointF& point)
\brief Signal is emitted when user clicks the \a point on chart.
*/
Tero Ahola
Documenting xy-series
r1491 /*!
\qmlsignal XYSeries::onClicked(QPointF point)
Signal is emitted when user clicks the \a point on chart. For example:
\code
LineSeries {
Tero Ahola
Renamed XyPoint to XYPoint
r1532 XYPoint { x: 0; y: 0 }
XYPoint { x: 1.1; y: 2.1 }
Tero Ahola
Documenting xy-series
r1491 onClicked: console.log("onClicked: " + point.x + ", " + point.y);
}
\endcode
*/
Michal Klocek
Updates presenter example documentation
r574
Michal Klocek
Add missing files from previous commit
r466 /*!
Jani Honkonen
qxyseries doc update
r1336 \fn void QXYSeries::pointReplaced(int index)
Tero Ahola
Documenting xy-series
r1491 Signal is emitted when a point has been replaced at \a index.
Jani Honkonen
qxyseries doc update
r1336 \sa replace()
Michal Klocek
Add missing files from previous commit
r466 */
Tero Ahola
Documenting xy-series
r1491 /*!
Tero Ahola
QML signals documentation
r1531 \qmlsignal XYSeries::onPointReplaced(int index)
Tero Ahola
Documenting xy-series
r1491 Signal is emitted when a point has been replaced at \a index.
*/
Michal Klocek
Add missing files from previous commit
r466
Tero Ahola
Added a new QXYSeries::replace override for performance reasons....
r1783 /*!
\fn void QXYSeries::pointsReplaced()
Signal is emitted when all points have been replaced with another points.
\sa replace()
*/
/*!
\qmlsignal XYSeries::onPointsReplaced()
*/
Michal Klocek
Add missing files from previous commit
r466 /*!
Jani Honkonen
qxyseries doc update
r1336 \fn void QXYSeries::pointAdded(int index)
Tero Ahola
Documenting xy-series
r1491 Signal is emitted when a point has been added at \a index.
Jani Honkonen
qxyseries doc update
r1336 \sa append(), insert()
Michal Klocek
Add missing files from previous commit
r466 */
Tero Ahola
Documenting xy-series
r1491 /*!
Tero Ahola
QML signals documentation
r1531 \qmlsignal XYSeries::onPointAdded(int index)
Tero Ahola
Documenting xy-series
r1491 Signal is emitted when a point has been added at \a index.
*/
Michal Klocek
Add missing files from previous commit
r466
/*!
Jani Honkonen
qxyseries doc update
r1336 \fn void QXYSeries::pointRemoved(int index)
Tero Ahola
Documenting xy-series
r1491 Signal is emitted when a point has been removed from \a index.
Jani Honkonen
qxyseries doc update
r1336 \sa remove()
Michal Klocek
Add missing files from previous commit
r466 */
Tero Ahola
Documenting xy-series
r1491 /*!
Tero Ahola
QML signals documentation
r1531 \qmlsignal XYSeries::onPointRemoved(int index)
Tero Ahola
Documenting xy-series
r1491 Signal is emitted when a point has been removed from \a index.
*/
Michal Klocek
Add missing files from previous commit
r466
Tero Ahola
Property notifications: axis minmax, bar properties, xyseries p-visibl and count
r1465 /*!
Tero Ahola
color and borderColor properties to XY charts; removed unnecessary signals
r1481 \fn void QXYSeries::colorChanged(QColor color)
\brief Signal is emitted when the line (pen) color has changed to \a color.
Tero Ahola
Property notifications: axis minmax, bar properties, xyseries p-visibl and count
r1465 */
Tero Ahola
Documenting xy-series
r1491 /*!
Tero Ahola
QML signals documentation
r1531 \qmlsignal XYSeries::onColorChanged(color color)
Tero Ahola
Documenting xy-series
r1491 Signal is emitted when the line (pen) color has changed to \a color.
*/
Tero Ahola
Property notifications: axis minmax, bar properties, xyseries p-visibl and count
r1465
Michal Klocek
Add missing files from previous commit
r466 /*!
Marek Rosa
gdpbarchart moved to test. Few small doc fixes
r940 \fn void QXYSeriesPrivate::updated()
Michal Klocek
Add missing files from previous commit
r466 \brief \internal
*/
Tero Ahola
Documenting xy-series
r1491 /*!
Tero Ahola
QML methods of series: several fixes and documentation
r1521 \qmlmethod XYSeries::append(real x, real y)
Append point (\a x, \a y) to the series
*/
/*!
\qmlmethod XYSeries::replace(real oldX, real oldY, real newX, real newY)
Replaces point (\a oldX, \a oldY) with point (\a newX, \a newY). Does nothing, if point (oldX, oldY) does not
exist.
*/
/*!
\qmlmethod XYSeries::remove(real x, real y)
Removes point (\a x, \a y) from the series. Does nothing, if point (x, y) does not exist.
*/
/*!
\qmlmethod XYSeries::insert(int index, real x, real y)
Inserts point (\a x, \a y) to the \a index. If index is 0 or smaller than 0 the point is prepended to the list of
points. If index is the same as or bigger than count, the point is appended to the list of points.
*/
/*!
\qmlmethod QPointF XYSeries::at(int index)
Returns point at \a index. Returns (0, 0) if the index is not valid.
Tero Ahola
Documenting xy-series
r1491 */
Michal Klocek
Add missing files from previous commit
r466 /*!
Tero Ahola
Updated documentation, warnings from legend and area left
r973 \internal
Michal Klocek
Add missing files from previous commit
r466 Constructs empty series object which is a child of \a parent.
Michal Klocek
Krazy reported errors...
r974 When series object is added to QChartView or QChart instance ownerships is transferred.
Michal Klocek
Add missing files from previous commit
r466 */
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 QXYSeries::QXYSeries(QXYSeriesPrivate &d,QObject *parent) : QAbstractSeries(d, parent)
Michal Klocek
Adds big fat pimpl to series classes...
r938 {
Michal Klocek
Add missing files from previous commit
r466 }
Tero Ahola
Visible property to abstract series
r1342
Michal Klocek
Add missing files from previous commit
r466 /*!
Destroys the object. Series added to QChartView or QChart instances are owned by those,
and are deleted when mentioned object are destroyed.
*/
QXYSeries::~QXYSeries()
{
}
/*!
Adds data point \a x \a y to the series. Points are connected with lines on the chart.
*/
Jani Honkonen
rename functions add() -> append()
r796 void QXYSeries::append(qreal x,qreal y)
Michal Klocek
Add missing files from previous commit
r466 {
Michal Klocek
Fixes and improvments to series API...
r1057 append(QPointF(x,y));
Michal Klocek
Add missing files from previous commit
r466 }
/*!
This is an overloaded function.
Adds data \a point to the series. Points are connected with lines on the chart.
*/
Jani Honkonen
rename functions add() -> append()
r796 void QXYSeries::append(const QPointF &point)
Michal Klocek
Add missing files from previous commit
r466 {
Michal Klocek
Fixes and improvments to series API...
r1057 Q_D(QXYSeries);
d->m_points<<point;
Marek Rosa
XYModelMapper slots for series signals implemented
r1262 emit pointAdded(d->m_points.count()-1);
Michal Klocek
Add missing files from previous commit
r466 }
Michal Klocek
Fixes for docs , adds xyseries docs
r481 /*!
This is an overloaded function.
Adds list of data \a points to the series. Points are connected with lines on the chart.
*/
Michal Klocek
Fixes and improvments to series API...
r1057 void QXYSeries::append(const QList<QPointF> &points)
Michal Klocek
Fixes for docs , adds xyseries docs
r481 {
foreach(const QPointF& point , points) {
Michal Klocek
Fixes and improvments to series API...
r1057 append(point);
Michal Klocek
Fixes for docs , adds xyseries docs
r481 }
}
Jani Honkonen
qxyseries doc update
r1336 /*!
Replaces data point \a oldX \a oldY with data point \a newX \a newY.
Tero Ahola
Added a new QXYSeries::replace override for performance reasons....
r1783 \sa QXYSeries::pointReplaced()
Jani Honkonen
qxyseries doc update
r1336 */
Michal Klocek
Fixes and improvments to series API...
r1057 void QXYSeries::replace(qreal oldX,qreal oldY,qreal newX,qreal newY)
Michal Klocek
Add missing files from previous commit
r466 {
Michal Klocek
Fixes and improvments to series API...
r1057 replace(QPointF(oldX,oldY),QPointF(newX,newY));
Michal Klocek
Add missing files from previous commit
r466 }
Jani Honkonen
qxyseries doc update
r1336 /*!
Replaces \a oldPoint with \a newPoint.
Tero Ahola
Added a new QXYSeries::replace override for performance reasons....
r1783 \sa QXYSeries::pointReplaced()
Jani Honkonen
qxyseries doc update
r1336 */
Michal Klocek
Fixes and improvments to series API...
r1057 void QXYSeries::replace(const QPointF &oldPoint,const QPointF &newPoint)
Michal Klocek
Improves spline interpolation...
r622 {
Michal Klocek
Adds big fat pimpl to series classes...
r938 Q_D(QXYSeries);
Michal Klocek
Fixes and improvments to series API...
r1057 int index = d->m_points.indexOf(oldPoint);
Michal Klocek
Update of tst_qlineseries.cpp
r1064 if(index==-1) return;
Michal Klocek
Fixes and improvments to series API...
r1057 d->m_points[index] = newPoint;
Marek Rosa
XYModelMapper slots for series signals implemented
r1262 emit pointReplaced(index);
Michal Klocek
Improves spline interpolation...
r622 }
Tero Ahola
Added a new QXYSeries::replace override for performance reasons....
r1783 /*!
Replaces the current points with \a points. This is faster than replacing data points one by one,
or first clearing all data, and then appending the new data. Emits QXYSeries::pointsReplaced()
when the points have been replaced.
\sa QXYSeries::pointsReplaced()
*/
void QXYSeries::replace(QList<QPointF> points)
{
Q_D(QXYSeries);
d->m_points = points.toVector();
emit pointsReplaced();
}
Michal Klocek
Add missing files from previous commit
r466 /*!
Michal Klocek
Adds missing scatter intercation implementation...
r541 Removes current \a x and \a y value.
Michal Klocek
Add missing files from previous commit
r466 */
Michal Klocek
Adds missing scatter intercation implementation...
r541 void QXYSeries::remove(qreal x,qreal y)
Michal Klocek
Add missing files from previous commit
r466 {
Michal Klocek
Fixes and improvments to series API...
r1057 remove(QPointF(x,y));
Michal Klocek
Add missing files from previous commit
r466 }
/*!
Jani Honkonen
qxyseries doc update
r1336 Removes current \a point x value.
Note: point y value is ignored.
Michal Klocek
Add missing files from previous commit
r466 */
sauimone
minor code review issues. indent, spaces, brackets etc.
r743 void QXYSeries::remove(const QPointF &point)
Michal Klocek
Add missing files from previous commit
r466 {
Michal Klocek
Fixes and improvments to series API...
r1057 Q_D(QXYSeries);
int index = d->m_points.indexOf(point);
Michal Klocek
Update of tst_qlineseries.cpp
r1064 if(index==-1) return;
Michal Klocek
Fixes and improvments to series API...
r1057 d->m_points.remove(index);
Marek Rosa
XYModelMapper slots for series signals implemented
r1262 emit pointRemoved(index);
Michal Klocek
Add missing files from previous commit
r466 }
Jani Honkonen
qxyseries doc update
r1336 /*!
Inserts a \a point in the series at \a index position.
*/
Marek Rosa
XYModelMapper slots for model signals implemented
r1256 void QXYSeries::insert(int index, const QPointF &point)
{
Q_D(QXYSeries);
d->m_points.insert(index, point);
Marek Rosa
XYModelMapper slots for series signals implemented
r1262 emit pointAdded(index);
Marek Rosa
XYModelMapper slots for model signals implemented
r1256 }
Jani Honkonen
qxyseries doc update
r1336 /*!
Removes all points from the series.
*/
Marek Rosa
XYModelMapper slots for model signals implemented
r1256 void QXYSeries::clear()
{
Q_D(QXYSeries);
for (int i = d->m_points.size() - 1; i >= 0; i--)
remove(d->m_points.at(i));
}
Michal Klocek
Add missing files from previous commit
r466 /*!
sauimone
fixed QTRD-1482 Commercial charts: QXYSeries::points() should be part of the public API
r1724 Returns list of points in the series.
Michal Klocek
Add missing files from previous commit
r466 */
Michal Klocek
Fixes and improvments to series API...
r1057 QList<QPointF> QXYSeries::points() const
Michal Klocek
Add missing files from previous commit
r466 {
Michal Klocek
Adds big fat pimpl to series classes...
r938 Q_D(const QXYSeries);
Marek Rosa
All model related methods and members removed from the series. QML stuff commented out where complaining
r1230 return d->m_points.toList();
Michal Klocek
Add missing files from previous commit
r466 }
/*!
Returns number of data points within series.
*/
int QXYSeries::count() const
{
Michal Klocek
Adds big fat pimpl to series classes...
r938 Q_D(const QXYSeries);
Michal Klocek
Fixes and improvments to series API...
r1057 return d->m_points.count();
Tero Ahola
Added data getter for XY series; example for customizing the looks
r491 }
Michal Klocek
Spline series windows compilation fix
r467 /*!
Michal Klocek
Fixes for docs , adds xyseries docs
r481 Sets \a pen used for drawing points on the chart. If the pen is not defined, the
pen from chart theme is used.
Marek Rosa
Various documentation fixes
r909 \sa QChart::setTheme()
Michal Klocek
Spline series windows compilation fix
r467 */
sauimone
minor code review issues. indent, spaces, brackets etc.
r743 void QXYSeries::setPen(const QPen &pen)
Michal Klocek
Spline series windows compilation fix
r467 {
Michal Klocek
Adds big fat pimpl to series classes...
r938 Q_D(QXYSeries);
Tero Ahola
Color and border color properties of XYSeries
r1537 if (d->m_pen != pen) {
bool emitColorChanged = d->m_pen.color() != pen.color();
Michal Klocek
Adds big fat pimpl to series classes...
r938 d->m_pen = pen;
emit d->updated();
Tero Ahola
Color and border color properties of XYSeries
r1537 if (emitColorChanged)
emit colorChanged(pen.color());
Michal Klocek
Spline series windows compilation fix
r467 }
}
Michal Klocek
Adds big fat pimpl to series classes...
r938 QPen QXYSeries::pen() const
{
Q_D(const QXYSeries);
return d->m_pen;
}
Michal Klocek
Spline series windows compilation fix
r467 /*!
Michal Klocek
Fixes for docs , adds xyseries docs
r481 Sets \a brush used for drawing points on the chart. If the brush is not defined, brush
from chart theme setting is used.
Marek Rosa
Various documentation fixes
r909 \sa QChart::setTheme()
Michal Klocek
Spline series windows compilation fix
r467 */
sauimone
minor code review issues. indent, spaces, brackets etc.
r743 void QXYSeries::setBrush(const QBrush &brush)
Michal Klocek
Spline series windows compilation fix
r467 {
Michal Klocek
Adds big fat pimpl to series classes...
r938 Q_D(QXYSeries);
if (d->m_brush!=brush) {
d->m_brush = brush;
emit d->updated();
Michal Klocek
Spline series windows compilation fix
r467 }
}
Michal Klocek
Adds big fat pimpl to series classes...
r938 QBrush QXYSeries::brush() const
{
Q_D(const QXYSeries);
return d->m_brush;
}
Tero Ahola
color and borderColor properties to XY charts; removed unnecessary signals
r1481 void QXYSeries::setColor(const QColor &color)
{
QPen p = pen();
if (p.color() != color) {
p.setColor(color);
setPen(p);
}
}
QColor QXYSeries::color() const
{
return pen().color();
}
Michal Klocek
Adds big fat pimpl to series classes...
r938
void QXYSeries::setPointsVisible(bool visible)
{
Q_D(QXYSeries);
if (d->m_pointsVisible != visible){
d->m_pointsVisible = visible;
emit d->updated();
}
}
bool QXYSeries::pointsVisible() const
{
Q_D(const QXYSeries);
return d->m_pointsVisible;
}
Michal Klocek
Spline series windows compilation fix
r467
Michal Klocek
Add missing files from previous commit
r466 /*!
Stream operator for adding a data \a point to the series.
Jani Honkonen
rename functions add() -> append()
r796 \sa append()
Michal Klocek
Add missing files from previous commit
r466 */
QXYSeries& QXYSeries::operator<< (const QPointF &point)
{
Jani Honkonen
rename functions add() -> append()
r796 append(point);
Michal Klocek
Add missing files from previous commit
r466 return *this;
}
Michal Klocek
Fixes for docs , adds xyseries docs
r481 /*!
Stream operator for adding a list of \a points to the series.
Jani Honkonen
rename functions add() -> append()
r796 \sa append()
Michal Klocek
Fixes for docs , adds xyseries docs
r481 */
Michal Klocek
Fixes and improvments to series API...
r1057 QXYSeries& QXYSeries::operator<< (const QList<QPointF>& points)
Michal Klocek
Fixes for docs , adds xyseries docs
r481 {
Jani Honkonen
rename functions add() -> append()
r796 append(points);
Michal Klocek
Fixes for docs , adds xyseries docs
r481 return *this;
}
Michal Klocek
Adds big fat pimpl to series classes...
r938 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Marek Rosa
Removed all the unfinished model functionality from XYSeries and BarSeries
r990
Marek Rosa
All model related methods and members removed from the series. QML stuff commented out where complaining
r1230 QXYSeriesPrivate::QXYSeriesPrivate(QXYSeries *q) :
QAbstractSeriesPrivate(q),
Tero Ahola
Renamed QSeries to QAbstractSeries
r988 m_pointsVisible(false)
Michal Klocek
Adds big fat pimpl to series classes...
r938 {
}
Michal Klocek
Refactor to use qseries private for implmentation interface...
r943 void QXYSeriesPrivate::scaleDomain(Domain& domain)
{
Marek Rosa
Fix to domain initialization
r1740 qreal minX(0);
qreal minY(0);
qreal maxX(1);
qreal maxY(1);
Michal Klocek
Refactor to use qseries private for implmentation interface...
r943
Michal Klocek
Fix xy series model issues due to API changes
r1059 Q_Q(QXYSeries);
Michal Klocek
Fixes and improvments to series API...
r1057
Michal Klocek
Fix xy series model issues due to API changes
r1059 const QList<QPointF>& points = q->points();
Michal Klocek
Adds default 0,1 domain for emmpty series, update tst_qlineseries
r1070
Marek Rosa
Fix to domain initialization
r1740 if (!points.isEmpty()){
minX = points[0].x();
minY = points[0].y();
maxX = minX;
maxY = minY;
for (int i = 0; i < points.count(); i++) {
qreal x = points[i].x();
qreal y = points[i].y();
minX = qMin(minX, x);
minY = qMin(minY, y);
maxX = qMax(maxX, x);
maxY = qMax(maxY, y);
}
Marek Rosa
Uncomment domainScale function in XYSeries
r1205 }
Michal Klocek
Refactors Domain and Axis...
r1698 domain.setRange(minX,maxX,minY,maxY);
Michal Klocek
Refactor to use qseries private for implmentation interface...
r943 }
Michal Klocek
Adds qlegend pimpl...
r950 QList<LegendMarker*> QXYSeriesPrivate::createLegendMarker(QLegend* legend)
{
Q_Q(QXYSeries);
QList<LegendMarker*> list;
return list << new XYLegendMarker(q,legend);
}
Michal Klocek
Adds axis domain intialization
r1695 void QXYSeriesPrivate::initializeAxis(QAbstractAxis* axis)
Michal Klocek
Refactors core to support mulitpile axis and domains...
r1556 {
Michal Klocek
Adds createDefaultAxes logic
r1588 Q_UNUSED(axis);
Michal Klocek
Refactors core to support mulitpile axis and domains...
r1556 }
Michal Klocek
Adds axis domain intialization
r1695 QAbstractAxis::AxisType QXYSeriesPrivate::defaultAxisType(Qt::Orientation orientation) const
Michal Klocek
Adds createDefaultAxes logic
r1588 {
Michal Klocek
Adds axis domain intialization
r1695 Q_UNUSED(orientation);
Michal Klocek
Adds createDefaultAxes logic
r1588 return QAbstractAxis::AxisTypeValues;
Michal Klocek
Refactors core to support mulitpile axis and domains...
r1556 }
Michal Klocek
Add missing files from previous commit
r466 #include "moc_qxyseries.cpp"
Michal Klocek
Adds big fat pimpl to series classes...
r938 #include "moc_qxyseries_p.cpp"
Michal Klocek
Add missing files from previous commit
r466
QTCOMMERCIALCHART_END_NAMESPACE