diff options
Diffstat (limited to 'src/charts/xychart')
-rw-r--r-- | src/charts/xychart/glxyseriesdata.cpp | 15 | ||||
-rw-r--r-- | src/charts/xychart/glxyseriesdata_p.h | 3 | ||||
-rw-r--r-- | src/charts/xychart/qvxymodelmapper.cpp | 2 | ||||
-rw-r--r-- | src/charts/xychart/qxymodelmapper.cpp | 29 | ||||
-rw-r--r-- | src/charts/xychart/xychart.cpp | 6 | ||||
-rw-r--r-- | src/charts/xychart/xychart_p.h | 1 |
6 files changed, 47 insertions, 9 deletions
diff --git a/src/charts/xychart/glxyseriesdata.cpp b/src/charts/xychart/glxyseriesdata.cpp index 37da55b1..9a6f330a 100644 --- a/src/charts/xychart/glxyseriesdata.cpp +++ b/src/charts/xychart/glxyseriesdata.cpp @@ -50,6 +50,7 @@ void GLXYSeriesDataManager::setPoints(QXYSeries *series, const AbstractDomain *d if (!data) { data = new GLXYSeriesData; data->type = series->type(); + data->visible = series->isVisible(); QColor sc; if (data->type == QAbstractSeries::SeriesTypeScatter) { QScatterSeries *scatter = static_cast<QScatterSeries *>(series); @@ -68,6 +69,8 @@ void GLXYSeriesDataManager::setPoints(QXYSeries *series, const AbstractDomain *d data->color = QVector3D(float(sc.redF()), float(sc.greenF()), float(sc.blueF())); connect(series, &QXYSeries::useOpenGLChanged, this, &GLXYSeriesDataManager::handleSeriesOpenGLChange); + connect(series, &QXYSeries::visibleChanged, this, + &GLXYSeriesDataManager::handleSeriesVisibilityChange); m_seriesDataMap.insert(series, data); m_mapDirty = true; } @@ -174,6 +177,18 @@ void GLXYSeriesDataManager::handleSeriesOpenGLChange() removeSeries(series); } +void GLXYSeriesDataManager::handleSeriesVisibilityChange() +{ + QXYSeries *series = qobject_cast<QXYSeries *>(sender()); + if (series) { + GLXYSeriesData *data = m_seriesDataMap.value(series); + if (data) { + data->visible = series->isVisible(); + data->dirty = true; + } + } +} + void GLXYSeriesDataManager::handleScatterColorChange() { QScatterSeries *series = qobject_cast<QScatterSeries *>(sender()); diff --git a/src/charts/xychart/glxyseriesdata_p.h b/src/charts/xychart/glxyseriesdata_p.h index 578ab217..4a22e575 100644 --- a/src/charts/xychart/glxyseriesdata_p.h +++ b/src/charts/xychart/glxyseriesdata_p.h @@ -58,6 +58,7 @@ struct GLXYSeriesData { QAbstractSeries::SeriesType type; QVector2D min; QVector2D delta; + bool visible; QMatrix4x4 matrix; public: GLXYSeriesData &operator=(const GLXYSeriesData &data) { @@ -68,6 +69,7 @@ public: type = data.type; min = data.min; delta = data.delta; + visible = data.visible; matrix = data.matrix; return *this; } @@ -103,6 +105,7 @@ public Q_SLOTS: void cleanup(); void handleSeriesPenChange(); void handleSeriesOpenGLChange(); + void handleSeriesVisibilityChange(); void handleScatterColorChange(); void handleScatterMarkerSizeChange(); diff --git a/src/charts/xychart/qvxymodelmapper.cpp b/src/charts/xychart/qvxymodelmapper.cpp index fb7f63ab..3b68d809 100644 --- a/src/charts/xychart/qvxymodelmapper.cpp +++ b/src/charts/xychart/qvxymodelmapper.cpp @@ -120,7 +120,7 @@ QT_CHARTS_BEGIN_NAMESPACE Minimal and default value is: -1 (count limited by the number of rows in the model) */ /*! - \qmlproperty int VXYModelMapper::columnCount + \qmlproperty int VXYModelMapper::rowCount Defines the number of rows of the model that are mapped as the data for series. The default value is -1 (count limited by the number of rows in the model). */ diff --git a/src/charts/xychart/qxymodelmapper.cpp b/src/charts/xychart/qxymodelmapper.cpp index b6037858..3b2ccd83 100644 --- a/src/charts/xychart/qxymodelmapper.cpp +++ b/src/charts/xychart/qxymodelmapper.cpp @@ -32,6 +32,7 @@ #include <QtCharts/QXYSeries> #include <QtCore/QAbstractItemModel> #include <QtCore/QDateTime> +#include <QtCore/QDebug> QT_CHARTS_BEGIN_NAMESPACE @@ -544,15 +545,27 @@ void QXYModelMapperPrivate::initializeXYFromModel() int pointPos = 0; QModelIndex xIndex = xModelIndex(pointPos); QModelIndex yIndex = yModelIndex(pointPos); - while (xIndex.isValid() && yIndex.isValid()) { - QPointF point; - point.setX(valueFromModel(xIndex)); - point.setY(valueFromModel(yIndex)); - m_series->append(point); - pointPos++; - xIndex = xModelIndex(pointPos); - yIndex = yModelIndex(pointPos); + + if (xIndex.isValid() && yIndex.isValid()) { + while (xIndex.isValid() && yIndex.isValid()) { + QPointF point; + point.setX(valueFromModel(xIndex)); + point.setY(valueFromModel(yIndex)); + m_series->append(point); + pointPos++; + xIndex = xModelIndex(pointPos); + yIndex = yModelIndex(pointPos); + // Don't warn about invalid index after the first, those are valid and used to + // determine when we should end looping. + } + } else { + // Invalid index right off the bat means series will be left empty, so output a warning + if (!xIndex.isValid()) + qWarning() << __FUNCTION__ << QStringLiteral("Invalid X coordinate index in model mapper."); + else if (!yIndex.isValid()) + qWarning() << __FUNCTION__ << QStringLiteral("Invalid Y coordinate index in model mapper."); } + blockSeriesSignals(false); } diff --git a/src/charts/xychart/xychart.cpp b/src/charts/xychart/xychart.cpp index 28553d55..7493ea43 100644 --- a/src/charts/xychart/xychart.cpp +++ b/src/charts/xychart/xychart.cpp @@ -126,6 +126,12 @@ void XYChart::updateGlChart() updateGeometry(); } +// Doesn't update gl geometry, but refreshes the chart +void XYChart::refreshGlChart() +{ + presenter()->updateGLWidget(); +} + //handlers void XYChart::handlePointAdded(int index) diff --git a/src/charts/xychart/xychart_p.h b/src/charts/xychart/xychart_p.h index c0348c18..c5737cca 100644 --- a/src/charts/xychart/xychart_p.h +++ b/src/charts/xychart/xychart_p.h @@ -88,6 +88,7 @@ Q_SIGNALS: protected: virtual void updateChart(QVector<QPointF> &oldPoints, QVector<QPointF> &newPoints, int index = -1); virtual void updateGlChart(); + virtual void refreshGlChart(); private: inline bool isEmpty(); |