qxyseries.cpp
508 lines
| 14.0 KiB
| text/x-c
|
CppLexer
Jani Honkonen
|
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
|
r466 | #include "qxyseries.h" | ||
Michal Klocek
|
r938 | #include "qxyseries_p.h" | ||
Michal Klocek
|
r943 | #include "domain_p.h" | ||
Michal Klocek
|
r950 | #include "legendmarker_p.h" | ||
Marek Rosa
|
r862 | #include <QAbstractItemModel> | ||
Michal Klocek
|
r466 | |||
QTCOMMERCIALCHART_BEGIN_NAMESPACE | ||||
/*! | ||||
\class QXYSeries | ||||
Michal Klocek
|
r470 | \brief The QXYSeries class is a base class for line, spline and scatter series. | ||
Michal Klocek
|
r466 | */ | ||
/*! | ||||
\fn QPen QXYSeries::pen() const | ||||
Michal Klocek
|
r480 | \brief Returns pen used to draw points for series. | ||
Michal Klocek
|
r466 | \sa setPen() | ||
*/ | ||||
Michal Klocek
|
r480 | /*! | ||
\fn QBrush QXYSeries::brush() const | ||||
\brief Returns brush used to draw points for series. | ||||
\sa setBrush() | ||||
*/ | ||||
Michal Klocek
|
r574 | /*! | ||
\fn void QXYSeries::clicked(const QPointF& point) | ||||
\brief Signal is emitted when user clicks the \a point on chart. | ||||
*/ | ||||
Tero Ahola
|
r973 | |||
Michal Klocek
|
r466 | /*! | ||
Marek Rosa
|
r940 | \fn void QXYSeriesPrivate::pointReplaced(int index) | ||
Michal Klocek
|
r466 | \brief \internal \a index | ||
*/ | ||||
/*! | ||||
Marek Rosa
|
r940 | \fn void QXYSeriesPrivate::pointAdded(int index) | ||
Michal Klocek
|
r466 | \brief \internal \a index | ||
*/ | ||||
/*! | ||||
Marek Rosa
|
r940 | \fn void QXYSeriesPrivate::pointRemoved(int index) | ||
Michal Klocek
|
r466 | \brief \internal \a index | ||
*/ | ||||
/*! | ||||
Marek Rosa
|
r940 | \fn void QXYSeriesPrivate::updated() | ||
Michal Klocek
|
r466 | \brief \internal | ||
*/ | ||||
/*! | ||||
Tero Ahola
|
r973 | \internal | ||
Michal Klocek
|
r466 | Constructs empty series object which is a child of \a parent. | ||
Michal Klocek
|
r974 | When series object is added to QChartView or QChart instance ownerships is transferred. | ||
Michal Klocek
|
r466 | */ | ||
Tero Ahola
|
r988 | QXYSeries::QXYSeries(QXYSeriesPrivate &d,QObject *parent) : QAbstractSeries(d, parent) | ||
Michal Klocek
|
r938 | { | ||
Michal Klocek
|
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
|
r796 | void QXYSeries::append(qreal x,qreal y) | ||
Michal Klocek
|
r466 | { | ||
Michal Klocek
|
r1057 | append(QPointF(x,y)); | ||
Michal Klocek
|
r466 | } | ||
/*! | ||||
This is an overloaded function. | ||||
Adds data \a point to the series. Points are connected with lines on the chart. | ||||
*/ | ||||
Jani Honkonen
|
r796 | void QXYSeries::append(const QPointF &point) | ||
Michal Klocek
|
r466 | { | ||
Michal Klocek
|
r1057 | Q_D(QXYSeries); | ||
d->m_points<<point; | ||||
emit d->pointAdded(d->m_points.count()-1); | ||||
Michal Klocek
|
r466 | } | ||
Michal Klocek
|
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
|
r1057 | void QXYSeries::append(const QList<QPointF> &points) | ||
Michal Klocek
|
r481 | { | ||
foreach(const QPointF& point , points) { | ||||
Michal Klocek
|
r1057 | append(point); | ||
Michal Klocek
|
r481 | } | ||
} | ||||
Michal Klocek
|
r466 | |||
Michal Klocek
|
r1057 | void QXYSeries::replace(qreal oldX,qreal oldY,qreal newX,qreal newY) | ||
Michal Klocek
|
r466 | { | ||
Michal Klocek
|
r1057 | replace(QPointF(oldX,oldY),QPointF(newX,newY)); | ||
Michal Klocek
|
r466 | } | ||
Michal Klocek
|
r1057 | void QXYSeries::replace(const QPointF &oldPoint,const QPointF &newPoint) | ||
Michal Klocek
|
r622 | { | ||
Michal Klocek
|
r938 | Q_D(QXYSeries); | ||
Michal Klocek
|
r1057 | int index = d->m_points.indexOf(oldPoint); | ||
Michal Klocek
|
r1064 | if(index==-1) return; | ||
Michal Klocek
|
r1057 | d->m_points[index] = newPoint; | ||
emit d->pointReplaced(index); | ||||
Michal Klocek
|
r622 | } | ||
Michal Klocek
|
r466 | /*! | ||
Michal Klocek
|
r541 | Removes current \a x and \a y value. | ||
Michal Klocek
|
r466 | */ | ||
Michal Klocek
|
r541 | void QXYSeries::remove(qreal x,qreal y) | ||
Michal Klocek
|
r466 | { | ||
Michal Klocek
|
r1057 | remove(QPointF(x,y)); | ||
Michal Klocek
|
r466 | } | ||
/*! | ||||
Removes current \a point x value. Note \a point y value is ignored. | ||||
*/ | ||||
sauimone
|
r743 | void QXYSeries::remove(const QPointF &point) | ||
Michal Klocek
|
r466 | { | ||
Michal Klocek
|
r1057 | Q_D(QXYSeries); | ||
int index = d->m_points.indexOf(point); | ||||
Michal Klocek
|
r1064 | if(index==-1) return; | ||
Michal Klocek
|
r1057 | d->m_points.remove(index); | ||
emit d->pointRemoved(index); | ||||
Michal Klocek
|
r466 | } | ||
/*! | ||||
Michal Klocek
|
r481 | Removes all data points from the series. | ||
Michal Klocek
|
r466 | */ | ||
Michal Klocek
|
r481 | void QXYSeries::removeAll() | ||
Michal Klocek
|
r466 | { | ||
Michal Klocek
|
r938 | Q_D(QXYSeries); | ||
Michal Klocek
|
r1057 | foreach(const QPointF& point, d->m_points) { | ||
Marek Rosa
|
r1072 | remove(point); | ||
sauimone
|
r743 | } | ||
Michal Klocek
|
r466 | } | ||
/*! | ||||
\internal \a pos | ||||
*/ | ||||
Michal Klocek
|
r1057 | QList<QPointF> QXYSeries::points() const | ||
Michal Klocek
|
r466 | { | ||
Marek Rosa
|
r1072 | // Q_ASSERT(false); | ||
Michal Klocek
|
r938 | Q_D(const QXYSeries); | ||
if (d->m_model) { | ||||
Michal Klocek
|
r1057 | QList<QPointF> result; | ||
if (d->m_mapOrientation == Qt::Vertical){ | ||||
Marek Rosa
|
r527 | // consecutive data is read from model's column | ||
Marek Rosa
|
r1085 | if (d->m_mapX >= d->m_model->columnCount() || d->m_mapY >= d->m_model->columnCount()) | ||
return result; // mapped columns are not existing | ||||
Michal Klocek
|
r1057 | |||
for(int i = d->m_mapFirst; i< d->m_mapFirst + count(); ++i) { | ||||
qreal x = d->m_model->data(d->m_model->index(i, d->m_mapX), Qt::DisplayRole).toReal(); | ||||
qreal y = d->m_model->data(d->m_model->index(i, d->m_mapY), Qt::DisplayRole).toReal(); | ||||
result << QPointF(x,y); | ||||
} | ||||
return result; | ||||
} | ||||
else{ | ||||
Marek Rosa
|
r527 | // consecutive data is read from model's row | ||
Marek Rosa
|
r1085 | if (d->m_mapX >= d->m_model->rowCount() || d->m_mapY >= d->m_model->rowCount()) | ||
return result; // mapped rows are not existing | ||||
Michal Klocek
|
r1057 | for(int i = d->m_mapFirst; i< d->m_mapFirst + count(); ++i) { | ||
Marek Rosa
|
r1072 | qreal x = d->m_model->data(d->m_model->index(d->m_mapX, i), Qt::DisplayRole).toReal(); | ||
qreal y = d->m_model->data(d->m_model->index(d->m_mapY, i), Qt::DisplayRole).toReal(); | ||||
result << QPointF(x,y); | ||||
Michal Klocek
|
r1057 | } | ||
return result; | ||||
} | ||||
sauimone
|
r743 | } else { | ||
Marek Rosa
|
r527 | // model is not specified, return the data from series' internal data store | ||
Michal Klocek
|
r1057 | return d->m_points.toList(); | ||
sauimone
|
r743 | } | ||
Michal Klocek
|
r466 | } | ||
/*! | ||||
Returns number of data points within series. | ||||
*/ | ||||
int QXYSeries::count() const | ||||
{ | ||||
Michal Klocek
|
r938 | Q_D(const QXYSeries); | ||
if (d->m_model) { | ||||
if (d->m_mapOrientation == Qt::Vertical) { | ||||
Marek Rosa
|
r1054 | // data is in a column. Return the number of mapped items if the model's column have enough items | ||
// or the number of items that can be mapped | ||||
Marek Rosa
|
r1085 | if (d->m_mapX >= d->m_model->columnCount() || d->m_mapY >= d->m_model->columnCount()) | ||
return 0; // mapped columns are not existing | ||||
else if (d->m_mapCount != -1) | ||||
Marek Rosa
|
r1054 | return qMin(d->m_mapCount, qMax(d->m_model->rowCount() - d->m_mapFirst, 0)); | ||
else | ||||
return qMax(d->m_model->rowCount() - d->m_mapFirst, 0); | ||||
sauimone
|
r743 | } else { | ||
Marek Rosa
|
r1054 | // data is in a row. Return the number of mapped items if the model's row have enough items | ||
// or the number of items that can be mapped | ||||
Marek Rosa
|
r1085 | if (d->m_mapX >= d->m_model->rowCount() || d->m_mapY >= d->m_model->rowCount()) | ||
return 0; // mapped rows are not existing | ||||
else if (d->m_mapCount != -1) | ||||
Marek Rosa
|
r1054 | return qMin(d->m_mapCount, qMax(d->m_model->columnCount() - d->m_mapFirst, 0)); | ||
else | ||||
return qMax(d->m_model->columnCount() - d->m_mapFirst, 0); | ||||
Marek Rosa
|
r734 | } | ||
Jani Honkonen
|
r609 | } | ||
// model is not specified, return the number of points in the series internal data store | ||||
Michal Klocek
|
r1057 | return d->m_points.count(); | ||
Tero Ahola
|
r491 | } | ||
Michal Klocek
|
r467 | /*! | ||
Michal Klocek
|
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
|
r909 | \sa QChart::setTheme() | ||
Michal Klocek
|
r467 | */ | ||
sauimone
|
r743 | void QXYSeries::setPen(const QPen &pen) | ||
Michal Klocek
|
r467 | { | ||
Michal Klocek
|
r938 | Q_D(QXYSeries); | ||
if (d->m_pen!=pen) { | ||||
d->m_pen = pen; | ||||
emit d->updated(); | ||||
Michal Klocek
|
r467 | } | ||
} | ||||
Michal Klocek
|
r938 | QPen QXYSeries::pen() const | ||
{ | ||||
Q_D(const QXYSeries); | ||||
return d->m_pen; | ||||
} | ||||
Michal Klocek
|
r467 | /*! | ||
Michal Klocek
|
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
|
r909 | \sa QChart::setTheme() | ||
Michal Klocek
|
r467 | */ | ||
sauimone
|
r743 | void QXYSeries::setBrush(const QBrush &brush) | ||
Michal Klocek
|
r467 | { | ||
Michal Klocek
|
r938 | Q_D(QXYSeries); | ||
if (d->m_brush!=brush) { | ||||
d->m_brush = brush; | ||||
emit d->updated(); | ||||
Michal Klocek
|
r467 | } | ||
} | ||||
Michal Klocek
|
r938 | QBrush QXYSeries::brush() const | ||
{ | ||||
Q_D(const QXYSeries); | ||||
return d->m_brush; | ||||
} | ||||
/*! | ||||
Sets if data points are \a visible and should be drawn on line. | ||||
*/ | ||||
void QXYSeries::setPointsVisible(bool visible) | ||||
{ | ||||
Q_D(QXYSeries); | ||||
if (d->m_pointsVisible != visible){ | ||||
d->m_pointsVisible = visible; | ||||
emit d->updated(); | ||||
} | ||||
} | ||||
Tero Ahola
|
r973 | /*! | ||
Returns true if drawing the data points of the series is enabled. | ||||
*/ | ||||
Michal Klocek
|
r938 | bool QXYSeries::pointsVisible() const | ||
{ | ||||
Q_D(const QXYSeries); | ||||
return d->m_pointsVisible; | ||||
} | ||||
Michal Klocek
|
r467 | |||
Michal Klocek
|
r466 | /*! | ||
Stream operator for adding a data \a point to the series. | ||||
Jani Honkonen
|
r796 | \sa append() | ||
Michal Klocek
|
r466 | */ | ||
QXYSeries& QXYSeries::operator<< (const QPointF &point) | ||||
{ | ||||
Jani Honkonen
|
r796 | append(point); | ||
Michal Klocek
|
r466 | return *this; | ||
} | ||||
Michal Klocek
|
r481 | /*! | ||
Stream operator for adding a list of \a points to the series. | ||||
Jani Honkonen
|
r796 | \sa append() | ||
Michal Klocek
|
r481 | */ | ||
Michal Klocek
|
r1057 | QXYSeries& QXYSeries::operator<< (const QList<QPointF>& points) | ||
Michal Klocek
|
r481 | { | ||
Jani Honkonen
|
r796 | append(points); | ||
Michal Klocek
|
r481 | return *this; | ||
} | ||||
Marek Rosa
|
r877 | /*! | ||
\fn bool QXYSeries::setModel(QAbstractItemModel *model) | ||||
Sets the \a model to be used as a data source | ||||
Marek Rosa
|
r991 | \sa setModelMapping() | ||
Marek Rosa
|
r877 | */ | ||
Michal Klocek
|
r938 | bool QXYSeries::setModel(QAbstractItemModel *model) | ||
{ | ||||
Q_D(QXYSeries); | ||||
Marek Rosa
|
r630 | // disconnect signals from old model | ||
Michal Klocek
|
r938 | if (d->m_model) { | ||
QObject::disconnect(d->m_model, 0, this, 0); | ||||
d->m_mapX = -1; | ||||
d->m_mapY = -1; | ||||
Marek Rosa
|
r1081 | d->m_mapFirst = 0; | ||
d->m_mapCount = -1; | ||||
Michal Klocek
|
r938 | d->m_mapOrientation = Qt::Vertical; | ||
Marek Rosa
|
r630 | } | ||
// set new model | ||||
sauimone
|
r743 | if (model) { | ||
Michal Klocek
|
r938 | d->m_model = model; | ||
Marek Rosa
|
r630 | return true; | ||
sauimone
|
r743 | } else { | ||
Michal Klocek
|
r938 | d->m_model = 0; | ||
Marek Rosa
|
r630 | return false; | ||
} | ||||
Marek Rosa
|
r519 | } | ||
Marek Rosa
|
r900 | /*! | ||
Sets the \a modelX to be used as a data source for x coordinate and \a modelY to be used | ||||
Michal Klocek
|
r974 | as a data source for y coordinate. The \a orientation parameter specifies whether the data | ||
Marek Rosa
|
r900 | is in columns or in rows. | ||
Marek Rosa
|
r991 | \sa setModel() | ||
Marek Rosa
|
r900 | */ | ||
Marek Rosa
|
r527 | void QXYSeries::setModelMapping(int modelX, int modelY, Qt::Orientation orientation) | ||
{ | ||||
Michal Klocek
|
r938 | Q_D(QXYSeries); | ||
if (d->m_model == 0) | ||||
Marek Rosa
|
r630 | return; | ||
Michal Klocek
|
r938 | d->m_mapX = modelX; | ||
d->m_mapY = modelY; | ||||
d->m_mapOrientation = orientation; | ||||
Marek Rosa
|
r1054 | |||
// connect the signals from the model | ||||
connect(d->m_model,SIGNAL(dataChanged(QModelIndex,QModelIndex)), d, SLOT(modelUpdated(QModelIndex,QModelIndex))); | ||||
Marek Rosa
|
r1085 | // if (d->m_mapOrientation == Qt::Vertical) { | ||
connect(d->m_model,SIGNAL(rowsInserted(QModelIndex,int,int)), d, SLOT(modelRowsAdded(QModelIndex,int,int))); | ||||
connect(d->m_model,SIGNAL(rowsRemoved(QModelIndex,int,int)), d, SLOT(modelRowsRemoved(QModelIndex,int,int))); | ||||
// } else { | ||||
connect(d->m_model, SIGNAL(columnsInserted(QModelIndex,int,int)), d, SLOT(modelColumnsAdded(QModelIndex,int,int))); | ||||
connect(d->m_model, SIGNAL(columnsRemoved(QModelIndex,int,int)), d, SLOT(modelColumnsRemoved(QModelIndex,int,int))); | ||||
// } | ||||
Marek Rosa
|
r1054 | } | ||
void QXYSeries::setModelMappingRange(int first, int count) | ||||
{ | ||||
Q_D(QXYSeries); | ||||
Marek Rosa
|
r1077 | d->m_mapFirst = qMax(first, 0); | ||
d->m_mapCount = qMax(count, -1); | ||||
Marek Rosa
|
r1090 | emit d->reinitialized(); | ||
Michal Klocek
|
r938 | } | ||
Marek Rosa
|
r1072 | int QXYSeries::mapX() const | ||
{ | ||||
Q_D(const QXYSeries); | ||||
return d->m_mapX; | ||||
} | ||||
int QXYSeries::mapY() const | ||||
{ | ||||
Q_D(const QXYSeries); | ||||
return d->m_mapY; | ||||
} | ||||
Michal Klocek
|
r938 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | ||
Marek Rosa
|
r990 | |||
Tero Ahola
|
r988 | QXYSeriesPrivate::QXYSeriesPrivate(QXYSeries *q) : QAbstractSeriesPrivate(q), | ||
m_mapX(-1), | ||||
m_mapY(-1), | ||||
m_pointsVisible(false) | ||||
Michal Klocek
|
r938 | { | ||
} | ||||
Michal Klocek
|
r943 | void QXYSeriesPrivate::scaleDomain(Domain& domain) | ||
{ | ||||
qreal minX(domain.minX()); | ||||
qreal minY(domain.minY()); | ||||
qreal maxX(domain.maxX()); | ||||
qreal maxY(domain.maxY()); | ||||
int tickXCount(domain.tickXCount()); | ||||
int tickYCount(domain.tickYCount()); | ||||
Michal Klocek
|
r1059 | Q_Q(QXYSeries); | ||
Michal Klocek
|
r1057 | |||
Michal Klocek
|
r1059 | const QList<QPointF>& points = q->points(); | ||
Michal Klocek
|
r1070 | |||
if(points.isEmpty()){ | ||||
minX=0.0; | ||||
minY=0.0; | ||||
maxX=1.0; | ||||
maxY=1.0; | ||||
} | ||||
Michal Klocek
|
r1059 | for (int i = 0; i < points.count(); i++) | ||
{ | ||||
qreal x = points[i].x(); | ||||
qreal y = points[i].y(); | ||||
Michal Klocek
|
r943 | minX = qMin(minX, x); | ||
minY = qMin(minY, y); | ||||
maxX = qMax(maxX, x); | ||||
maxY = qMax(maxY, y); | ||||
} | ||||
Marek Rosa
|
r1085 | domain.setRange(minX,maxX,minY,maxY,tickXCount,tickYCount); | ||
Michal Klocek
|
r943 | } | ||
Michal Klocek
|
r950 | QList<LegendMarker*> QXYSeriesPrivate::createLegendMarker(QLegend* legend) | ||
{ | ||||
Q_Q(QXYSeries); | ||||
QList<LegendMarker*> list; | ||||
return list << new XYLegendMarker(q,legend); | ||||
} | ||||
Marek Rosa
|
r1054 | void QXYSeriesPrivate::modelUpdated(QModelIndex topLeft, QModelIndex bottomRight) | ||
{ | ||||
for (int row = topLeft.row(); row <= bottomRight.row(); row++) { | ||||
for (int column = topLeft.column(); column <= bottomRight.column(); column++) { | ||||
if (m_mapOrientation == Qt::Vertical) { | ||||
if ((column == m_mapX || column == m_mapY) // modified item is in a mapped column | ||||
&& row >= m_mapFirst // modfied item in not before first item | ||||
&& (m_mapCount == -1 || row < m_mapFirst + m_mapCount)) // map is not limited or item lays before the end of map | ||||
emit pointReplaced(row - m_mapFirst); | ||||
} else { | ||||
if ((row == m_mapX || row == m_mapY) // modified item is in a mapped row | ||||
&& column >= m_mapFirst // modfied item in not before first item | ||||
&& (m_mapCount == -1 || column < m_mapFirst + m_mapCount)) // map is not limited or item lays before the end of map | ||||
emit pointReplaced(column - m_mapFirst); | ||||
} | ||||
} | ||||
} | ||||
} | ||||
Marek Rosa
|
r1085 | void QXYSeriesPrivate::modelRowsAdded(QModelIndex parent, int start, int end) | ||
{ | ||||
Q_UNUSED(parent); | ||||
if (m_mapOrientation == Qt::Vertical) | ||||
emit pointsAdded(start, end); | ||||
else if (start <= m_mapX || start <= m_mapY) | ||||
emit reinitialized(); | ||||
} | ||||
void QXYSeriesPrivate::modelRowsRemoved(QModelIndex parent, int start, int end) | ||||
{ | ||||
Q_UNUSED(parent); | ||||
if (m_mapOrientation == Qt::Vertical) | ||||
emit pointsRemoved(start, end); | ||||
else if (start <= m_mapX || start <= m_mapY) | ||||
emit reinitialized(); | ||||
} | ||||
void QXYSeriesPrivate::modelColumnsAdded(QModelIndex parent, int start, int end) | ||||
Marek Rosa
|
r1054 | { | ||
Q_UNUSED(parent); | ||||
Marek Rosa
|
r1085 | if (m_mapOrientation == Qt::Horizontal) | ||
emit pointsAdded(start, end); | ||||
else if (start <= m_mapX || start <= m_mapY) | ||||
emit reinitialized(); | ||||
Marek Rosa
|
r1054 | } | ||
Marek Rosa
|
r1085 | void QXYSeriesPrivate::modelColumnsRemoved(QModelIndex parent, int start, int end) | ||
Marek Rosa
|
r1054 | { | ||
Q_UNUSED(parent); | ||||
Marek Rosa
|
r1085 | if (m_mapOrientation == Qt::Horizontal) | ||
emit pointsRemoved(start, end); | ||||
else if (start <= m_mapX || start <= m_mapY) | ||||
emit reinitialized(); | ||||
Marek Rosa
|
r1054 | } | ||
Michal Klocek
|
r466 | #include "moc_qxyseries.cpp" | ||
Michal Klocek
|
r938 | #include "moc_qxyseries_p.cpp" | ||
Michal Klocek
|
r466 | |||
QTCOMMERCIALCHART_END_NAMESPACE | ||||