summaryrefslogtreecommitdiffstats
path: root/tests/scattertest
diff options
context:
space:
mode:
Diffstat (limited to 'tests/scattertest')
-rw-r--r--tests/scattertest/main.cpp11
-rw-r--r--tests/scattertest/scatterchart.cpp144
-rw-r--r--tests/scattertest/scatterchart.h5
3 files changed, 122 insertions, 38 deletions
diff --git a/tests/scattertest/main.cpp b/tests/scattertest/main.cpp
index 2e8792ad..7734faa2 100644
--- a/tests/scattertest/main.cpp
+++ b/tests/scattertest/main.cpp
@@ -100,6 +100,9 @@ int main(int argc, char **argv)
QPushButton *setSelectedItemButton = new QPushButton(widget);
setSelectedItemButton->setText(QStringLiteral("Select/deselect item 3"));
+ QPushButton *addSeriesButton = new QPushButton(widget);
+ addSeriesButton->setText(QStringLiteral("Add Series"));
+
QPushButton *startTimerButton = new QPushButton(widget);
startTimerButton->setText(QStringLiteral("Start/stop timer"));
@@ -158,6 +161,7 @@ int main(int argc, char **argv)
vLayout->addWidget(removeOneButton, 0, Qt::AlignTop);
vLayout->addWidget(removeBunchButton, 0, Qt::AlignTop);
vLayout->addWidget(setSelectedItemButton, 0, Qt::AlignTop);
+ vLayout->addWidget(addSeriesButton, 0, Qt::AlignTop);
vLayout->addWidget(startTimerButton, 0, Qt::AlignTop);
vLayout->addWidget(gradientBtoYPB, 0, Qt::AlignTop);
vLayout->addWidget(backgroundCheckBox);
@@ -202,6 +206,8 @@ int main(int argc, char **argv)
&ScatterDataModifier::removeBunch);
QObject::connect(setSelectedItemButton, &QPushButton::clicked, modifier,
&ScatterDataModifier::selectItem);
+ QObject::connect(addSeriesButton, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::addSeries);
QObject::connect(startTimerButton, &QPushButton::clicked, modifier,
&ScatterDataModifier::startStopTimer);
QObject::connect(gradientBtoYPB, &QPushButton::clicked, modifier,
@@ -215,11 +221,6 @@ int main(int argc, char **argv)
SLOT(changeShadowQuality(int)));
QObject::connect(modifier, &ScatterDataModifier::shadowQualityChanged, shadowQuality,
&QComboBox::setCurrentIndex);
- QObject::connect(chart, &Q3DScatter::shadowQualityChanged, modifier,
- &ScatterDataModifier::shadowQualityUpdatedByVisual);
- QObject::connect(chart, &Q3DScatter::selectedItemIndexChanged, modifier,
- &ScatterDataModifier::handleSelectionChange);
-
QObject::connect(fontList, &QFontComboBox::currentFontChanged, modifier,
&ScatterDataModifier::changeFont);
diff --git a/tests/scattertest/scatterchart.cpp b/tests/scattertest/scatterchart.cpp
index fa59c204..6b809198 100644
--- a/tests/scattertest/scatterchart.cpp
+++ b/tests/scattertest/scatterchart.cpp
@@ -32,7 +32,9 @@ const int numberOfItems = 10000;
ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter)
: m_chart(scatter),
m_fontSize(30.0f),
- m_selectedItem(-1)
+ m_loopCounter(0),
+ m_selectedItem(-1),
+ m_targetSeries(0)
{
QFont font = m_chart->font();
font.setPointSize(m_fontSize);
@@ -44,17 +46,15 @@ ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter)
m_chart->setAxisX(new Q3DValueAxis);
m_chart->setAxisY(new Q3DValueAxis);
m_chart->setAxisZ(new Q3DValueAxis);
- QScatter3DSeries *series = new QScatter3DSeries;
- QScatter3DSeries *series2 = new QScatter3DSeries;
- m_chart->addSeries(series);
- m_chart->addSeries(series2);
- series->setItemLabelFormat("@xTitle: @xLabel @yTitle: @yLabel @zTitle: @zLabel");
- series->setItemLabelFormat("** @xTitle: @xLabel @yTitle: @yLabel @zTitle: @zLabel **");
+ createAndAddSeries();
+ createAndAddSeries();
m_chart->setSelectionMode(QDataVis::SelectionItem);
- connect(&m_timer, &QTimer::timeout, this, &ScatterDataModifier::timeout);
+ QObject::connect(&m_timer, &QTimer::timeout, this, &ScatterDataModifier::timeout);
+ QObject::connect(m_chart, &Q3DScatter::shadowQualityChanged, this,
+ &ScatterDataModifier::shadowQualityUpdatedByVisual);
}
ScatterDataModifier::~ScatterDataModifier()
@@ -186,7 +186,13 @@ void ScatterDataModifier::shadowQualityUpdatedByVisual(QDataVis::ShadowQuality s
void ScatterDataModifier::clear()
{
- m_chart->seriesList().at(0)->dataProxy()->resetArray(0);
+ foreach (QScatter3DSeries *series, m_chart->seriesList()) {
+ m_chart->removeSeries(series);
+ delete series;
+ }
+
+ m_targetSeries = 0;
+
qDebug() << m_loopCounter << "Cleared array";
}
@@ -209,74 +215,98 @@ void ScatterDataModifier::resetAxes()
void ScatterDataModifier::addOne()
{
+ if (!m_targetSeries)
+ createAndAddSeries();
+
QScatterDataItem item(randVector());
- int addIndex = m_chart->seriesList().at(0)->dataProxy()->addItem(item);
- qDebug() << m_loopCounter << "added one to index:" << addIndex << "array size:" << m_chart->seriesList().at(0)->dataProxy()->array()->size();
+ int addIndex = m_targetSeries->dataProxy()->addItem(item);
+ qDebug() << m_loopCounter << "added one to index:" << addIndex << "array size:" << m_targetSeries->dataProxy()->array()->size();
}
void ScatterDataModifier::addBunch()
{
+ if (!m_targetSeries)
+ createAndAddSeries();
+
QScatterDataArray items(100);
for (int i = 0; i < items.size(); i++)
items[i].setPosition(randVector());
- int addIndex = m_chart->seriesList().at(0)->dataProxy()->addItems(items);
- qDebug() << m_loopCounter << "added bunch to index:" << addIndex << "array size:" << m_chart->seriesList().at(0)->dataProxy()->array()->size();
+ int addIndex = m_targetSeries->dataProxy()->addItems(items);
+ qDebug() << m_loopCounter << "added bunch to index:" << addIndex << "array size:" << m_targetSeries->dataProxy()->array()->size();
}
void ScatterDataModifier::insertOne()
{
+ if (!m_targetSeries)
+ createAndAddSeries();
+
QScatterDataItem item(randVector());
- m_chart->seriesList().at(0)->dataProxy()->insertItem(0, item);
- qDebug() << m_loopCounter << "Inserted one, array size:" << m_chart->seriesList().at(0)->dataProxy()->array()->size();
+ m_targetSeries->dataProxy()->insertItem(0, item);
+ qDebug() << m_loopCounter << "Inserted one, array size:" << m_targetSeries->dataProxy()->array()->size();
}
void ScatterDataModifier::insertBunch()
{
+ if (!m_targetSeries)
+ createAndAddSeries();
+
QScatterDataArray items(100);
for (int i = 0; i < items.size(); i++)
items[i].setPosition(randVector());
- m_chart->seriesList().at(0)->dataProxy()->insertItems(0, items);
- qDebug() << m_loopCounter << "Inserted bunch, array size:" << m_chart->seriesList().at(0)->dataProxy()->array()->size();
+ m_targetSeries->dataProxy()->insertItems(0, items);
+ qDebug() << m_loopCounter << "Inserted bunch, array size:" << m_targetSeries->dataProxy()->array()->size();
}
void ScatterDataModifier::changeOne()
{
- if (m_selectedItem >= 0 && m_chart->seriesList().at(0)->dataProxy()->array()->size()) {
+ if (!m_targetSeries)
+ createAndAddSeries();
+
+ if (m_selectedItem >= 0 && m_targetSeries->dataProxy()->array()->size()) {
QScatterDataItem item(randVector());
- m_chart->seriesList().at(0)->dataProxy()->setItem(m_selectedItem, item);
- qDebug() << m_loopCounter << "Changed one, array size:" << m_chart->seriesList().at(0)->dataProxy()->array()->size();
+ m_targetSeries->dataProxy()->setItem(m_selectedItem, item);
+ qDebug() << m_loopCounter << "Changed one, array size:" << m_targetSeries->dataProxy()->array()->size();
}
}
void ScatterDataModifier::changeBunch()
{
- if (m_chart->seriesList().at(0)->dataProxy()->array()->size()) {
- int amount = qMin(m_chart->seriesList().at(0)->dataProxy()->array()->size(), 100);
+ if (!m_targetSeries)
+ createAndAddSeries();
+
+ if (m_targetSeries->dataProxy()->array()->size()) {
+ int amount = qMin(m_targetSeries->dataProxy()->array()->size(), 100);
QScatterDataArray items(amount);
for (int i = 0; i < items.size(); i++)
items[i].setPosition(randVector());
- m_chart->seriesList().at(0)->dataProxy()->setItems(0, items);
- qDebug() << m_loopCounter << "Changed bunch, array size:" << m_chart->seriesList().at(0)->dataProxy()->array()->size();
+ m_targetSeries->dataProxy()->setItems(0, items);
+ qDebug() << m_loopCounter << "Changed bunch, array size:" << m_targetSeries->dataProxy()->array()->size();
}
}
void ScatterDataModifier::removeOne()
{
+ if (!m_targetSeries)
+ createAndAddSeries();
+
if (m_selectedItem >= 0) {
- m_chart->seriesList().at(0)->dataProxy()->removeItems(m_selectedItem, 1);
- qDebug() << m_loopCounter << "Removed one, array size:" << m_chart->seriesList().at(0)->dataProxy()->array()->size();
+ m_targetSeries->dataProxy()->removeItems(m_selectedItem, 1);
+ qDebug() << m_loopCounter << "Removed one, array size:" << m_targetSeries->dataProxy()->array()->size();
}
}
void ScatterDataModifier::removeBunch()
{
- m_chart->seriesList().at(0)->dataProxy()->removeItems(0, 100);
- qDebug() << m_loopCounter << "Removed bunch, array size:" << m_chart->seriesList().at(0)->dataProxy()->array()->size();
+ if (!m_targetSeries)
+ createAndAddSeries();
+
+ m_targetSeries->dataProxy()->removeItems(0, 100);
+ qDebug() << m_loopCounter << "Removed bunch, array size:" << m_targetSeries->dataProxy()->array()->size();
}
void ScatterDataModifier::timeout()
{
- int doWhat = rand() % 8;
+ int doWhat = rand() % 10;
if (!(rand() % 100))
doWhat = -1;
@@ -305,6 +335,15 @@ void ScatterDataModifier::timeout()
case 7:
removeBunch();
break;
+ case 8:
+ addSeries();
+ break;
+ case 9:
+ if (m_chart->seriesList().size())
+ m_targetSeries = m_chart->seriesList().at(rand() % m_chart->seriesList().size());
+ else
+ addSeries();
+ break;
default:
clear();
break;
@@ -326,18 +365,29 @@ void ScatterDataModifier::startStopTimer()
void ScatterDataModifier::selectItem()
{
+ if (!m_targetSeries)
+ createAndAddSeries();
+
int targetItem(3);
int noSelection(-1);
- if (m_selectedItem != targetItem)
- m_chart->setSelectedItemIndex(targetItem);
+ if (m_selectedItem != targetItem || m_targetSeries != m_chart->seriesList().at(0))
+ m_chart->seriesList().at(0)->setSelectedItem(targetItem);
else
- m_chart->setSelectedItemIndex(noSelection);
+ m_chart->seriesList().at(0)->setSelectedItem(noSelection);
}
void ScatterDataModifier::handleSelectionChange(int index)
{
m_selectedItem = index;
- qDebug() << "Selected item index:" << index;
+ m_targetSeries = static_cast<QScatter3DSeries *>(sender());
+ int seriesIndex = 0;
+ foreach (QScatter3DSeries *series, m_chart->seriesList()) {
+ if (series == sender())
+ break;
+ seriesIndex++;
+ }
+
+ qDebug() << "Selected item index:" << index << "series:" << seriesIndex;
}
void ScatterDataModifier::setGradient()
@@ -374,6 +424,16 @@ void ScatterDataModifier::setGradient()
m_chart->setColorStyle(QDataVis::ColorStyleUniform);
}
+void ScatterDataModifier::addSeries()
+{
+ QScatter3DSeries *series = createAndAddSeries();
+
+ QScatter3DSeries *oldTargetSeries = m_targetSeries;
+ m_targetSeries = series; // adding always adds to target series, so fake it for a bit
+ addOne(); // add one random item to start the new series off
+ m_targetSeries = oldTargetSeries;
+}
+
void ScatterDataModifier::changeShadowQuality(int quality)
{
QDataVis::ShadowQuality sq = QDataVis::ShadowQuality(quality);
@@ -398,3 +458,21 @@ QVector3D ScatterDataModifier::randVector()
(float)(rand() % 100) / 100.0f - (float)(rand() % 100) / 100.0f,
(float)(rand() % 100) / 2.0f - (float)(rand() % 100) / 2.0f);
}
+
+QScatter3DSeries *ScatterDataModifier::createAndAddSeries()
+{
+ static int counter = 0;
+
+ QScatter3DSeries *series = new QScatter3DSeries;
+
+ if (!m_targetSeries)
+ m_targetSeries = series;
+
+ m_chart->addSeries(series);
+ series->setItemLabelFormat(QString("%1: @xLabel - @yLabel - @zLabel").arg(counter++));
+
+ QObject::connect(series, &QScatter3DSeries::selectedItemChanged, this,
+ &ScatterDataModifier::handleSelectionChange);
+
+ return series;
+}
diff --git a/tests/scattertest/scatterchart.h b/tests/scattertest/scatterchart.h
index db7f3ac0..2567613f 100644
--- a/tests/scattertest/scatterchart.h
+++ b/tests/scattertest/scatterchart.h
@@ -20,6 +20,7 @@
#define SCATTERDATAMODIFIER_H
#include <QtDataVisualization/q3dscatter.h>
+#include <QtDataVisualization/qscatter3dseries.h>
#include <QFont>
#include <QDebug>
@@ -63,17 +64,21 @@ public slots:
void selectItem();
void handleSelectionChange(int index);
void setGradient();
+ void addSeries();
signals:
void shadowQualityChanged(int quality);
private:
QVector3D randVector();
+ QScatter3DSeries *createAndAddSeries();
+
Q3DScatter *m_chart;
int m_fontSize;
QTimer m_timer;
int m_loopCounter;
int m_selectedItem;
+ QScatter3DSeries *m_targetSeries;
};
#endif