diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-09-17 08:30:34 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-09-18 08:33:52 +0300 |
commit | 4daf244e9745a28b917b0976e39a60d73776c4aa (patch) | |
tree | 0b10abd2cea115f5f05b44e753e75cbde9badfd0 /tests | |
parent | 43435c1b51e81c3ecdfec771950d861df90ebef3 (diff) |
Bar graph data window controlled by category axes ranges
Task-number: QTRD-2183
Task-number: QTRD-2254
Change-Id: I09808c3980a4fa60b7584839e834ee3a734b3e9a
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/barstest/chart.cpp | 94 | ||||
-rw-r--r-- | tests/barstest/chart.h | 11 | ||||
-rw-r--r-- | tests/barstest/main.cpp | 42 | ||||
-rw-r--r-- | tests/spectrum/spectrumapp/main.cpp | 4 |
4 files changed, 117 insertions, 34 deletions
diff --git a/tests/barstest/chart.cpp b/tests/barstest/chart.cpp index b534f54c..b8ef0758 100644 --- a/tests/barstest/chart.cpp +++ b/tests/barstest/chart.cpp @@ -30,11 +30,11 @@ ChartModifier::ChartModifier(Q3DBars *barchart) : m_chart(barchart), m_columnCount(21), m_rowCount(21), - m_xRotation(0.0f), - m_yRotation(0.0f), + m_xRotation(0.0), + m_yRotation(0.0), m_static(true), - m_barSpacingX(0.1f), - m_barSpacingZ(0.1f), + m_barSpacingX(0.1), + m_barSpacingZ(0.1), m_fontSize(20), m_segments(4), m_subSegments(3), @@ -54,7 +54,7 @@ ChartModifier::ChartModifier(Q3DBars *barchart) { // Generate generic labels QStringList genericColumnLabels; - for (int i = 0; i < 200; i++) { + for (int i = 0; i < 400; i++) { if (i % 5) genericColumnLabels << QString(); else @@ -80,9 +80,10 @@ ChartModifier::ChartModifier(Q3DBars *barchart) m_fixedRangeAxis->setRange(0.0, 100.0); m_genericRowAxis->setTitle("Generic Row"); + m_genericRowAxis->setRange(0, m_rowCount - 1); m_genericColumnAxis->setTitle("Generic Column"); - m_genericColumnAxis->setCategoryLabels(genericColumnLabels); + m_genericColumnAxis->setRange(0, m_columnCount - 1); m_temperatureAxis->setTitle("Average temperature"); m_temperatureAxis->setSegmentCount(m_segments); @@ -106,6 +107,7 @@ ChartModifier::ChartModifier(Q3DBars *barchart) m_temperatureData->setItemLabelFormat(QStringLiteral("@valueTitle for @colLabel @rowLabel: @valueLabel")); m_genericData->setItemLabelFormat(QStringLiteral("@valueTitle for (@rowIdx, @colIdx): @valueLabel")); + m_genericData->setColumnLabels(genericColumnLabels); m_chart->addDataProxy(m_temperatureData); m_chart->addDataProxy(m_genericData); @@ -138,7 +140,6 @@ void ChartModifier::restart(bool dynamicData) m_chart->setRowAxis(m_yearAxis); m_chart->setColumnAxis(m_monthAxis); - m_chart->setDataWindow(m_years.size(), m_months.size()); m_chart->setSelectionMode(QDataVis::ModeItem); } else { m_chart->setActiveDataProxy(m_genericData); @@ -149,7 +150,6 @@ void ChartModifier::restart(bool dynamicData) m_chart->setRowAxis(m_genericRowAxis); m_chart->setColumnAxis(m_genericColumnAxis); - m_chart->setDataWindow(m_rowCount, m_columnCount); m_chart->setSelectionMode(QDataVis::ModeItem); } } @@ -205,18 +205,54 @@ void ChartModifier::releaseProxies() m_chart->releaseDataProxy(m_genericData); } +void ChartModifier::createMassiveArray() +{ + const int arrayDimension = 1000; + QTime timer; + timer.start(); + + QStringList genericColumnLabels; + for (int i = 0; i < arrayDimension; i++) { + if (i % 5) + genericColumnLabels << QString(); + else + genericColumnLabels << QStringLiteral("Column %1").arg(i); + } + + QStringList genericRowLabels; + for (int i = 0; i < arrayDimension; i++) { + if (i % 5) + genericRowLabels << QString(); + else + genericRowLabels << QStringLiteral("Row %1").arg(i); + } + + QBarDataArray *dataArray = new QBarDataArray; + dataArray->reserve(arrayDimension); + for (int i = 0; i < arrayDimension; i++) { + QBarDataRow *dataRow = new QBarDataRow(arrayDimension); + for (int j = 0; j < arrayDimension; j++) + (*dataRow)[j].setValue((qreal(i % 300 + 1) / 300.0) * qreal(rand() % 100)); + dataArray->append(dataRow); + } + + m_chart->activeDataProxy()->resetArray(dataArray, genericRowLabels, genericColumnLabels); + + qDebug() << "Created Massive Array (" << arrayDimension << "), time:" << timer.elapsed(); +} + void ChartModifier::resetTemperatureData() { // Set up data - static const float temp[7][12] = { - {-6.7f, -11.7f, -9.7f, 3.3f, 9.2f, 14.0f, 16.3f, 17.8f, 10.2f, 2.1f, -2.6f, -0.3f}, // 2006 - {-6.8f, -13.3f, 0.2f, 1.5f, 7.9f, 13.4f, 16.1f, 15.5f, 8.2f, 5.4f, -2.6f, -0.8f}, // 2007 - {-4.2f, -4.0f, -4.6f, 1.9f, 7.3f, 12.5f, 15.0f, 12.8f, 7.6f, 5.1f, -0.9f, -1.3f}, // 2008 - {-7.8f, -8.8f, -4.2f, 0.7f, 9.3f, 13.2f, 15.8f, 15.5f, 11.2f, 0.6f, 0.7f, -8.4f}, // 2009 - {-14.4f, -12.1f, -7.0f, 2.3f, 11.0f, 12.6f, 18.8f, 13.8f, 9.4f, 3.9f, -5.6f, -13.0f}, // 2010 - {-9.0f, -15.2f, -3.8f, 2.6f, 8.3f, 15.9f, 18.6f, 14.9f, 11.1f, 5.3f, 1.8f, -0.2f}, // 2011 - {-8.7f, -11.3f, -2.3f, 0.4f, 7.5f, 12.2f, 16.4f, 14.1f, 9.2f, 3.1f, 0.3f, -12.1f} // 2012 + static const qreal temp[7][12] = { + {-6.7, -11.7, -9.7, 3.3, 9.2, 14.0, 16.3, 17.8, 10.2, 2.1, -2.6, -0.3}, // 2006 + {-6.8, -13.3, 0.2, 1.5, 7.9, 13.4, 16.1, 15.5, 8.2, 5.4, -2.6, -0.8}, // 2007 + {-4.2, -4.0, -4.6, 1.9, 7.3, 12.5, 15.0, 12.8, 7.6, 5.1, -0.9, -1.3}, // 2008 + {-7.8, -8.8, -4.2, 0.7, 9.3, 13.2, 15.8, 15.5, 11.2, 0.6, 0.7, -8.4}, // 2009 + {-14.4, -12.1, -7.0, 2.3, 11.0, 12.6, 18.8, 13.8, 9.4, 3.9, -5.6, -13.0}, // 2010 + {-9.0, -15.2, -3.8, 2.6, 8.3, 15.9, 18.6, 14.9, 11.1, 5.3, 1.8, -0.2}, // 2011 + {-8.7, -11.3, -2.3, 0.4, 7.5, 12.2, 16.4, 14.1, 9.2, 3.1, 0.3, -12.1} // 2012 }; // Create data rows @@ -248,8 +284,8 @@ static int changeCounter = 0; void ChartModifier::addRow() { QBarDataRow *dataRow = new QBarDataRow(m_columnCount); - for (float i = 0; i < m_columnCount; i++) - (*dataRow)[i].setValue(((i + 1) / (float)m_columnCount) * (float)(rand() % 100)); + for (qreal i = 0; i < m_columnCount; i++) + (*dataRow)[i].setValue(((i + 1) / (qreal)m_columnCount) * (qreal)(rand() % 100)); // TODO Needs to be changed to account for data window offset once it is implemented. QString label = QStringLiteral("Add %1").arg(addCounter++); @@ -275,8 +311,8 @@ void ChartModifier::addRows() void ChartModifier::insertRow() { QBarDataRow *dataRow = new QBarDataRow(m_columnCount); - for (float i = 0; i < m_columnCount; i++) - (*dataRow)[i].setValue(((i + 1) / (float)m_columnCount) * (float)(rand() % 100)); + for (qreal i = 0; i < m_columnCount; i++) + (*dataRow)[i].setValue(((i + 1) / (qreal)m_columnCount) * (qreal)(rand() % 100)); // TODO Needs to be changed to account for data window offset once it is implemented. int row = qMax(m_selectedBarPos.x(), 0); @@ -509,24 +545,34 @@ void ChartModifier::setSpecsRatio(int barwidth) void ChartModifier::setSpacingSpecsX(int spacing) { - m_barSpacingX = (float)spacing / 100.0f; + m_barSpacingX = (qreal)spacing / 100.0; m_chart->setBarSpacing(QSizeF(m_barSpacingX, m_barSpacingZ)); } void ChartModifier::setSpacingSpecsZ(int spacing) { - m_barSpacingZ = (float)spacing / 100.0f; + m_barSpacingZ = (qreal)spacing / 100.0; m_chart->setBarSpacing(QSizeF(m_barSpacingX, m_barSpacingZ)); } void ChartModifier::setSampleCountX(int samples) { m_columnCount = samples; - m_chart->setDataWindow(m_rowCount, m_columnCount); + m_genericColumnAxis->setRange(m_genericRowAxis->min(), m_genericRowAxis->min() + samples - 1); } void ChartModifier::setSampleCountZ(int samples) { m_rowCount = samples; - m_chart->setDataWindow(m_rowCount, m_columnCount); + m_genericRowAxis->setRange(m_genericColumnAxis->min(), m_genericColumnAxis->min() + samples - 1); +} + +void ChartModifier::setMinX(int min) +{ + m_genericRowAxis->setRange(min, min + m_rowCount - 1); +} + +void ChartModifier::setMinZ(int min) +{ + m_genericColumnAxis->setRange(min, min + m_rowCount - 1); } diff --git a/tests/barstest/chart.h b/tests/barstest/chart.h index 65d404e0..8c8d9b81 100644 --- a/tests/barstest/chart.h +++ b/tests/barstest/chart.h @@ -62,12 +62,15 @@ public: void setSpacingSpecsZ(int spacing); void setSampleCountX(int samples); void setSampleCountZ(int samples); + void setMinX(int min); + void setMinZ(int min); void start(); void restart(bool dynamicData); void selectBar(); void swapAxis(); void releaseAxes(); void releaseProxies(); + void createMassiveArray(); public slots: void changeShadowQuality(int quality); @@ -81,11 +84,11 @@ private: Q3DBars *m_chart; int m_columnCount; int m_rowCount; - float m_xRotation; - float m_yRotation; + qreal m_xRotation; + qreal m_yRotation; bool m_static; - float m_barSpacingX; - float m_barSpacingZ; + qreal m_barSpacingX; + qreal m_barSpacingZ; int m_fontSize; int m_segments; int m_subSegments; diff --git a/tests/barstest/main.cpp b/tests/barstest/main.cpp index 39341471..0dd61c1d 100644 --- a/tests/barstest/main.cpp +++ b/tests/barstest/main.cpp @@ -87,9 +87,13 @@ int main(int argc, char **argv) removeRowButton->setEnabled(false); QPushButton *removeRowsButton = new QPushButton(widget); - removeRowsButton->setText(QStringLiteral("remove three rows from selected")); + removeRowsButton->setText(QStringLiteral("Remove three rows from selected")); removeRowsButton->setEnabled(false); + QPushButton *massiveArrayButton = new QPushButton(widget); + massiveArrayButton->setText(QStringLiteral("Create massive array")); + massiveArrayButton->setEnabled(false); + QPushButton *themeButton = new QPushButton(widget); themeButton->setText(QStringLiteral("Change theme")); @@ -167,17 +171,30 @@ int main(int argc, char **argv) QSlider *sampleSliderX = new QSlider(Qt::Horizontal, widget); sampleSliderX->setTickInterval(1); - sampleSliderX->setMinimum(2); - sampleSliderX->setValue(10); + sampleSliderX->setMinimum(1); + sampleSliderX->setValue(21); sampleSliderX->setMaximum(200); sampleSliderX->setEnabled(false); QSlider *sampleSliderZ = new QSlider(Qt::Horizontal, widget); sampleSliderZ->setTickInterval(1); - sampleSliderZ->setMinimum(2); - sampleSliderZ->setValue(10); + sampleSliderZ->setMinimum(1); + sampleSliderZ->setValue(21); sampleSliderZ->setMaximum(200); sampleSliderZ->setEnabled(false); + QSlider *minSliderX = new QSlider(Qt::Horizontal, widget); + minSliderX->setTickInterval(1); + minSliderX->setMinimum(0); + minSliderX->setValue(0); + minSliderX->setMaximum(200); + minSliderX->setEnabled(false); + QSlider *minSliderZ = new QSlider(Qt::Horizontal, widget); + minSliderZ->setTickInterval(1); + minSliderZ->setMinimum(0); + minSliderZ->setValue(0); + minSliderZ->setMaximum(200); + minSliderZ->setEnabled(false); + QSlider *fontSizeSlider = new QSlider(Qt::Horizontal, widget); fontSizeSlider->setTickInterval(1); fontSizeSlider->setMinimum(1); @@ -205,6 +222,7 @@ int main(int argc, char **argv) vLayout->addWidget(changeRowsButton, 0, Qt::AlignTop); vLayout->addWidget(removeRowButton, 0, Qt::AlignTop); vLayout->addWidget(removeRowsButton, 0, Qt::AlignTop); + vLayout->addWidget(massiveArrayButton, 0, Qt::AlignTop); vLayout->addWidget(themeButton, 0, Qt::AlignTop); vLayout->addWidget(labelButton, 0, Qt::AlignTop); vLayout->addWidget(styleButton, 0, Qt::AlignTop); @@ -227,6 +245,9 @@ int main(int argc, char **argv) vLayout2->addWidget(new QLabel(QStringLiteral("Adjust sample count")), 0, Qt::AlignTop); vLayout2->addWidget(sampleSliderX, 0, Qt::AlignTop); vLayout2->addWidget(sampleSliderZ, 0, Qt::AlignTop); + vLayout2->addWidget(new QLabel(QStringLiteral("Adjust data window minimums")), 0, Qt::AlignTop); + vLayout2->addWidget(minSliderX, 0, Qt::AlignTop); + vLayout2->addWidget(minSliderZ, 0, Qt::AlignTop); vLayout2->addWidget(backgroundCheckBox, 0, Qt::AlignTop); vLayout2->addWidget(gridCheckBox, 0, Qt::AlignTop); vLayout2->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")), 0, Qt::AlignTop); @@ -255,6 +276,10 @@ int main(int argc, char **argv) &ChartModifier::setSampleCountX); QObject::connect(sampleSliderZ, &QSlider::valueChanged, modifier, &ChartModifier::setSampleCountZ); + QObject::connect(minSliderX, &QSlider::valueChanged, modifier, + &ChartModifier::setMinX); + QObject::connect(minSliderZ, &QSlider::valueChanged, modifier, + &ChartModifier::setMinZ); QObject::connect(shadowQuality, SIGNAL(currentIndexChanged(int)), modifier, SLOT(changeShadowQuality(int))); @@ -283,6 +308,7 @@ int main(int argc, char **argv) QObject::connect(changeRowsButton, &QPushButton::clicked, modifier, &ChartModifier::changeRows); QObject::connect(removeRowButton, &QPushButton::clicked, modifier, &ChartModifier::removeRow); QObject::connect(removeRowsButton, &QPushButton::clicked, modifier, &ChartModifier::removeRows); + QObject::connect(massiveArrayButton, &QPushButton::clicked, modifier, &ChartModifier::createMassiveArray); QObject::connect(selectionButton, &QPushButton::clicked, modifier, &ChartModifier::changeSelectionMode); QObject::connect(setSelectedBarButton, &QPushButton::clicked, modifier, @@ -329,10 +355,16 @@ int main(int argc, char **argv) &QPushButton::setEnabled); QObject::connect(staticCheckBox, &QCheckBox::stateChanged, removeRowsButton, &QPushButton::setEnabled); + QObject::connect(staticCheckBox, &QCheckBox::stateChanged, massiveArrayButton, + &QPushButton::setEnabled); QObject::connect(staticCheckBox, &QCheckBox::stateChanged, sampleSliderX, &QSlider::setEnabled); QObject::connect(staticCheckBox, &QCheckBox::stateChanged, sampleSliderZ, &QSlider::setEnabled); + QObject::connect(staticCheckBox, &QCheckBox::stateChanged, minSliderX, + &QSlider::setEnabled); + QObject::connect(staticCheckBox, &QCheckBox::stateChanged, minSliderZ, + &QSlider::setEnabled); QObject::connect(staticCheckBox, &QCheckBox::stateChanged, swapAxisButton, &QSlider::setEnabled); QObject::connect(staticCheckBox, &QCheckBox::stateChanged, modifier, &ChartModifier::restart); diff --git a/tests/spectrum/spectrumapp/main.cpp b/tests/spectrum/spectrumapp/main.cpp index 51e864e8..c6e2e04f 100644 --- a/tests/spectrum/spectrumapp/main.cpp +++ b/tests/spectrum/spectrumapp/main.cpp @@ -22,6 +22,7 @@ #include <QtDataVisualization/q3dbars.h> #include <QtDataVisualization/qbardataproxy.h> #include <QtDataVisualization/q3dvalueaxis.h> +#include <QtDataVisualization/q3dcategoryaxis.h> #include <QGuiApplication> #include <QAudio> @@ -66,7 +67,8 @@ MainApp::MainApp(Q3DBars *window) m_lowFreq(SpectrumLowFreq), m_highFreq(SpectrumHighFreq) { - m_chart->setDataWindow(SpectrumNumBands * 2, SpectrumNumBands); + m_chart->rowAxis()->setMax(SpectrumNumBands * 2); + m_chart->columnAxis()->setMax(SpectrumNumBands - 1); // Disable grid m_chart->setGridVisible(false); // Disable auto-scaling of height by defining explicit range |