summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/custominput/scatterdatamodifier.cpp2
-rw-r--r--examples/scatter/scatterdatamodifier.cpp2
-rw-r--r--src/datavisualization/data/qabstract3dseries.cpp21
-rw-r--r--src/datavisualization/data/qabstract3dseries.h6
-rw-r--r--src/datavisualization/data/qabstract3dseries_p.h6
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp3
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp8
-rw-r--r--src/datavisualization/engine/abstract3drenderer_p.h1
-rw-r--r--src/datavisualization/engine/bars3drenderer.cpp9
-rw-r--r--src/datavisualization/engine/q3dobject.cpp4
-rw-r--r--src/datavisualization/engine/q3dscene.cpp27
-rw-r--r--src/datavisualization/engine/q3dscene.h1
-rw-r--r--src/datavisualization/engine/q3dscene_p.h1
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp7
-rw-r--r--src/datavisualization/engine/seriesrendercache.cpp5
-rw-r--r--src/datavisualization/engine/seriesrendercache_p.h3
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp12
-rw-r--r--tests/barstest/chart.cpp10
-rw-r--r--tests/scattertest/main.cpp6
-rw-r--r--tests/scattertest/scatterchart.cpp9
-rw-r--r--tests/scattertest/scatterchart.h1
-rw-r--r--tests/surfacetest/graphmodifier.cpp11
22 files changed, 135 insertions, 20 deletions
diff --git a/examples/custominput/scatterdatamodifier.cpp b/examples/custominput/scatterdatamodifier.cpp
index 3e372dec..2729316b 100644
--- a/examples/custominput/scatterdatamodifier.cpp
+++ b/examples/custominput/scatterdatamodifier.cpp
@@ -45,7 +45,7 @@ ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter)
m_graph->axisZ()->setRange(-5.0f, 5.0f);
QScatter3DSeries *series = new QScatter3DSeries;
- series->setItemLabelFormat("@xLabel, @yLabel, @zLabel");
+ series->setItemLabelFormat(QStringLiteral("@xLabel, @yLabel, @zLabel"));
series->setMesh(QAbstract3DSeries::MeshCube);
series->setItemSize(0.15f);
m_graph->addSeries(series);
diff --git a/examples/scatter/scatterdatamodifier.cpp b/examples/scatter/scatterdatamodifier.cpp
index bbc1e588..15bbbb94 100644
--- a/examples/scatter/scatterdatamodifier.cpp
+++ b/examples/scatter/scatterdatamodifier.cpp
@@ -56,7 +56,7 @@ ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter)
//! [2]
QScatterDataProxy *proxy = new QScatterDataProxy;
QScatter3DSeries *series = new QScatter3DSeries(proxy);
- series->setItemLabelFormat("@xTitle: @xLabel @yTitle: @yLabel @zTitle: @zLabel");
+ series->setItemLabelFormat(QStringLiteral("@xTitle: @xLabel @yTitle: @yLabel @zTitle: @zLabel"));
series->setMeshSmooth(m_smooth);
m_graph->addSeries(series);
//! [2]
diff --git a/src/datavisualization/data/qabstract3dseries.cpp b/src/datavisualization/data/qabstract3dseries.cpp
index 81a2f1b8..1aa4a46d 100644
--- a/src/datavisualization/data/qabstract3dseries.cpp
+++ b/src/datavisualization/data/qabstract3dseries.cpp
@@ -488,6 +488,19 @@ QLinearGradient QAbstract3DSeries::multiHighlightGradient() const
return d_ptr->m_multiHighlightGradient;
}
+void QAbstract3DSeries::setName(const QString &name)
+{
+ if (d_ptr->m_name != name) {
+ d_ptr->setName(name);
+ emit nameChanged(name);
+ }
+}
+
+QString QAbstract3DSeries::name() const
+{
+ return d_ptr->m_name;
+}
+
// QAbstract3DSeriesPrivate
QAbstract3DSeriesPrivate::QAbstract3DSeriesPrivate(QAbstract3DSeries *q, QAbstract3DSeries::SeriesType type)
@@ -629,6 +642,14 @@ void QAbstract3DSeriesPrivate::setMultiHighlightGradient(const QLinearGradient &
m_controller->markSeriesVisualsDirty();
}
+void QAbstract3DSeriesPrivate::setName(const QString &name)
+{
+ m_name = name;
+ m_changeTracker.nameChanged = true;
+ if (m_controller)
+ m_controller->markSeriesVisualsDirty();
+}
+
void QAbstract3DSeriesPrivate::resetToTheme(const Q3DTheme &theme, int seriesIndex, bool force)
{
int themeIndex = seriesIndex;
diff --git a/src/datavisualization/data/qabstract3dseries.h b/src/datavisualization/data/qabstract3dseries.h
index b03b574d..bbcf60ad 100644
--- a/src/datavisualization/data/qabstract3dseries.h
+++ b/src/datavisualization/data/qabstract3dseries.h
@@ -47,6 +47,7 @@ class QT_DATAVISUALIZATION_EXPORT QAbstract3DSeries : public QObject
Q_PROPERTY(QLinearGradient singleHighlightGradient READ singleHighlightGradient WRITE setSingleHighlightGradient NOTIFY singleHighlightGradientChanged)
Q_PROPERTY(QColor multiHighlightColor READ multiHighlightColor WRITE setMultiHighlightColor NOTIFY multiHighlightColorChanged)
Q_PROPERTY(QLinearGradient multiHighlightGradient READ multiHighlightGradient WRITE setMultiHighlightGradient NOTIFY multiHighlightGradientChanged)
+ Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
public:
enum SeriesType {
@@ -109,6 +110,9 @@ public:
void setMultiHighlightGradient(const QLinearGradient &gradient);
QLinearGradient multiHighlightGradient() const;
+ void setName(const QString &name);
+ QString name() const;
+
signals:
void itemLabelFormatChanged(QString format);
void visibilityChanged(bool visible);
@@ -122,6 +126,7 @@ signals:
void singleHighlightGradientChanged(QLinearGradient gradient);
void multiHighlightColorChanged(QColor color);
void multiHighlightGradientChanged(QLinearGradient gradient);
+ void nameChanged(QString name);
protected:
QScopedPointer<QAbstract3DSeriesPrivate> d_ptr;
@@ -135,6 +140,7 @@ private:
friend class Scatter3DController;
friend class QBar3DSeries;
friend class SeriesRenderCache;
+ friend class Abstract3DRenderer;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qabstract3dseries_p.h b/src/datavisualization/data/qabstract3dseries_p.h
index 7b2ea2e6..8e83ff84 100644
--- a/src/datavisualization/data/qabstract3dseries_p.h
+++ b/src/datavisualization/data/qabstract3dseries_p.h
@@ -50,6 +50,7 @@ struct QAbstract3DSeriesChangeBitField {
bool singleHighlightGradientChanged : 1;
bool multiHighlightColorChanged : 1;
bool multiHighlightGradientChanged : 1;
+ bool nameChanged : 1;
QAbstract3DSeriesChangeBitField()
: itemLabelFormatChanged(true),
@@ -62,7 +63,8 @@ struct QAbstract3DSeriesChangeBitField {
singleHighlightColorChanged(true),
singleHighlightGradientChanged(true),
multiHighlightColorChanged(true),
- multiHighlightGradientChanged(true)
+ multiHighlightGradientChanged(true),
+ nameChanged(true)
{
}
};
@@ -113,6 +115,7 @@ public:
void setSingleHighlightGradient(const QLinearGradient &gradient);
void setMultiHighlightColor(const QColor &color);
void setMultiHighlightGradient(const QLinearGradient &gradient);
+ void setName(const QString &name);
void resetToTheme(const Q3DTheme &theme, int seriesIndex, bool force);
@@ -136,6 +139,7 @@ public:
QColor m_multiHighlightColor;
QLinearGradient m_multiHighlightGradient;
+ QString m_name;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index 14585679..919db22c 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -136,7 +136,8 @@ void Abstract3DController::synchDataToRenderer()
if (!m_renderer)
return;
- m_renderer->updateScene(m_scene);
+ if (m_scene->d_ptr->m_sceneDirty)
+ m_renderer->updateScene(m_scene);
m_renderer->updateTheme(m_themeManager->activeTheme());
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index 19b9a8c8..e812496c 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -354,8 +354,14 @@ void Abstract3DRenderer::updateSeries(const QList<QAbstract3DSeries *> &seriesLi
visibleCount = 0;
}
foreach (QAbstract3DSeries *current, seriesList) {
- if (current->isVisible())
+ if (current->isVisible()) {
+ // Item selection label may need update
+ if (current->d_ptr->m_changeTracker.nameChanged
+ || current->d_ptr->m_changeTracker.itemLabelFormatChanged) {
+ m_selectionLabelDirty = true;
+ }
m_visibleSeriesList[visibleCount++].populate(current, this);
+ }
}
}
diff --git a/src/datavisualization/engine/abstract3drenderer_p.h b/src/datavisualization/engine/abstract3drenderer_p.h
index 068ee0ef..c375b0b8 100644
--- a/src/datavisualization/engine/abstract3drenderer_p.h
+++ b/src/datavisualization/engine/abstract3drenderer_p.h
@@ -137,6 +137,7 @@ protected:
QRect m_primarySubViewport;
QRect m_secondarySubViewport;
float m_devicePixelRatio;
+ bool m_selectionLabelDirty;
#ifdef DISPLAY_RENDER_SPEED
bool m_isFirstFrame;
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp
index 0a477d53..66a18e17 100644
--- a/src/datavisualization/engine/bars3drenderer.cpp
+++ b/src/datavisualization/engine/bars3drenderer.cpp
@@ -1756,9 +1756,10 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
glDisable(GL_DEPTH_TEST);
// Draw the selection label
LabelItem &labelItem = selectedBar->selectionLabelItem();
- if (m_selectedBar != selectedBar || m_updateLabels || !labelItem.textureId()) {
+ if (m_selectedBar != selectedBar || m_updateLabels || !labelItem.textureId()
+ || m_selectionLabelDirty) {
QString labelText = selectedBar->selectionLabel();
- if (labelText.isNull()) {
+ if (labelText.isNull() || m_selectionLabelDirty) {
static const QString rowIndexTag(QStringLiteral("@rowIdx"));
static const QString rowLabelTag(QStringLiteral("@rowLabel"));
static const QString rowTitleTag(QStringLiteral("@rowTitle"));
@@ -1767,6 +1768,7 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
static const QString colTitleTag(QStringLiteral("@colTitle"));
static const QString valueTitleTag(QStringLiteral("@valueTitle"));
static const QString valueLabelTag(QStringLiteral("@valueLabel"));
+ static const QString seriesNameTag(QStringLiteral("@seriesName"));
// Custom format expects printf format specifier. There is no tag for it.
labelText = generateValueLabel(
@@ -1797,7 +1799,10 @@ void Bars3DRenderer::drawScene(GLuint defaultFboHandle)
labelText.replace(valueLabelTag, valueLabelText);
}
+ labelText.replace(seriesNameTag, m_visibleSeriesList[m_visualSelectedBarSeriesIndex].name());
+
selectedBar->setSelectionLabel(labelText);
+ m_selectionLabelDirty = false;
}
m_drawer->generateLabelItem(labelItem, labelText);
m_selectedBar = selectedBar;
diff --git a/src/datavisualization/engine/q3dobject.cpp b/src/datavisualization/engine/q3dobject.cpp
index c4098fd0..89a682e1 100644
--- a/src/datavisualization/engine/q3dobject.cpp
+++ b/src/datavisualization/engine/q3dobject.cpp
@@ -18,7 +18,7 @@
#include "q3dobject.h"
#include "q3dobject_p.h"
-#include "q3dscene.h"
+#include "q3dscene_p.h"
QT_DATAVISUALIZATION_BEGIN_NAMESPACE
@@ -97,6 +97,8 @@ void Q3DObject::setPosition(const QVector3D &position)
void Q3DObject::setDirty(bool dirty)
{
d_ptr->m_isDirty = dirty;
+ if (parentScene())
+ parentScene()->d_ptr->m_sceneDirty = true;
}
/*!
diff --git a/src/datavisualization/engine/q3dscene.cpp b/src/datavisualization/engine/q3dscene.cpp
index ce037b55..6fbfac51 100644
--- a/src/datavisualization/engine/q3dscene.cpp
+++ b/src/datavisualization/engine/q3dscene.cpp
@@ -185,6 +185,8 @@ void Q3DScene::setPrimarySubViewport(const QRect &primarySubViewport)
d_ptr->m_primarySubViewport = intersectedViewport;
d_ptr->updateGLSubViewports();
d_ptr->m_changeTracker.primarySubViewportChanged = true;
+ d_ptr->m_sceneDirty = true;
+
emit primarySubViewportChanged(intersectedViewport);
emit d_ptr->needRender();
}
@@ -247,6 +249,8 @@ void Q3DScene::setSecondarySubViewport(const QRect &secondarySubViewport)
d_ptr->m_secondarySubViewport = intersectedViewport;
d_ptr->updateGLSubViewports();
d_ptr->m_changeTracker.secondarySubViewportChanged = true;
+ d_ptr->m_sceneDirty = true;
+
emit secondarySubViewportChanged(intersectedViewport);
emit d_ptr->needRender();
}
@@ -265,6 +269,8 @@ void Q3DScene::setSelectionQueryPosition(const QPoint &point)
if (point != d_ptr->m_selectionQueryPosition) {
d_ptr->m_selectionQueryPosition = point;
d_ptr->m_changeTracker.selectionQueryPositionChanged = true;
+ d_ptr->m_sceneDirty = true;
+
emit selectionQueryPositionChanged(point);
emit d_ptr->needRender();
}
@@ -300,6 +306,8 @@ void Q3DScene::setSlicingActive(bool isSlicing)
if (d_ptr->m_isSlicingActive != isSlicing) {
d_ptr->m_isSlicingActive = isSlicing;
d_ptr->m_changeTracker.slicingActivatedChanged = true;
+ d_ptr->m_sceneDirty = true;
+
d_ptr->calculateSubViewports();
emit slicingActiveChanged(isSlicing);
emit d_ptr->needRender();
@@ -322,6 +330,8 @@ void Q3DScene::setSecondarySubviewOnTop(bool isSecondaryOnTop)
if (d_ptr->m_isSecondarySubviewOnTop != isSecondaryOnTop) {
d_ptr->m_isSecondarySubviewOnTop = isSecondaryOnTop;
d_ptr->m_changeTracker.subViewportOrderChanged = true;
+ d_ptr->m_sceneDirty = true;
+
emit secondarySubviewOnTopChanged(isSecondaryOnTop);
emit d_ptr->needRender();
}
@@ -359,6 +369,8 @@ void Q3DScene::setActiveCamera(Q3DCamera *camera)
d_ptr->m_camera = camera;
d_ptr->m_changeTracker.cameraChanged = true;
+ d_ptr->m_sceneDirty = true;
+
if (camera) {
connect(camera, &Q3DCamera::xRotationChanged, d_ptr.data(),
@@ -397,6 +409,8 @@ void Q3DScene::setActiveLight(Q3DLight *light)
if (light != d_ptr->m_light) {
d_ptr->m_light = light;
d_ptr->m_changeTracker.lightChanged = true;
+ d_ptr->m_sceneDirty = true;
+
emit activeLightChanged(light);
}
}
@@ -417,6 +431,8 @@ void Q3DScene::setDevicePixelRatio(float pixelRatio)
if (d_ptr->m_devicePixelRatio != pixelRatio) {
d_ptr->m_devicePixelRatio = pixelRatio;
d_ptr->m_changeTracker.devicePixelRatioChanged = true;
+ d_ptr->m_sceneDirty = true;
+
emit devicePixelRatioChanged(pixelRatio);
d_ptr->updateGLViewport();
emit d_ptr->needRender();
@@ -518,6 +534,9 @@ void Q3DScenePrivate::sync(Q3DScenePrivate &other)
m_changeTracker.devicePixelRatioChanged = false;
other.m_changeTracker.devicePixelRatioChanged = false;
}
+
+ m_sceneDirty = false;
+ other.m_sceneDirty = false;
}
void Q3DScenePrivate::setViewport(const QRect &viewport)
@@ -553,6 +572,7 @@ void Q3DScenePrivate::setWindowSize(const QSize &size)
m_windowSize = size;
updateGLViewport();
m_changeTracker.windowSizeChanged = true;
+ m_sceneDirty = true;
emit needRender();
}
}
@@ -568,9 +588,9 @@ void Q3DScenePrivate::calculateSubViewports()
const float smallerViewPortRatio = 0.2f;
if (m_isSlicingActive) {
q_ptr->setPrimarySubViewport(QRect(0,
- 0,
- m_viewport.width() * smallerViewPortRatio,
- m_viewport.height() * smallerViewPortRatio));
+ 0,
+ m_viewport.width() * smallerViewPortRatio,
+ m_viewport.height() * smallerViewPortRatio));
q_ptr->setSecondarySubViewport(QRect(0, 0, m_viewport.width(), m_viewport.height()));
} else {
q_ptr->setPrimarySubViewport(QRect(0, 0, m_viewport.width(), m_viewport.height()));
@@ -589,6 +609,7 @@ void Q3DScenePrivate::updateGLViewport()
m_glViewport.setHeight(m_viewport.height() * m_devicePixelRatio);
m_changeTracker.viewportChanged = true;
+ m_sceneDirty = true;
// Do default subviewport changes first, then allow signal listeners to override.
updateGLSubViewports();
diff --git a/src/datavisualization/engine/q3dscene.h b/src/datavisualization/engine/q3dscene.h
index f57d3351..fb543cdb 100644
--- a/src/datavisualization/engine/q3dscene.h
+++ b/src/datavisualization/engine/q3dscene.h
@@ -104,6 +104,7 @@ private:
friend class Surface3DRenderer;
friend class Scatter3DRenderer;
friend class Q3DCameraPrivate;
+ friend class Q3DObject;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/engine/q3dscene_p.h b/src/datavisualization/engine/q3dscene_p.h
index c9d9d1f6..94265568 100644
--- a/src/datavisualization/engine/q3dscene_p.h
+++ b/src/datavisualization/engine/q3dscene_p.h
@@ -107,6 +107,7 @@ public:
QRect m_glViewport;
QRect m_glPrimarySubViewport;
QRect m_glSecondarySubViewport;
+ bool m_sceneDirty;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index 9973069b..3eee8ff0 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -1471,15 +1471,16 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
// Draw the selection label
LabelItem &labelItem = selectedItem->selectionLabelItem();
if (m_selectedItem != selectedItem || m_updateLabels
- || !labelItem.textureId()) {
+ || !labelItem.textureId() || m_selectionLabelDirty) {
QString labelText = selectedItem->selectionLabel();
- if (labelText.isNull()) {
+ if (labelText.isNull() || m_selectionLabelDirty) {
static const QString xTitleTag(QStringLiteral("@xTitle"));
static const QString yTitleTag(QStringLiteral("@yTitle"));
static const QString zTitleTag(QStringLiteral("@zTitle"));
static const QString xLabelTag(QStringLiteral("@xLabel"));
static const QString yLabelTag(QStringLiteral("@yLabel"));
static const QString zLabelTag(QStringLiteral("@zLabel"));
+ static const QString seriesNameTag(QStringLiteral("@seriesName"));
labelText = m_visibleSeriesList[m_selectedItemSeriesIndex].itemLabelFormat();
@@ -1511,8 +1512,10 @@ void Scatter3DRenderer::drawScene(const GLuint defaultFboHandle)
selectedItem->position().z());
labelText.replace(zLabelTag, valueLabelText);
}
+ labelText.replace(seriesNameTag, m_visibleSeriesList[m_selectedItemSeriesIndex].name());
selectedItem->setSelectionLabel(labelText);
+ m_selectionLabelDirty = false;
}
m_drawer->generateLabelItem(labelItem, labelText);
m_selectedItem = selectedItem;
diff --git a/src/datavisualization/engine/seriesrendercache.cpp b/src/datavisualization/engine/seriesrendercache.cpp
index 7526ac03..cea0f7b1 100644
--- a/src/datavisualization/engine/seriesrendercache.cpp
+++ b/src/datavisualization/engine/seriesrendercache.cpp
@@ -164,6 +164,11 @@ void SeriesRenderCache::populate(QAbstract3DSeries *series, Abstract3DRenderer *
renderer->fixGradientAndGenerateTexture(&gradient, &m_multiHighlightGradientTexture);
changeTracker.multiHighlightGradientChanged = false;
}
+
+ if (seriesChanged || changeTracker.nameChanged) {
+ m_name = series->name();
+ changeTracker.nameChanged = false;
+ }
}
void SeriesRenderCache::cleanup(TextureHelper *texHelper)
diff --git a/src/datavisualization/engine/seriesrendercache_p.h b/src/datavisualization/engine/seriesrendercache_p.h
index 906a6c0d..2bf7a1cc 100644
--- a/src/datavisualization/engine/seriesrendercache_p.h
+++ b/src/datavisualization/engine/seriesrendercache_p.h
@@ -61,6 +61,7 @@ public:
inline const GLuint &singleHighlightGradientTexture() const { return m_singleHighlightGradientTexture; }
inline const QVector3D &multiHighlightColor() const { return m_multiHighlightColor; }
inline const GLuint &multiHighlightGradientTexture() const { return m_multiHighlightGradientTexture; }
+ inline const QString &name() const { return m_name; }
protected:
QAbstract3DSeries *m_series;
@@ -75,6 +76,8 @@ protected:
GLuint m_singleHighlightGradientTexture;
QVector3D m_multiHighlightColor;
GLuint m_multiHighlightGradientTexture;
+
+ QString m_name;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index b08558b2..f89233be 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -538,8 +538,8 @@ void Surface3DRenderer::updateScene(Q3DScene *scene)
Abstract3DRenderer::updateScene(scene);
- if (m_selectionPointer) {
- m_selectionPointer->updateScene(m_cachedScene);
+ if (m_selectionPointer && m_selectionActive
+ && m_cachedSelectionMode.testFlag(QDataVis::SelectionItem)) {
m_selectionDirty = true; // Ball may need repositioning if scene changes
}
@@ -1692,7 +1692,7 @@ void Surface3DRenderer::drawScene(GLuint defaultFboHandle)
glUseProgram(0);
// Selection handling
- if (m_selectionDirty) {
+ if (m_selectionDirty || m_selectionLabelDirty) {
QPoint visiblePoint = Surface3DController::invalidSelectionPosition();
if (m_selectedPoint != Surface3DController::invalidSelectionPosition()) {
int x = m_selectedPoint.x() - m_sampleSpace.y();
@@ -1956,6 +1956,7 @@ QString Surface3DRenderer::createSelectionLabel(float value, int column, int row
static const QString xLabelTag(QStringLiteral("@xLabel"));
static const QString yLabelTag(QStringLiteral("@yLabel"));
static const QString zLabelTag(QStringLiteral("@zLabel"));
+ static const QString seriesNameTag(QStringLiteral("@seriesName"));
labelText.replace(xTitleTag, m_axisCacheX.title());
labelText.replace(yTitleTag, m_axisCacheY.title());
@@ -1985,6 +1986,11 @@ QString Surface3DRenderer::createSelectionLabel(float value, int column, int row
labelText.replace(zLabelTag, valueLabelText);
}
+ // TODO: Get from correct series once multiple series supported
+ labelText.replace(seriesNameTag, m_visibleSeriesList[0].name());
+
+ m_selectionLabelDirty = false;
+
return labelText;
}
diff --git a/tests/barstest/chart.cpp b/tests/barstest/chart.cpp
index 4048e807..c83a9389 100644
--- a/tests/barstest/chart.cpp
+++ b/tests/barstest/chart.cpp
@@ -121,9 +121,13 @@ GraphModifier::GraphModifier(Q3DBars *barchart, QColorDialog *colorDialog)
m_graph->setActiveTheme(m_builtinTheme);
m_graph->setShadowQuality(QDataVis::ShadowQualitySoftMedium);
- m_temperatureData->setItemLabelFormat(QStringLiteral("1: @valueTitle for @colLabel @rowLabel: @valueLabel"));
- m_temperatureData2->setItemLabelFormat(QStringLiteral("2: @valueTitle for @colLabel @rowLabel: @valueLabel"));
- m_genericData->setItemLabelFormat(QStringLiteral("3: @valueTitle for (@rowIdx, @colIdx): @valueLabel"));
+ m_temperatureData->setName("Oulu");
+ m_temperatureData2->setName("Helsinki");
+ m_genericData->setName("Generic series");
+
+ m_temperatureData->setItemLabelFormat(QStringLiteral("@seriesName: @valueTitle for @colLabel @rowLabel: @valueLabel"));
+ m_temperatureData2->setItemLabelFormat(QStringLiteral("@seriesName: @valueTitle for @colLabel @rowLabel: @valueLabel"));
+ m_genericData->setItemLabelFormat(QStringLiteral("@seriesName: @valueTitle for (@rowIdx, @colIdx): @valueLabel"));
m_genericData->dataProxy()->setColumnLabels(genericColumnLabels);
m_temperatureData->setBaseColor(Qt::red);
diff --git a/tests/scattertest/main.cpp b/tests/scattertest/main.cpp
index d4a6c108..92c8d526 100644
--- a/tests/scattertest/main.cpp
+++ b/tests/scattertest/main.cpp
@@ -109,6 +109,9 @@ int main(int argc, char **argv)
QPushButton *toggleSeriesVisibilityButton = new QPushButton(widget);
toggleSeriesVisibilityButton->setText(QStringLiteral("Toggle visibility"));
+ QPushButton *changeSeriesNameButton = new QPushButton(widget);
+ changeSeriesNameButton->setText(QStringLiteral("Series name"));
+
QPushButton *startTimerButton = new QPushButton(widget);
startTimerButton->setText(QStringLiteral("Start/stop timer"));
@@ -176,6 +179,7 @@ int main(int argc, char **argv)
vLayout->addWidget(addSeriesButton, 0, Qt::AlignTop);
vLayout->addWidget(removeSeriesButton, 0, Qt::AlignTop);
vLayout->addWidget(toggleSeriesVisibilityButton, 0, Qt::AlignTop);
+ vLayout->addWidget(changeSeriesNameButton, 0, Qt::AlignTop);
vLayout->addWidget(startTimerButton, 0, Qt::AlignTop);
vLayout->addWidget(gradientBtoYPB, 0, Qt::AlignTop);
vLayout->addWidget(backgroundCheckBox);
@@ -230,6 +234,8 @@ int main(int argc, char **argv)
&ScatterDataModifier::removeSeries);
QObject::connect(toggleSeriesVisibilityButton, &QPushButton::clicked, modifier,
&ScatterDataModifier::toggleSeriesVisibility);
+ QObject::connect(changeSeriesNameButton, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::changeSeriesName);
QObject::connect(startTimerButton, &QPushButton::clicked, modifier,
&ScatterDataModifier::startStopTimer);
QObject::connect(gradientBtoYPB, &QPushButton::clicked, modifier,
diff --git a/tests/scattertest/scatterchart.cpp b/tests/scattertest/scatterchart.cpp
index 58f5b355..9482ee18 100644
--- a/tests/scattertest/scatterchart.cpp
+++ b/tests/scattertest/scatterchart.cpp
@@ -476,6 +476,12 @@ void ScatterDataModifier::toggleSeriesVisibility()
m_targetSeries->setVisible(!m_targetSeries->isVisible());
}
+void ScatterDataModifier::changeSeriesName()
+{
+ if (m_targetSeries)
+ m_targetSeries->setName(m_targetSeries->name().append("-").append(QString::number(qrand() % 10)));
+}
+
void ScatterDataModifier::handleAxisXChanged(QValue3DAxis *axis)
{
qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_chart->axisX());
@@ -526,7 +532,8 @@ QScatter3DSeries *ScatterDataModifier::createAndAddSeries()
m_targetSeries = series;
m_chart->addSeries(series);
- series->setItemLabelFormat(QString("%1: @xLabel - @yLabel - @zLabel").arg(counter++));
+ series->setName(QString("Series %1").arg(counter++));
+ series->setItemLabelFormat(QStringLiteral("@seriesName: @xLabel - @yLabel - @zLabel"));
series->setMesh(QAbstract3DSeries::MeshSphere);
series->setMeshSmooth(true);
series->setBaseColor(QColor(rand() % 256, rand() % 256, rand() % 256));
diff --git a/tests/scattertest/scatterchart.h b/tests/scattertest/scatterchart.h
index 7906eac0..ce6c2073 100644
--- a/tests/scattertest/scatterchart.h
+++ b/tests/scattertest/scatterchart.h
@@ -68,6 +68,7 @@ public slots:
void addSeries();
void removeSeries();
void toggleSeriesVisibility();
+ void changeSeriesName();
void handleAxisXChanged(QValue3DAxis *axis);
void handleAxisYChanged(QValue3DAxis *axis);
diff --git a/tests/surfacetest/graphmodifier.cpp b/tests/surfacetest/graphmodifier.cpp
index 58aee4cd..1c177219 100644
--- a/tests/surfacetest/graphmodifier.cpp
+++ b/tests/surfacetest/graphmodifier.cpp
@@ -61,8 +61,11 @@ GraphModifier::GraphModifier(Q3DSurface *graph)
m_graph->axisX()->setRange(m_minX, m_minX + m_rangeX);
m_graph->axisZ()->setRange(m_minZ, m_minZ + m_rangeZ);
m_graph->addSeries(m_theSeries);
+
changeStyle();
+ m_theSeries->setItemLabelFormat(QStringLiteral("@seriesName: (@xLabel, @zLabel): @yLabel"));
+
connect(&m_timer, &QTimer::timeout, this, &GraphModifier::timeout);
connect(m_theSeries, &QSurface3DSeries::selectedPointChanged, this, &GraphModifier::selectedPointChanged);
@@ -144,6 +147,8 @@ void GraphModifier::toggleSqrtSin(bool enable)
m_graph->axisX()->setLabelFormat("%.2f");
m_graph->axisZ()->setLabelFormat("%.2f");
+ m_theSeries->setName("Sqrt & Sin");
+
resetArrayAndSliders(dataArray, minZ, maxZ, minX, maxX);
m_activeSample = GraphModifier::SqrtSin;
@@ -196,6 +201,8 @@ void GraphModifier::togglePlane(bool enable)
*m_planeArray << newRow;
}
+ m_theSeries->setName("Wonky Plane");
+
resetArrayAndSliders(m_planeArray, minZ, maxZ + add, minX, m_xCount * maxStepX + minX);
#else
for (float i = 0; i < m_zCount; i++) {
@@ -216,6 +223,8 @@ void GraphModifier::togglePlane(bool enable)
*m_planeArray << newRow;
}
+ m_theSeries->setName("Plane");
+
resetArrayAndSliders(m_planeArray, minZ, maxZ, minX, maxX);
#endif
@@ -260,6 +269,8 @@ void GraphModifier::setHeightMapData(bool enable)
m_graph->axisX()->setLabelFormat("%.1f N");
m_graph->axisZ()->setLabelFormat("%.1f E");
+ m_theSeries->setName("Height Map");
+
resetArrayAndSliders(dataArray, minZ, maxZ, minX, maxX);
m_activeSample = GraphModifier::Map;