From 2d31d2416643598b15664c766326f18c5b698c79 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 14 Jan 2014 10:08:28 +0200 Subject: Add series name property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit +Don't call updateScene for every render cycle +Fixed item label update when format or name changes +Misc cosmetic fixes Task-number: QTRD-2736 Task-number: QTRD-2571 Change-Id: I43aa6b8e3202b09529b17a22bb24d05fcb545609 Reviewed-by: Tomi Korpipää --- examples/custominput/scatterdatamodifier.cpp | 2 +- examples/scatter/scatterdatamodifier.cpp | 2 +- src/datavisualization/data/qabstract3dseries.cpp | 21 +++++++++++++++++ src/datavisualization/data/qabstract3dseries.h | 6 +++++ src/datavisualization/data/qabstract3dseries_p.h | 6 ++++- .../engine/abstract3dcontroller.cpp | 3 ++- .../engine/abstract3drenderer.cpp | 8 ++++++- .../engine/abstract3drenderer_p.h | 1 + src/datavisualization/engine/bars3drenderer.cpp | 9 ++++++-- src/datavisualization/engine/q3dobject.cpp | 4 +++- src/datavisualization/engine/q3dscene.cpp | 27 +++++++++++++++++++--- src/datavisualization/engine/q3dscene.h | 1 + src/datavisualization/engine/q3dscene_p.h | 1 + src/datavisualization/engine/scatter3drenderer.cpp | 7 ++++-- src/datavisualization/engine/seriesrendercache.cpp | 5 ++++ src/datavisualization/engine/seriesrendercache_p.h | 3 +++ src/datavisualization/engine/surface3drenderer.cpp | 12 +++++++--- tests/barstest/chart.cpp | 10 +++++--- tests/scattertest/main.cpp | 6 +++++ tests/scattertest/scatterchart.cpp | 9 +++++++- tests/scattertest/scatterchart.h | 1 + tests/surfacetest/graphmodifier.cpp | 11 +++++++++ 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 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 &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; -- cgit v1.2.3