summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-01-15 09:43:29 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-01-15 13:28:41 +0200
commitde93a42512e58c598427178373f0e3e59b04dec7 (patch)
tree92f5991aee835da5627e000a991c56f4c075f169
parent64d6b482bfb9dbacd548b72cb9c073513f6aa56f (diff)
Better control of series ordering and 'primary' series for bars
Task-number: QTRD-2578 Change-Id: Icbd945596334afb03d81f3b1d6a72399077455db Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
-rw-r--r--src/datavisualization/axis/qcategory3daxis.cpp10
-rw-r--r--src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc29
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp29
-rw-r--r--src/datavisualization/engine/abstract3dcontroller_p.h1
-rw-r--r--src/datavisualization/engine/bars3dcontroller.cpp94
-rw-r--r--src/datavisualization/engine/bars3dcontroller_p.h7
-rw-r--r--src/datavisualization/engine/q3dbars.cpp42
-rw-r--r--src/datavisualization/engine/q3dbars.h5
-rw-r--r--src/datavisualizationqml2/declarativebars.cpp18
-rw-r--r--src/datavisualizationqml2/declarativebars_p.h5
-rw-r--r--tests/barstest/chart.cpp229
-rw-r--r--tests/barstest/chart.h2
-rw-r--r--tests/barstest/main.cpp7
13 files changed, 433 insertions, 45 deletions
diff --git a/src/datavisualization/axis/qcategory3daxis.cpp b/src/datavisualization/axis/qcategory3daxis.cpp
index 0a0cc2e8..0dfe2e4a 100644
--- a/src/datavisualization/axis/qcategory3daxis.cpp
+++ b/src/datavisualization/axis/qcategory3daxis.cpp
@@ -53,10 +53,7 @@ namespace QtDataVisualization {
*
* Defines labels for axis applied to categories. If there are fewer labels than categories, the
* remaining ones do not have a label. If category labels are not defined explicitly, labels are
- * generated from the data row (or column) labels.
- *
- * \note If the graph has multiple visible series and category labels are not defined explicitly,
- * changing the rows (or columns) on any of the attached series will regenerate the labels.
+ * generated from the data row (or column) labels of the primary series of the graph.
*/
/*!
@@ -80,10 +77,7 @@ QCategory3DAxis::~QCategory3DAxis()
*
* Defines labels for axis applied to categories. If there are fewer labels than categories, the
* remaining ones do not have a label. If category labels are not defined explicitly, labels are
- * generated from the data row (or column) labels.
- *
- * \note If the graph has multiple visible series and category labels are not defined explicitly,
- * changing the rows (or columns) on any of the attached series will regenerate the labels.
+ * generated from the data row (or column) labels of the primary series of the graph.
*/
QStringList QCategory3DAxis::labels() const
{
diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc
index 7bd30867..d61b298a 100644
--- a/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc
+++ b/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc
@@ -87,7 +87,7 @@
*/
/*!
- * \qmlproperty list<QBar3DSeries> Bars3D::seriesList
+ * \qmlproperty list<Bar3DSeries> Bars3D::seriesList
* \default
* This property holds the series of the graph.
* By default, this property contains an empty list.
@@ -95,7 +95,20 @@
*/
/*!
- * \qmlmethod void Bars3D::addSeries(QBar3DSeries *series)
+ * \qmlproperty Bar3DSeries Bars3D::primarySeries
+ * Specifies the \a series that is the primary series of the graph. The primary series
+ * is used to determine the row and column axis labels when the labels are not explicitly
+ * set to the axes.
+ * If the specified \a series is not already added to the graph, setting it as the
+ * primary series will also implicitly add it to the graph.
+ * If the primary series itself is removed from the graph, this property
+ * resets to default.
+ * If \a series is null, this property resets to default.
+ * Defaults to the first added series or zero if no series are added to the graph.
+ */
+
+/*!
+ * \qmlmethod void Bars3D::addSeries(Bar3DSeries series)
* Adds the \a series to the graph. A graph can contain multiple series, but only one set of axes,
* so the rows and columns of all series must match for the visualized data to be meaningful.
* If the graph has multiple visible series, only the first one added will
@@ -105,6 +118,16 @@
*/
/*!
- * \qmlmethod void Bars3D::removeSeries(QBar3DSeries *series)
+ * \qmlmethod void Bars3D::removeSeries(Bar3DSeries series)
* Remove the \a series from the graph.
*/
+
+/*!
+ * \qmlmethod void Bars3D::insertSeries(int index, Bar3DSeries series)
+ * Inserts the \a series into the position \a index in the series list.
+ * If the \a series has already been added to the list, it is moved to the
+ * new \a index.
+ * \note When moving a series to a new \a index that is after its old index,
+ * the new position in list is calculated as if the series was still in its old
+ * index, so the final index is actually the \a index decremented by one.
+ */
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index 454ff7a4..82d60865 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -97,15 +97,30 @@ void Abstract3DController::setRenderer(Abstract3DRenderer *renderer)
void Abstract3DController::addSeries(QAbstract3DSeries *series)
{
- if (series && !m_seriesList.contains(series)) {
- int oldSize = m_seriesList.size();
- m_seriesList.append(series);
- series->d_ptr->setController(this);
- QObject::connect(series, &QAbstract3DSeries::visibilityChanged,
- this, &Abstract3DController::handleSeriesVisibilityChanged);
+ insertSeries(m_seriesList.size(), series);
+}
+
+void Abstract3DController::insertSeries(int index, QAbstract3DSeries *series)
+{
+ if (series) {
+ if (m_seriesList.contains(series)) {
+ int oldIndex = m_seriesList.indexOf(series);
+ if (index != oldIndex) {
+ m_seriesList.removeOne(series);
+ if (oldIndex < index)
+ index--;
+ m_seriesList.insert(index, series);
+ }
+ } else {
+ int oldSize = m_seriesList.size();
+ m_seriesList.insert(index, series);
+ series->d_ptr->setController(this);
+ QObject::connect(series, &QAbstract3DSeries::visibilityChanged,
+ this, &Abstract3DController::handleSeriesVisibilityChanged);
+ series->d_ptr->resetToTheme(*m_themeManager->activeTheme(), oldSize, false);
+ }
if (series->isVisible())
handleSeriesVisibilityChangedBySender(series);
- series->d_ptr->resetToTheme(*m_themeManager->activeTheme(), oldSize, false);
}
}
diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h
index a68272d6..a11e80cd 100644
--- a/src/datavisualization/engine/abstract3dcontroller_p.h
+++ b/src/datavisualization/engine/abstract3dcontroller_p.h
@@ -170,6 +170,7 @@ public:
void setRenderer(Abstract3DRenderer *renderer);
virtual void addSeries(QAbstract3DSeries *series);
+ virtual void insertSeries(int index, QAbstract3DSeries *series);
virtual void removeSeries(QAbstract3DSeries *series);
QList<QAbstract3DSeries *> seriesList();
diff --git a/src/datavisualization/engine/bars3dcontroller.cpp b/src/datavisualization/engine/bars3dcontroller.cpp
index c9a9706c..986b9a0e 100644
--- a/src/datavisualization/engine/bars3dcontroller.cpp
+++ b/src/datavisualization/engine/bars3dcontroller.cpp
@@ -36,6 +36,7 @@ Bars3DController::Bars3DController(QRect boundRect, Q3DScene *scene)
: Abstract3DController(boundRect, scene),
m_selectedBar(invalidSelectionPosition()),
m_selectedBarSeries(0),
+ m_primarySeries(0),
m_isBarSpecRelative(true),
m_barThicknessRatio(1.0f),
m_barSpacing(QSizeF(1.0, 1.0)),
@@ -174,29 +175,28 @@ void Bars3DController::handleItemChanged(int rowIndex, int columnIndex)
void Bars3DController::handleDataRowLabelsChanged()
{
- QBar3DSeries *firstSeries = 0;
- if (m_seriesList.size())
- firstSeries = static_cast<QBar3DSeries *>(m_seriesList.at(0));
- if (m_axisZ && firstSeries && firstSeries->dataProxy()) {
+ if (m_axisZ) {
// Grab a sublist equal to data window (no need to have more labels in axis)
int min = int(m_axisZ->min());
int count = int(m_axisZ->max()) - min + 1;
- QStringList subList = firstSeries->dataProxy()->rowLabels().mid(min, count);
+ QStringList subList;
+ if (m_primarySeries && m_primarySeries->dataProxy())
+ subList = m_primarySeries->dataProxy()->rowLabels().mid(min, count);
static_cast<QCategory3DAxis *>(m_axisZ)->dptr()->setDataLabels(subList);
}
}
void Bars3DController::handleDataColumnLabelsChanged()
{
- QBar3DSeries *firstSeries = 0;
- if (m_seriesList.size())
- firstSeries = static_cast<QBar3DSeries *>(m_seriesList.at(0));
- if (m_axisX && firstSeries && firstSeries->dataProxy()) {
+ if (m_axisX) {
// Grab a sublist equal to data window (no need to have more labels in axis)
int min = int(m_axisX->min());
int count = int(m_axisX->max()) - min + 1;
- QStringList subList = static_cast<QBarDataProxy *>(firstSeries->dataProxy())
- ->columnLabels().mid(min, count);
+ QStringList subList;
+ if (m_primarySeries && m_primarySeries->dataProxy()) {
+ subList = static_cast<QBarDataProxy *>(m_primarySeries->dataProxy())
+ ->columnLabels().mid(min, count);
+ }
static_cast<QCategory3DAxis *>(m_axisX)->dptr()->setDataLabels(subList);
}
}
@@ -246,31 +246,36 @@ void Bars3DController::setAxisZ(QAbstract3DAxis *axis)
handleDataRowLabelsChanged();
}
-void Bars3DController::addSeries(QAbstract3DSeries *series)
+void Bars3DController::setPrimarySeries(QBar3DSeries *series)
{
- Q_ASSERT(series && series->type() == QAbstract3DSeries::SeriesTypeBar);
-
- bool firstAdded = !m_seriesList.size();
-
- Abstract3DController::addSeries(series);
-
- if (series->isVisible())
- adjustAxisRanges();
+ if (!series) {
+ if (m_seriesList.size())
+ series = static_cast<QBar3DSeries *>(m_seriesList.at(0));
+ } else if (!m_seriesList.contains(series)) {
+ // Add nonexistent series.
+ addSeries(series);
+ }
- if (firstAdded) {
+ if (m_primarySeries != series) {
+ m_primarySeries = series;
handleDataRowLabelsChanged();
handleDataColumnLabelsChanged();
+ emit primarySeriesChanged(m_primarySeries);
}
+}
- QBar3DSeries *barSeries = static_cast<QBar3DSeries *>(series);
- if (barSeries->selectedBar() != invalidSelectionPosition())
- setSelectedBar(barSeries->selectedBar(), barSeries);
+QBar3DSeries *Bars3DController::primarySeries() const
+{
+ return m_primarySeries;
}
-void Bars3DController::removeSeries(QAbstract3DSeries *series)
+void Bars3DController::addSeries(QAbstract3DSeries *series)
{
- bool firstRemoved = (m_seriesList.size() && m_seriesList.at(0) == series);
+ insertSeries(m_seriesList.size(), series);
+}
+void Bars3DController::removeSeries(QAbstract3DSeries *series)
+{
bool wasVisible = (series && series->d_ptr->m_controller == this && series->isVisible());
Abstract3DController::removeSeries(series);
@@ -281,9 +286,44 @@ void Bars3DController::removeSeries(QAbstract3DSeries *series)
if (wasVisible)
adjustAxisRanges();
- if (firstRemoved) {
+ // If primary series is removed, reset it to default
+ if (series == m_primarySeries) {
+ if (m_seriesList.size())
+ m_primarySeries = static_cast<QBar3DSeries *>(m_seriesList.at(0));
+ else
+ m_primarySeries = 0;
+
handleDataRowLabelsChanged();
handleDataColumnLabelsChanged();
+
+ emit primarySeriesChanged(m_primarySeries);
+ }
+}
+
+void Bars3DController::insertSeries(int index, QAbstract3DSeries *series)
+{
+ Q_ASSERT(series && series->type() == QAbstract3DSeries::SeriesTypeBar);
+
+ int oldSize = m_seriesList.size();
+
+ Abstract3DController::insertSeries(index, series);
+
+ if (oldSize != m_seriesList.size()) {
+ if (series->isVisible())
+ adjustAxisRanges();
+
+ QBar3DSeries *barSeries = static_cast<QBar3DSeries *>(series);
+ if (!oldSize) {
+ m_primarySeries = barSeries;
+ handleDataRowLabelsChanged();
+ handleDataColumnLabelsChanged();
+ }
+
+ if (barSeries->selectedBar() != invalidSelectionPosition())
+ setSelectedBar(barSeries->selectedBar(), barSeries);
+
+ if (!oldSize)
+ emit primarySeriesChanged(m_primarySeries);
}
}
diff --git a/src/datavisualization/engine/bars3dcontroller_p.h b/src/datavisualization/engine/bars3dcontroller_p.h
index 0c9bf71c..0632830e 100644
--- a/src/datavisualization/engine/bars3dcontroller_p.h
+++ b/src/datavisualization/engine/bars3dcontroller_p.h
@@ -63,6 +63,7 @@ private:
QPoint m_selectedBar; // Points to row & column in data window.
QBar3DSeries *m_selectedBarSeries; // Points to the series for which the bar is selected in
// single series selection cases.
+ QBar3DSeries *m_primarySeries; // Category axis labels are taken from the primary series
// Look'n'feel
bool m_isBarSpecRelative;
@@ -100,8 +101,11 @@ public:
virtual void setAxisX(QAbstract3DAxis *axis);
virtual void setAxisZ(QAbstract3DAxis *axis);
+ virtual void setPrimarySeries(QBar3DSeries *series);
+ virtual QBar3DSeries *primarySeries() const;
virtual void addSeries(QAbstract3DSeries *series);
virtual void removeSeries(QAbstract3DSeries *series);
+ virtual void insertSeries(int index, QAbstract3DSeries *series);
virtual QList<QBar3DSeries *> barSeriesList();
virtual void handleAxisRangeChangedBySender(QObject *sender);
@@ -119,6 +123,9 @@ public slots:
// Renderer callback handlers
void handleBarClicked(const QPoint &position, QBar3DSeries *series);
+signals:
+ void primarySeriesChanged(QBar3DSeries *series);
+
protected:
virtual QAbstract3DAxis *createDefaultAxis(QAbstract3DAxis::AxisOrientation orientation);
diff --git a/src/datavisualization/engine/q3dbars.cpp b/src/datavisualization/engine/q3dbars.cpp
index 00530f7f..3b8d837d 100644
--- a/src/datavisualization/engine/q3dbars.cpp
+++ b/src/datavisualization/engine/q3dbars.cpp
@@ -102,6 +102,8 @@ Q3DBars::Q3DBars(const QSurfaceFormat *format, QWindow *parent)
dptr()->m_shared = new Bars3DController(geometry());
d_ptr->setVisualController(dptr()->m_shared);
dptr()->m_shared->initializeOpenGL();
+ QObject::connect(dptr()->m_shared, &Bars3DController::primarySeriesChanged,
+ this, &Q3DBars::primarySeriesChanged);
}
/*!
@@ -112,12 +114,37 @@ Q3DBars::~Q3DBars()
}
/*!
+ * \property Q3DBars::primarySeries
+ *
+ * Specifies the \a series that is the primary series of the graph. The primary series
+ * is used to determine the row and column axis labels when the labels are not explicitly
+ * set to the axes.
+ * If the specified \a series is not already added to the graph, setting it as the
+ * primary series will also implicitly add it to the graph.
+ * If the primary series itself is removed from the graph, this property
+ * resets to default.
+ * If \a series is null, this property resets to default.
+ * Defaults to the first added series or zero if no series are added to the graph.
+ */
+void Q3DBars::setPrimarySeries(QBar3DSeries *series)
+{
+ dptr()->m_shared->setPrimarySeries(series);
+}
+
+QBar3DSeries *Q3DBars::primarySeries() const
+{
+ return dptrc()->m_shared->primarySeries();
+}
+
+/*!
* Adds the \a series to the graph. A graph can contain multiple series, but only one set of axes,
* so the rows and columns of all series must match for the visualized data to be meaningful.
* If the graph has multiple visible series, only the first one added will
* generate the row or column labels on the axes in cases where the labels are not explicitly set
* to the axes. If the newly added series has specified a selected bar, it will be highlighted and
* any existing selection will be cleared. Only one added series can have an active selection.
+ *
+ * /sa seriesList()
*/
void Q3DBars::addSeries(QBar3DSeries *series)
{
@@ -133,6 +160,21 @@ void Q3DBars::removeSeries(QBar3DSeries *series)
}
/*!
+ * Inserts the \a series into the position \a index in the series list.
+ * If the \a series has already been added to the list, it is moved to the
+ * new \a index.
+ * \note When moving a series to a new \a index that is after its old index,
+ * the new position in list is calculated as if the series was still in its old
+ * index, so the final index is actually the \a index decremented by one.
+ *
+ * \sa addSeries(), seriesList(), seriesIndex()
+ */
+void Q3DBars::insertSeries(int index, QBar3DSeries *series)
+{
+ dptr()->m_shared->insertSeries(index, series);
+}
+
+/*!
* \return list of series added to this graph.
*/
QList<QBar3DSeries *> Q3DBars::seriesList()
diff --git a/src/datavisualization/engine/q3dbars.h b/src/datavisualization/engine/q3dbars.h
index 10535eab..251e410f 100644
--- a/src/datavisualization/engine/q3dbars.h
+++ b/src/datavisualization/engine/q3dbars.h
@@ -40,13 +40,17 @@ class QT_DATAVISUALIZATION_EXPORT Q3DBars : public QAbstract3DGraph
Q_PROPERTY(QCategory3DAxis *rowAxis READ rowAxis WRITE setRowAxis NOTIFY rowAxisChanged)
Q_PROPERTY(QCategory3DAxis *columnAxis READ columnAxis WRITE setColumnAxis NOTIFY columnAxisChanged)
Q_PROPERTY(QValue3DAxis *valueAxis READ valueAxis WRITE setValueAxis NOTIFY valueAxisChanged)
+ Q_PROPERTY(QBar3DSeries *primarySeries READ primarySeries WRITE setPrimarySeries NOTIFY primarySeriesChanged)
public:
explicit Q3DBars(const QSurfaceFormat *format = 0, QWindow *parent = 0);
virtual ~Q3DBars();
+ void setPrimarySeries(QBar3DSeries *series);
+ QBar3DSeries *primarySeries() const;
void addSeries(QBar3DSeries *series);
void removeSeries(QBar3DSeries *series);
+ void insertSeries(int index, QBar3DSeries *series);
QList<QBar3DSeries *> seriesList();
void setBarThickness(float thicknessRatio);
@@ -75,6 +79,7 @@ signals:
void rowAxisChanged(QCategory3DAxis *axis);
void columnAxisChanged(QCategory3DAxis *axis);
void valueAxisChanged(QValue3DAxis *axis);
+ void primarySeriesChanged(QBar3DSeries *series);
private:
Q3DBarsPrivate *dptr();
diff --git a/src/datavisualizationqml2/declarativebars.cpp b/src/datavisualizationqml2/declarativebars.cpp
index 97299833..8634e91d 100644
--- a/src/datavisualizationqml2/declarativebars.cpp
+++ b/src/datavisualizationqml2/declarativebars.cpp
@@ -32,6 +32,9 @@ DeclarativeBars::DeclarativeBars(QQuickItem *parent)
// Create the shared component on the main GUI thread.
m_barsController = new Bars3DController(boundingRect().toRect(), new Declarative3DScene);
AbstractDeclarative::setSharedController(m_barsController);
+
+ QObject::connect(m_barsController, &Bars3DController::primarySeriesChanged,
+ this, &DeclarativeBars::primarySeriesChanged);
}
DeclarativeBars::~DeclarativeBars()
@@ -152,6 +155,21 @@ void DeclarativeBars::removeSeries(QBar3DSeries *series)
series->setParent(this); // Reparent as removing will leave series parentless
}
+void DeclarativeBars::insertSeries(int index, QBar3DSeries *series)
+{
+ m_barsController->insertSeries(index, series);
+}
+
+void DeclarativeBars::setPrimarySeries(QBar3DSeries *series)
+{
+ m_barsController->setPrimarySeries(series);
+}
+
+QBar3DSeries *DeclarativeBars::primarySeries() const
+{
+ return m_barsController->primarySeries();
+}
+
void DeclarativeBars::handleAxisXChanged(QAbstract3DAxis *axis)
{
emit columnAxisChanged(static_cast<QCategory3DAxis *>(axis));
diff --git a/src/datavisualizationqml2/declarativebars_p.h b/src/datavisualizationqml2/declarativebars_p.h
index 6a2a3052..9c89c5a2 100644
--- a/src/datavisualizationqml2/declarativebars_p.h
+++ b/src/datavisualizationqml2/declarativebars_p.h
@@ -55,6 +55,7 @@ class DeclarativeBars : public AbstractDeclarative
Q_PROPERTY(QSizeF barSpacing READ barSpacing WRITE setBarSpacing NOTIFY barSpacingChanged)
Q_PROPERTY(bool barSpacingRelative READ isBarSpacingRelative WRITE setBarSpacingRelative NOTIFY barSpacingRelativeChanged)
Q_PROPERTY(QQmlListProperty<QBar3DSeries> seriesList READ seriesList)
+ Q_PROPERTY(QBar3DSeries *primarySeries READ primarySeries WRITE setPrimarySeries NOTIFY primarySeriesChanged)
Q_CLASSINFO("DefaultProperty", "seriesList")
public:
@@ -84,6 +85,9 @@ public:
static void clearSeriesFunc(QQmlListProperty<QBar3DSeries> *list);
Q_INVOKABLE void addSeries(QBar3DSeries *series);
Q_INVOKABLE void removeSeries(QBar3DSeries *series);
+ Q_INVOKABLE void insertSeries(int index, QBar3DSeries *series);
+ void setPrimarySeries(QBar3DSeries *series);
+ QBar3DSeries *primarySeries() const;
public slots:
void handleAxisXChanged(QAbstract3DAxis *axis);
@@ -98,6 +102,7 @@ signals:
void barSpacingChanged(QSizeF spacing);
void barSpacingRelativeChanged(bool relative);
void meshFileNameChanged(QString filename);
+ void primarySeriesChanged(QBar3DSeries *series);
private:
Bars3DController *m_barsController;
diff --git a/tests/barstest/chart.cpp b/tests/barstest/chart.cpp
index f162cbff..cbae8a6c 100644
--- a/tests/barstest/chart.cpp
+++ b/tests/barstest/chart.cpp
@@ -67,6 +67,15 @@ GraphModifier::GraphModifier(Q3DBars *barchart, QColorDialog *colorDialog)
m_ownTheme(0),
m_builtinTheme(new Q3DTheme(Q3DTheme::ThemeStoneMoss))
{
+ m_temperatureData->setObjectName("m_temperatureData");
+ m_temperatureData2->setObjectName("m_temperatureData2");
+ m_genericData->setObjectName("m_genericData");
+ m_dummyData->setObjectName("m_dummyData");
+ m_dummyData2->setObjectName("m_dummyData2");
+ m_dummyData3->setObjectName("m_dummyData3");
+ m_dummyData4->setObjectName("m_dummyData4");
+ m_dummyData5->setObjectName("m_dummyData5");
+
// Generate generic labels
QStringList genericColumnLabels;
for (int i = 0; i < 400; i++) {
@@ -124,10 +133,22 @@ GraphModifier::GraphModifier(Q3DBars *barchart, QColorDialog *colorDialog)
m_temperatureData->setName("Oulu");
m_temperatureData2->setName("Helsinki");
m_genericData->setName("Generic series");
+ m_dummyData->setName("Dummy 1");
+ m_dummyData2->setName("Dummy 2");
+ m_dummyData3->setName("Dummy 3");
+ m_dummyData4->setName("Dummy 4");
+ m_dummyData5->setName("Dummy 5");
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_dummyData->setItemLabelFormat(QStringLiteral("@seriesName: @valueLabel"));
+ m_dummyData2->setItemLabelFormat(QStringLiteral("@seriesName: @valueLabel"));
+ m_dummyData3->setItemLabelFormat(QStringLiteral("@seriesName: @valueLabel"));
+ m_dummyData4->setItemLabelFormat(QStringLiteral("@seriesName: @valueLabel"));
+ m_dummyData5->setItemLabelFormat(QStringLiteral("@seriesName: @valueLabel"));
+
m_genericData->dataProxy()->setColumnLabels(genericColumnLabels);
m_temperatureData->setBaseColor(Qt::red);
@@ -194,6 +215,8 @@ GraphModifier::GraphModifier(Q3DBars *barchart, QColorDialog *colorDialog)
&GraphModifier::handleColumnAxisChanged);
QObject::connect(m_graph, &Q3DBars::valueAxisChanged, this,
&GraphModifier::handleValueAxisChanged);
+ QObject::connect(m_graph, &Q3DBars::primarySeriesChanged, this,
+ &GraphModifier::handlePrimarySeriesChanged);
m_graph->addSeries(m_temperatureData);
m_graph->addSeries(m_temperatureData2);
@@ -707,6 +730,11 @@ void GraphModifier::handleValueAxisChanged(QValue3DAxis *axis)
qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_graph->valueAxis());
}
+void GraphModifier::handlePrimarySeriesChanged(QBar3DSeries *series)
+{
+ qDebug() << __FUNCTION__ << series;
+}
+
void GraphModifier::changeShadowQuality(int quality)
{
QAbstract3DGraph::ShadowQuality sq = QAbstract3DGraph::ShadowQuality(quality);
@@ -765,6 +793,207 @@ QBarDataArray *GraphModifier::makeDummyData()
return dataSet;
}
+// Executes one step of the primary series test
+void GraphModifier::primarySeriesTest()
+{
+ static int nextStep = 0;
+
+ QStringList testLabels;
+ QStringList testLabels2;
+ QStringList testLabels3;
+ QStringList testLabels5;
+ testLabels << "1" << "2" << "3" << "4";
+ testLabels2 << "11" << "22" << "33" << "44";
+ testLabels3 << "111" << "222" << "333" << "444";
+ testLabels5 << "11111" << "22222" << "33333" << "44444";
+
+ switch (nextStep++) {
+ case 0: {
+ qDebug() << "Step 0 - Init:";
+ m_graph->addSeries(m_dummyData); // Add one series to enforce release in releaseProxies()
+ releaseProxies();
+ releaseAxes();
+ m_dummyData->dataProxy()->resetArray(makeDummyData(),
+ testLabels,
+ QStringList() << "A" << "B" << "C" << "D");
+ m_dummyData2->dataProxy()->resetArray(makeDummyData(),
+ testLabels2,
+ QStringList() << "AA" << "BB" << "CC" << "DD");
+ m_dummyData3->dataProxy()->resetArray(makeDummyData(),
+ testLabels3,
+ QStringList() << "AAA" << "BBB" << "CCC" << "DDD");
+ m_dummyData4->dataProxy()->resetArray(makeDummyData(),
+ QStringList() << "1111" << "2222" << "3333" << "4444",
+ QStringList() << "AAAA" << "BBBB" << "CCCC" << "DDDD");
+ m_dummyData5->dataProxy()->resetArray(makeDummyData(),
+ testLabels5,
+ QStringList() << "AAAAA" << "BBBBB" << "CCCCC" << "DDDDD");
+
+ m_graph->addSeries(m_dummyData);
+ m_graph->addSeries(m_dummyData2);
+ m_graph->addSeries(m_dummyData3);
+
+ m_dummyData->setBaseColor(Qt::black);
+ m_dummyData2->setBaseColor(Qt::white);
+ m_dummyData3->setBaseColor(Qt::red);
+ m_dummyData4->setBaseColor(Qt::blue);
+ m_dummyData5->setBaseColor(Qt::green);
+
+ if (m_graph->primarySeries() == m_dummyData)
+ if (m_graph->rowAxis()->labels() == testLabels)
+ qDebug() << "--> SUCCESS";
+ else
+ qDebug() << "--> FAIL!!! Row labels incorrect: " << m_graph->rowAxis()->labels();
+ else
+ qDebug() << "--> FAIL!!! Primary should be m_dummyData, actual: " << m_graph->primarySeries();
+ break;
+ }
+ case 1: {
+ qDebug() << "Step 1 - Set another series as primary:";
+ m_graph->setPrimarySeries(m_dummyData3);
+ if (m_graph->primarySeries() == m_dummyData3) {
+ if (m_graph->rowAxis()->labels() == testLabels3)
+ qDebug() << "--> SUCCESS";
+ else
+ qDebug() << "--> FAIL!!! Row labels incorrect: " << m_graph->rowAxis()->labels();
+ } else {
+ qDebug() << "--> FAIL!!! Primary should be m_dummyData3, actual: " << m_graph->primarySeries();
+ }
+ break;
+ }
+ case 2: {
+ qDebug() << "Step 2 - Add new series:";
+ m_graph->addSeries(m_dummyData4);
+ if (m_graph->primarySeries() == m_dummyData3)
+ if (m_graph->rowAxis()->labels() == testLabels3)
+ qDebug() << "--> SUCCESS";
+ else
+ qDebug() << "--> FAIL!!! Row labels incorrect: " << m_graph->rowAxis()->labels();
+ else
+ qDebug() << "--> FAIL!!! Primary should be m_dummyData3, actual: " << m_graph->primarySeries();
+ break;
+ }
+ case 3: {
+ qDebug() << "Step 3 - Reset primary series:";
+ m_graph->setPrimarySeries(0);
+ if (m_graph->primarySeries() == m_dummyData)
+ if (m_graph->rowAxis()->labels() == testLabels)
+ qDebug() << "--> SUCCESS";
+ else
+ qDebug() << "--> FAIL!!! Row labels incorrect: " << m_graph->rowAxis()->labels();
+ else
+ qDebug() << "--> FAIL!!! Primary should be m_dummyData, actual: " << m_graph->primarySeries();
+ break;
+ }
+ case 4: {
+ qDebug() << "Step 4 - Set new series at primary:";
+ m_graph->setPrimarySeries(m_dummyData5);
+ if (m_graph->primarySeries() == m_dummyData5)
+ if (m_graph->rowAxis()->labels() == testLabels5)
+ qDebug() << "--> SUCCESS";
+ else
+ qDebug() << "--> FAIL!!! Row labels incorrect: " << m_graph->rowAxis()->labels();
+ else
+ qDebug() << "--> FAIL!!! Primary should be m_dummyData5, actual: " << m_graph->primarySeries();
+ break;
+ }
+ case 5: {
+ qDebug() << "Step 5 - Remove nonexistent series:";
+ m_graph->removeSeries(0);
+ if (m_graph->primarySeries() == m_dummyData5)
+ if (m_graph->rowAxis()->labels() == testLabels5)
+ qDebug() << "--> SUCCESS";
+ else
+ qDebug() << "--> FAIL!!! Row labels incorrect: " << m_graph->rowAxis()->labels();
+ else
+ qDebug() << "--> FAIL!!! Primary should be m_dummyData5, actual: " << m_graph->primarySeries();
+ break;
+ }
+ case 6: {
+ qDebug() << "Step 6 - Remove non-primary series:";
+ m_graph->removeSeries(m_dummyData);
+ if (m_graph->primarySeries() == m_dummyData5)
+ if (m_graph->rowAxis()->labels() == testLabels5)
+ qDebug() << "--> SUCCESS";
+ else
+ qDebug() << "--> FAIL!!! Row labels incorrect: " << m_graph->rowAxis()->labels();
+ else
+ qDebug() << "--> FAIL!!! Primary should be m_dummyData5, actual: " << m_graph->primarySeries();
+ break;
+ }
+ case 7: {
+ qDebug() << "Step 7 - Remove primary series:";
+ m_graph->removeSeries(m_dummyData5);
+ if (m_graph->primarySeries() == m_dummyData2) // first series removed, second should be first now
+ if (m_graph->rowAxis()->labels() == testLabels2)
+ qDebug() << "--> SUCCESS";
+ else
+ qDebug() << "--> FAIL!!! Row labels incorrect: " << m_graph->rowAxis()->labels();
+ else
+ qDebug() << "--> FAIL!!! Primary should be m_dummyData3, actual: " << m_graph->primarySeries();
+ break;
+ }
+ case 8: {
+ qDebug() << "Step 8 - move a series (m_dummyData2) forward to a different position";
+ m_graph->insertSeries(3, m_dummyData2);
+ if (m_graph->primarySeries() == m_dummyData2)
+ if (m_graph->seriesList().at(2) == m_dummyData2) // moving series forward, index decrements
+ qDebug() << "--> SUCCESS";
+ else
+ qDebug() << "--> FAIL!!! Moved to incorrect index, index 2 has:" << m_graph->seriesList().at(2);
+ else
+ qDebug() << "--> FAIL!!! Primary should be m_dummyData3, actual: " << m_graph->primarySeries();
+ break;
+ }
+ case 9: {
+ qDebug() << "Step 9 - move a series (m_dummyData4) backward to a different position";
+ m_graph->insertSeries(0, m_dummyData4);
+ if (m_graph->primarySeries() == m_dummyData2)
+ if (m_graph->seriesList().at(0) == m_dummyData4)
+ qDebug() << "--> SUCCESS";
+ else
+ qDebug() << "--> FAIL!!! Moved to incorrect index, index 0 has:" << m_graph->seriesList().at(0);
+ else
+ qDebug() << "--> FAIL!!! Primary should be m_dummyData3, actual: " << m_graph->primarySeries();
+ break;
+ }
+ case 10: {
+ qDebug() << "Step 10 - Insert a series (m_dummyData) series to position 2";
+ m_graph->insertSeries(2, m_dummyData);
+ if (m_graph->primarySeries() == m_dummyData2)
+ if (m_graph->seriesList().at(2) == m_dummyData)
+ qDebug() << "--> SUCCESS";
+ else
+ qDebug() << "--> FAIL!!! Moved to incorrect index, index 2 has:" << m_graph->seriesList().at(2);
+ else
+ qDebug() << "--> FAIL!!! Primary should be m_dummyData3, actual: " << m_graph->primarySeries();
+ break;
+ }
+ case 11: {
+ qDebug() << "Step 11 - Remove everything";
+ m_graph->removeSeries(m_dummyData);
+ m_graph->removeSeries(m_dummyData2);
+ m_graph->removeSeries(m_dummyData3);
+ m_graph->removeSeries(m_dummyData4);
+ m_graph->removeSeries(m_dummyData5);
+ if (m_graph->primarySeries() == 0)
+ if (m_graph->rowAxis()->labels() == QStringList())
+ qDebug() << "--> SUCCESS";
+ else
+ qDebug() << "--> FAIL!!! Row labels incorrect: " << m_graph->rowAxis()->labels();
+ else
+ qDebug() << "--> FAIL!!! Primary should be null, actual: " << m_graph->primarySeries();
+ break;
+ }
+ default:
+ qDebug() << "-- Restarting test sequence --";
+ nextStep = 0;
+ break;
+ }
+
+
+}
+
void GraphModifier::setBackgroundEnabled(int enabled)
{
m_graph->activeTheme()->setBackgroundEnabled(bool(enabled));
diff --git a/tests/barstest/chart.h b/tests/barstest/chart.h
index 9c14e5cd..703f53e5 100644
--- a/tests/barstest/chart.h
+++ b/tests/barstest/chart.h
@@ -80,6 +80,7 @@ public:
void changeColorStyle();
void showFiveSeries();
QBarDataArray *makeDummyData();
+ void primarySeriesTest();
public slots:
void flipViews();
@@ -92,6 +93,7 @@ public slots:
void handleRowAxisChanged(QCategory3DAxis *axis);
void handleColumnAxisChanged(QCategory3DAxis *axis);
void handleValueAxisChanged(QValue3DAxis *axis);
+ void handlePrimarySeriesChanged(QBar3DSeries *series);
signals:
void shadowQualityChanged(int quality);
diff --git a/tests/barstest/main.cpp b/tests/barstest/main.cpp
index 9147735e..f582301b 100644
--- a/tests/barstest/main.cpp
+++ b/tests/barstest/main.cpp
@@ -150,6 +150,10 @@ int main(int argc, char **argv)
ownThemeButton->setText(QStringLiteral("Use own theme"));
ownThemeButton->setEnabled(true);
+ QPushButton *primarySeriesTestsButton = new QPushButton(widget);
+ primarySeriesTestsButton->setText(QStringLiteral("Test primary series"));
+ primarySeriesTestsButton->setEnabled(true);
+
QColorDialog *colorDialog = new QColorDialog(widget);
QLinearGradient grBtoY(0, 0, 100, 0);
@@ -294,6 +298,7 @@ int main(int argc, char **argv)
vLayout->addWidget(flipViewsButton, 0, Qt::AlignTop);
vLayout->addWidget(changeColorStyleButton, 0, Qt::AlignTop);
vLayout->addWidget(ownThemeButton, 0, Qt::AlignTop);
+ vLayout->addWidget(primarySeriesTestsButton, 0, Qt::AlignTop);
vLayout->addWidget(gradientBtoYPB, 1, Qt::AlignTop);
vLayout2->addWidget(staticCheckBox, 0, Qt::AlignTop);
@@ -391,6 +396,8 @@ int main(int argc, char **argv)
&GraphModifier::changeColorStyle);
QObject::connect(ownThemeButton, &QPushButton::clicked, modifier,
&GraphModifier::useOwnTheme);
+ QObject::connect(primarySeriesTestsButton, &QPushButton::clicked, modifier,
+ &GraphModifier::primarySeriesTest);
QObject::connect(colorDialog, &QColorDialog::currentColorChanged, modifier,
&GraphModifier::changeBaseColor);
QObject::connect(gradientBtoYPB, &QPushButton::clicked, modifier,