summaryrefslogtreecommitdiffstats
path: root/src/charts/xychart
diff options
context:
space:
mode:
Diffstat (limited to 'src/charts/xychart')
-rw-r--r--src/charts/xychart/glxyseriesdata.cpp15
-rw-r--r--src/charts/xychart/glxyseriesdata_p.h3
-rw-r--r--src/charts/xychart/qvxymodelmapper.cpp2
-rw-r--r--src/charts/xychart/qxymodelmapper.cpp29
-rw-r--r--src/charts/xychart/xychart.cpp6
-rw-r--r--src/charts/xychart/xychart_p.h1
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();