diff options
Diffstat (limited to 'tests')
50 files changed, 1411 insertions, 288 deletions
diff --git a/tests/barstest/barstest.pro b/tests/barstest/barstest.pro index 55fbefbd..108f8aa7 100644 --- a/tests/barstest/barstest.pro +++ b/tests/barstest/barstest.pro @@ -2,8 +2,8 @@ error( "Couldn't find the tests.pri file!" ) } -SOURCES += main.cpp chart.cpp -HEADERS += chart.h +SOURCES += main.cpp chart.cpp custominputhandler.cpp +HEADERS += chart.h custominputhandler.h QT += widgets diff --git a/tests/barstest/chart.cpp b/tests/barstest/chart.cpp index 8bef7479..8ab619ec 100644 --- a/tests/barstest/chart.cpp +++ b/tests/barstest/chart.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -17,15 +17,17 @@ ****************************************************************************/ #include "chart.h" -#include <QtDataVisualization/q3dcategoryaxis.h> -#include <QtDataVisualization/q3dvalueaxis.h> +#include "custominputhandler.h" +#include <QtDataVisualization/qcategory3daxis.h> +#include <QtDataVisualization/qvalue3daxis.h> #include <QtDataVisualization/qbardataproxy.h> #include <QtDataVisualization/q3dscene.h> #include <QtDataVisualization/q3dcamera.h> #include <QtDataVisualization/q3dtheme.h> +#include <QtDataVisualization/q3dinputhandler.h> #include <QTime> -QT_DATAVISUALIZATION_USE_NAMESPACE +using namespace QtDataVisualization; const QString celsiusString = QString(QChar(0xB0)) + "C"; @@ -45,13 +47,14 @@ GraphModifier::GraphModifier(Q3DBars *barchart, QColorDialog *colorDialog) m_minval(-16.0f), m_maxval(20.0f), m_selectedBar(-1, -1), - m_autoAdjustingAxis(new Q3DValueAxis), - m_fixedRangeAxis(new Q3DValueAxis), - m_temperatureAxis(new Q3DValueAxis), - m_yearAxis(new Q3DCategoryAxis), - m_monthAxis(new Q3DCategoryAxis), - m_genericRowAxis(new Q3DCategoryAxis), - m_genericColumnAxis(new Q3DCategoryAxis), + m_selectedSeries(0), + m_autoAdjustingAxis(new QValue3DAxis), + m_fixedRangeAxis(new QValue3DAxis), + m_temperatureAxis(new QValue3DAxis), + m_yearAxis(new QCategory3DAxis), + m_monthAxis(new QCategory3DAxis), + m_genericRowAxis(new QCategory3DAxis), + m_genericColumnAxis(new QCategory3DAxis), m_temperatureData(new QBar3DSeries), m_temperatureData2(new QBar3DSeries), m_genericData(new QBar3DSeries), @@ -63,8 +66,20 @@ GraphModifier::GraphModifier(Q3DBars *barchart, QColorDialog *colorDialog) m_currentAxis(m_fixedRangeAxis), m_negativeValuesOn(false), m_useNullInputHandler(false), - m_defaultInputHandler(0) + m_defaultInputHandler(0), + m_ownTheme(0), + m_builtinTheme(new Q3DTheme(Q3DTheme::ThemeStoneMoss)), + m_customInputHandler(new CustomInputHandler) { + 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++) { @@ -116,12 +131,28 @@ GraphModifier::GraphModifier(Q3DBars *barchart, QColorDialog *colorDialog) m_graph->addAxis(m_genericRowAxis); m_graph->addAxis(m_genericColumnAxis); - m_graph->setTheme(new Q3DTheme(Q3DTheme::ThemeStoneMoss)); - m_graph->setShadowQuality(QDataVis::ShadowQualitySoftMedium); + m_graph->setActiveTheme(m_builtinTheme); + m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualitySoftMedium); + + 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_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_genericData->dataProxy()->setColumnLabels(genericColumnLabels); m_temperatureData->setBaseColor(Qt::red); @@ -166,7 +197,7 @@ GraphModifier::GraphModifier(Q3DBars *barchart, QColorDialog *colorDialog) m_temperatureData->setSingleHighlightGradient(singleHighlightGradient); m_temperatureData->setMultiHighlightGradient(multiHighlightGradient); - m_graph->theme()->setFont(QFont("Times Roman", 20)); + m_graph->activeTheme()->setFont(QFont("Times Roman", 20)); // Release and store the default input handler. m_defaultInputHandler = m_graph->activeInputHandler(); @@ -182,9 +213,26 @@ GraphModifier::GraphModifier(Q3DBars *barchart, QColorDialog *colorDialog) QObject::connect(m_genericData, &QBar3DSeries::selectedBarChanged, this, &GraphModifier::handleSelectionChange); + QObject::connect(m_graph, &Q3DBars::rowAxisChanged, this, + &GraphModifier::handleRowAxisChanged); + QObject::connect(m_graph, &Q3DBars::columnAxisChanged, this, + &GraphModifier::handleColumnAxisChanged); + QObject::connect(m_graph, &Q3DBars::valueAxisChanged, this, + &GraphModifier::handleValueAxisChanged); + QObject::connect(m_graph, &Q3DBars::primarySeriesChanged, this, + &GraphModifier::handlePrimarySeriesChanged); + + QObject::connect(&m_insertRemoveTimer, &QTimer::timeout, this, + &GraphModifier::insertRemoveTimerTimeout); + m_graph->addSeries(m_temperatureData); m_graph->addSeries(m_temperatureData2); + QObject::connect(&m_selectionTimer, &QTimer::timeout, this, + &GraphModifier::triggerSelection); + QObject::connect(&m_rotationTimer, &QTimer::timeout, this, + &GraphModifier::triggerRotation); + resetTemperatureData(); } @@ -507,7 +555,7 @@ void GraphModifier::removeRows() // TODO Needs to be changed to account for data window offset once it is implemented. int row = m_selectedBar.x(); if (row >= 0) { - int startRow = qMax(row - 2, 0); + int startRow = qMax(row - 3, 0); m_genericData->dataProxy()->removeRows(startRow, 3); } } @@ -576,7 +624,10 @@ void GraphModifier::changeTheme() { static int theme = Q3DTheme::ThemeQt; - m_graph->setTheme(new Q3DTheme((Q3DTheme::Theme)theme)); + Q3DTheme *currentTheme = m_graph->activeTheme(); + m_builtinTheme->setType(Q3DTheme::Theme(theme)); + if (currentTheme == m_ownTheme) + m_graph->setActiveTheme(m_builtinTheme); switch (theme) { case Q3DTheme::ThemeQt: @@ -614,35 +665,35 @@ void GraphModifier::changeTheme() void GraphModifier::changeLabelStyle() { - m_graph->theme()->setLabelBackgroundEnabled(!m_graph->theme()->isLabelBackgroundEnabled()); + m_graph->activeTheme()->setLabelBackgroundEnabled(!m_graph->activeTheme()->isLabelBackgroundEnabled()); } void GraphModifier::changeSelectionMode() { static int selectionMode = m_graph->selectionMode(); - if (++selectionMode > (QDataVis::SelectionItemAndColumn | QDataVis::SelectionSlice | QDataVis::SelectionMultiSeries)) - selectionMode = QDataVis::SelectionNone; + if (++selectionMode > (QAbstract3DGraph::SelectionItemAndColumn | QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionMultiSeries)) + selectionMode = QAbstract3DGraph::SelectionNone; - m_graph->setSelectionMode((QDataVis::SelectionFlag)selectionMode); + m_graph->setSelectionMode((QAbstract3DGraph::SelectionFlag)selectionMode); } void GraphModifier::changeFont(const QFont &font) { QFont newFont = font; newFont.setPointSize(m_fontSize); - m_graph->theme()->setFont(newFont); + m_graph->activeTheme()->setFont(newFont); } void GraphModifier::changeFontSize(int fontsize) { m_fontSize = fontsize; - QFont font = m_graph->theme()->font(); + QFont font = m_graph->activeTheme()->font(); font.setPointSize(m_fontSize); - m_graph->theme()->setFont(font); + m_graph->activeTheme()->setFont(font); } -void GraphModifier::shadowQualityUpdatedByVisual(QDataVis::ShadowQuality sq) +void GraphModifier::shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality sq) { int quality = int(sq); // Updates the UI component to show correct shadow quality @@ -654,11 +705,17 @@ void GraphModifier::handleSelectionChange(const QPoint &position) m_selectedBar = position; int index = 0; foreach (QBar3DSeries *series, m_graph->seriesList()) { - if (series == sender()) + if (series == sender()) { + if (series->selectedBar() != QBar3DSeries::invalidSelectionPosition()) + m_selectedSeries = series; break; + } index++; } + if (m_selectedSeries->selectedBar() == QBar3DSeries::invalidSelectionPosition()) + m_selectedSeries = 0; + qDebug() << "Selected bar position:" << position << "series:" << index; } @@ -676,10 +733,29 @@ void GraphModifier::setUseNullInputHandler(bool useNull) m_graph->setActiveInputHandler(m_defaultInputHandler); } +void GraphModifier::handleRowAxisChanged(QCategory3DAxis *axis) +{ + qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_graph->rowAxis()); +} + +void GraphModifier::handleColumnAxisChanged(QCategory3DAxis *axis) +{ + qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_graph->columnAxis()); +} + +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) { - QDataVis::ShadowQuality sq = QDataVis::ShadowQuality(quality); + QAbstract3DGraph::ShadowQuality sq = QAbstract3DGraph::ShadowQuality(quality); m_graph->setShadowQuality(sq); emit shadowQualityChanged(quality); } @@ -688,7 +764,7 @@ void GraphModifier::showFiveSeries() { releaseProxies(); releaseAxes(); - m_graph->setSelectionMode(QDataVis::SelectionItemRowAndColumn | QDataVis::SelectionMultiSeries); + m_graph->setSelectionMode(QAbstract3DGraph::SelectionItemRowAndColumn | QAbstract3DGraph::SelectionMultiSeries); m_dummyData->dataProxy()->resetArray(makeDummyData(), QStringList(), QStringList()); m_dummyData2->dataProxy()->resetArray(makeDummyData(), QStringList(), QStringList()); @@ -735,14 +811,305 @@ 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::insertRemoveTestToggle() +{ + if (m_insertRemoveTimer.isActive()) { + m_insertRemoveTimer.stop(); + m_selectionTimer.stop(); + m_graph->removeSeries(m_dummyData); + m_graph->removeSeries(m_dummyData2); + releaseProxies(); + releaseAxes(); + m_graph->setActiveInputHandler(m_defaultInputHandler); + } else { + releaseProxies(); + releaseAxes(); + m_graph->rowAxis()->setRange(0, 32); + m_graph->columnAxis()->setRange(0, 10); + m_graph->setActiveInputHandler(m_customInputHandler); + m_graph->addSeries(m_dummyData); + m_graph->addSeries(m_dummyData2); + m_insertRemoveStep = 0; + m_insertRemoveTimer.start(100); + m_selectionTimer.start(10); + } +} + +void GraphModifier::toggleRotation() +{ + if (m_rotationTimer.isActive()) + m_rotationTimer.stop(); + else + m_rotationTimer.start(20); +} + +void GraphModifier::insertRemoveTimerTimeout() +{ + if (m_insertRemoveStep < 32) { + for (int k = 0; k < 1; k++) { + QBarDataRow *dataRow = new QBarDataRow(10); + for (float i = 0; i < 10; i++) + (*dataRow)[i].setValue(((i + 1) / 10.0f) * (float)(rand() % 100)); + + QString label = QStringLiteral("Insert %1").arg(insertCounter++); + m_dummyData->dataProxy()->insertRow(0, dataRow, label); + } + } else { + for (int k = 0; k < 1; k++) + m_dummyData->dataProxy()->removeRows(0, 1); + } + + if (m_insertRemoveStep < 16 || (m_insertRemoveStep > 31 && m_insertRemoveStep < 48)) { + for (int k = 0; k < 2; k++) { + QBarDataRow *dataRow = new QBarDataRow(10); + for (float i = 0; i < 10; i++) + (*dataRow)[i].setValue(((i + 1) / 10.0f) * (float)(rand() % 100)); + + QString label = QStringLiteral("Insert %1").arg(insertCounter++); + m_dummyData2->dataProxy()->insertRow(0, dataRow, label); + } + } else { + for (int k = 0; k < 2; k++) + m_dummyData2->dataProxy()->removeRows(0, 1); + } + + if (m_insertRemoveStep++ > 63) + m_insertRemoveStep = 0; +} + +void GraphModifier::triggerSelection() +{ + m_graph->scene()->setSelectionQueryPosition(m_customInputHandler->inputPosition()); +} + +void GraphModifier::triggerRotation() +{ + if (m_selectedSeries) { + QPoint selectedBar = m_selectedSeries->selectedBar(); + if (selectedBar != QBar3DSeries::invalidSelectionPosition()) { + QBarDataItem item(*(m_selectedSeries->dataProxy()->itemAt(selectedBar.x(), selectedBar.y()))); + item.setRotation(item.rotation() + 1.0f); + m_selectedSeries->dataProxy()->setItem(selectedBar.x(), selectedBar.y(), item); + } + } else { + // Rotate the first series instead + static float seriesAngle = 0.0f; + if (m_graph->seriesList().size()) { + QQuaternion rotation = QQuaternion::fromAxisAndAngle(0.0f, 1.0f, 0.0f, seriesAngle++); + m_graph->seriesList().at(0)->setMeshRotation(rotation); + } + } +} + void GraphModifier::setBackgroundEnabled(int enabled) { - m_graph->theme()->setBackgroundEnabled(bool(enabled)); + m_graph->activeTheme()->setBackgroundEnabled(bool(enabled)); } void GraphModifier::setGridEnabled(int enabled) { - m_graph->theme()->setGridEnabled(bool(enabled)); + m_graph->activeTheme()->setGridEnabled(bool(enabled)); } void GraphModifier::rotateX(int rotation) @@ -811,38 +1178,41 @@ void GraphModifier::setMaxY(int max) void GraphModifier::changeColorStyle() { - int style = m_graph->theme()->colorStyle(); + int style = m_graph->activeTheme()->colorStyle(); if (++style > Q3DTheme::ColorStyleRangeGradient) style = Q3DTheme::ColorStyleUniform; - m_graph->theme()->setColorStyle(Q3DTheme::ColorStyle(style)); + m_graph->activeTheme()->setColorStyle(Q3DTheme::ColorStyle(style)); } void GraphModifier::useOwnTheme() { - Q3DTheme *theme = new Q3DTheme(); - theme->setBackgroundEnabled(true); - theme->setGridEnabled(true); - theme->setAmbientLightStrength(0.3f); - theme->setBackgroundColor(QColor(QRgb(0x99ca53))); - QList<QColor> colors; - colors.append(QColor(QRgb(0x209fdf))); - theme->setBaseColors(colors); - theme->setColorStyle(Q3DTheme::ColorStyleUniform); - theme->setGridLineColor(QColor(QRgb(0x99ca53))); - theme->setHighlightLightStrength(7.0f); - theme->setLabelBackgroundEnabled(true); - theme->setLabelBorderEnabled(true); - theme->setLightColor(Qt::white); - theme->setLightStrength(6.0f); - theme->setMultiHighlightColor(QColor(QRgb(0x6d5fd5))); - theme->setSingleHighlightColor(QColor(QRgb(0xf6a625))); - theme->setLabelBackgroundColor(QColor(0xf6, 0xa6, 0x25, 0xa0)); - theme->setLabelTextColor(QColor(QRgb(0x404044))); - theme->setWindowColor(QColor(QRgb(0xffffff))); - - m_graph->setTheme(theme); + // Own theme is persistent, any changes to it via UI will be remembered + if (!m_ownTheme) { + m_ownTheme = new Q3DTheme(); + m_ownTheme->setBackgroundEnabled(true); + m_ownTheme->setGridEnabled(true); + m_ownTheme->setAmbientLightStrength(0.3f); + m_ownTheme->setBackgroundColor(QColor(QRgb(0x99ca53))); + QList<QColor> colors; + colors.append(QColor(QRgb(0x209fdf))); + m_ownTheme->setBaseColors(colors); + m_ownTheme->setColorStyle(Q3DTheme::ColorStyleUniform); + m_ownTheme->setGridLineColor(QColor(QRgb(0x99ca53))); + m_ownTheme->setHighlightLightStrength(7.0f); + m_ownTheme->setLabelBackgroundEnabled(true); + m_ownTheme->setLabelBorderEnabled(true); + m_ownTheme->setLightColor(Qt::white); + m_ownTheme->setLightStrength(6.0f); + m_ownTheme->setMultiHighlightColor(QColor(QRgb(0x6d5fd5))); + m_ownTheme->setSingleHighlightColor(QColor(QRgb(0xf6a625))); + m_ownTheme->setLabelBackgroundColor(QColor(0xf6, 0xa6, 0x25, 0xa0)); + m_ownTheme->setLabelTextColor(QColor(QRgb(0x404044))); + m_ownTheme->setWindowColor(QColor(QRgb(0xffffff))); + } + + m_graph->setActiveTheme(m_ownTheme); m_colorDialog->open(); } @@ -852,7 +1222,7 @@ void GraphModifier::changeBaseColor(const QColor &color) qDebug() << "base color changed to" << color; QList<QColor> colors; colors.append(color); - m_graph->theme()->setBaseColors(colors); + m_graph->activeTheme()->setBaseColors(colors); } void GraphModifier::setGradient() @@ -883,9 +1253,14 @@ void GraphModifier::setGradient() QList<QLinearGradient> barGradients; barGradients.append(barGradient); - m_graph->theme()->setBaseGradients(barGradients); - m_graph->theme()->setSingleHighlightGradient(singleHighlightGradient); - m_graph->theme()->setMultiHighlightGradient(multiHighlightGradient); + m_graph->activeTheme()->setBaseGradients(barGradients); + m_graph->activeTheme()->setSingleHighlightGradient(singleHighlightGradient); + m_graph->activeTheme()->setMultiHighlightGradient(multiHighlightGradient); - m_graph->theme()->setColorStyle(Q3DTheme::ColorStyleObjectGradient); + m_graph->activeTheme()->setColorStyle(Q3DTheme::ColorStyleObjectGradient); +} + +void GraphModifier::toggleMultiseriesScaling() +{ + m_graph->setMultiSeriesUniform(!m_graph->isMultiSeriesUniform()); } diff --git a/tests/barstest/chart.h b/tests/barstest/chart.h index 96038b9f..5758262c 100644 --- a/tests/barstest/chart.h +++ b/tests/barstest/chart.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -22,11 +22,13 @@ #include <QtDataVisualization/q3dbars.h> #include <QtDataVisualization/qabstract3dinputhandler.h> #include <QtDataVisualization/qbar3dseries.h> +#include <QtDataVisualization/q3dtheme.h> #include <QFont> #include <QDebug> #include <QStringList> #include <QPointer> #include <QColorDialog> +#include <QTimer> using namespace QtDataVisualization; @@ -80,15 +82,28 @@ public: void changeColorStyle(); void showFiveSeries(); QBarDataArray *makeDummyData(); + void primarySeriesTest(); + void insertRemoveTestToggle(); + void toggleRotation(); public slots: void flipViews(); void setGradient(); + void toggleMultiseriesScaling(); void changeShadowQuality(int quality); - void shadowQualityUpdatedByVisual(QDataVis::ShadowQuality shadowQuality); + void shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality shadowQuality); void handleSelectionChange(const QPoint &position); void setUseNullInputHandler(bool useNull); + void handleRowAxisChanged(QCategory3DAxis *axis); + void handleColumnAxisChanged(QCategory3DAxis *axis); + void handleValueAxisChanged(QValue3DAxis *axis); + void handlePrimarySeriesChanged(QBar3DSeries *series); + + void insertRemoveTimerTimeout(); + void triggerSelection(); + void triggerRotation(); + signals: void shadowQualityChanged(int quality); @@ -110,13 +125,14 @@ private: QStringList m_months; QStringList m_years; QPoint m_selectedBar; - Q3DValueAxis *m_autoAdjustingAxis; - Q3DValueAxis *m_fixedRangeAxis; - Q3DValueAxis *m_temperatureAxis; - Q3DCategoryAxis *m_yearAxis; - Q3DCategoryAxis *m_monthAxis; - Q3DCategoryAxis *m_genericRowAxis; - Q3DCategoryAxis *m_genericColumnAxis; + QBar3DSeries *m_selectedSeries; + QValue3DAxis *m_autoAdjustingAxis; + QValue3DAxis *m_fixedRangeAxis; + QValue3DAxis *m_temperatureAxis; + QCategory3DAxis *m_yearAxis; + QCategory3DAxis *m_monthAxis; + QCategory3DAxis *m_genericRowAxis; + QCategory3DAxis *m_genericColumnAxis; QBar3DSeries *m_temperatureData; QBar3DSeries *m_temperatureData2; QBar3DSeries *m_genericData; @@ -125,10 +141,17 @@ private: QBar3DSeries *m_dummyData3; QBar3DSeries *m_dummyData4; QBar3DSeries *m_dummyData5; - Q3DValueAxis *m_currentAxis; + QValue3DAxis *m_currentAxis; bool m_negativeValuesOn; bool m_useNullInputHandler; QAbstract3DInputHandler *m_defaultInputHandler; + Q3DTheme *m_ownTheme; + Q3DTheme *m_builtinTheme; + QTimer m_insertRemoveTimer; + int m_insertRemoveStep; + QAbstract3DInputHandler *m_customInputHandler; + QTimer m_selectionTimer; + QTimer m_rotationTimer; }; #endif diff --git a/tests/barstest/custominputhandler.cpp b/tests/barstest/custominputhandler.cpp new file mode 100644 index 00000000..a5734e16 --- /dev/null +++ b/tests/barstest/custominputhandler.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "custominputhandler.h" + +#include <QtDataVisualization/Q3DCamera> + +CustomInputHandler::CustomInputHandler(QObject *parent) : + QAbstract3DInputHandler(parent) +{ +} + +//! [0] +void CustomInputHandler::mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos) +{ + Q_UNUSED(event) + setInputPosition(mousePos); +} +//! [0] + +//! [1] +void CustomInputHandler::wheelEvent(QWheelEvent *event) +{ + // Adjust zoom level based on what zoom range we're in. + int zoomLevel = scene()->activeCamera()->zoomLevel(); + if (zoomLevel > 100) + zoomLevel += event->angleDelta().y() / 12; + else if (zoomLevel > 50) + zoomLevel += event->angleDelta().y() / 60; + else + zoomLevel += event->angleDelta().y() / 120; + if (zoomLevel > 500) + zoomLevel = 500; + else if (zoomLevel < 10) + zoomLevel = 10; + + scene()->activeCamera()->setZoomLevel(zoomLevel); +} +//! [1] diff --git a/tests/barstest/custominputhandler.h b/tests/barstest/custominputhandler.h new file mode 100644 index 00000000..60c88ef7 --- /dev/null +++ b/tests/barstest/custominputhandler.h @@ -0,0 +1,36 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#ifndef CUSTOMINPUTHANDLER_H +#define CUSTOMINPUTHANDLER_H + +#include <QtDataVisualization/QAbstract3DInputHandler> + +using namespace QtDataVisualization; + +class CustomInputHandler : public QAbstract3DInputHandler +{ + Q_OBJECT +public: + explicit CustomInputHandler(QObject *parent = 0); + + virtual void mouseMoveEvent(QMouseEvent *event, const QPoint &mousePos); + virtual void wheelEvent(QWheelEvent *event); +}; + +#endif diff --git a/tests/barstest/main.cpp b/tests/barstest/main.cpp index e18aaed1..8189f917 100644 --- a/tests/barstest/main.cpp +++ b/tests/barstest/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -42,7 +42,14 @@ int main(int argc, char **argv) QVBoxLayout *vLayout = new QVBoxLayout(); QVBoxLayout *vLayout2 = new QVBoxLayout(); - Q3DBars *widgetchart = new Q3DBars(); + // For testing custom surface format + QSurfaceFormat surfaceFormat; + surfaceFormat.setDepthBufferSize(24); +#if !defined(QT_OPENGL_ES_2) + surfaceFormat.setSamples(8); +#endif + + Q3DBars *widgetchart = new Q3DBars(&surfaceFormat); QSize screenSize = widgetchart->screen()->size(); QWidget *container = QWidget::createWindowContainer(widgetchart); @@ -90,7 +97,7 @@ 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 before selected")); removeRowsButton->setEnabled(false); QPushButton *massiveArrayButton = new QPushButton(widget); @@ -103,6 +110,9 @@ int main(int argc, char **argv) QPushButton *labelButton = new QPushButton(widget); labelButton->setText(QStringLiteral("Change label style")); + QPushButton *multiScaleButton = new QPushButton(widget); + multiScaleButton->setText(QStringLiteral("Change multiseries scaling")); + QPushButton *styleButton = new QPushButton(widget); styleButton->setText(QStringLiteral("Change bar style")); @@ -119,6 +129,10 @@ int main(int argc, char **argv) swapAxisButton->setText(QStringLiteral("Swap value axis")); swapAxisButton->setEnabled(false); + QPushButton *insertRemoveTestButton = new QPushButton(widget); + insertRemoveTestButton->setText(QStringLiteral("Toggle insert/remove cycle")); + insertRemoveTestButton->setEnabled(true); + QPushButton *releaseAxesButton = new QPushButton(widget); releaseAxesButton->setText(QStringLiteral("Release all axes")); releaseAxesButton->setEnabled(true); @@ -143,6 +157,14 @@ 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); + + QPushButton *toggleRotationButton = new QPushButton(widget); + toggleRotationButton->setText(QStringLiteral("Toggle rotation")); + toggleRotationButton->setEnabled(true); + QColorDialog *colorDialog = new QColorDialog(widget); QLinearGradient grBtoY(0, 0, 100, 0); @@ -277,16 +299,20 @@ int main(int argc, char **argv) vLayout->addWidget(showFiveSeriesButton, 0, Qt::AlignTop); vLayout->addWidget(themeButton, 0, Qt::AlignTop); vLayout->addWidget(labelButton, 0, Qt::AlignTop); + vLayout->addWidget(multiScaleButton, 0, Qt::AlignTop); vLayout->addWidget(styleButton, 0, Qt::AlignTop); vLayout->addWidget(cameraButton, 0, Qt::AlignTop); vLayout->addWidget(selectionButton, 0, Qt::AlignTop); vLayout->addWidget(setSelectedBarButton, 0, Qt::AlignTop); vLayout->addWidget(swapAxisButton, 0, Qt::AlignTop); + vLayout->addWidget(insertRemoveTestButton, 0, Qt::AlignTop); vLayout->addWidget(releaseAxesButton, 0, Qt::AlignTop); vLayout->addWidget(releaseProxiesButton, 1, Qt::AlignTop); 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(toggleRotationButton, 0, Qt::AlignTop); vLayout->addWidget(gradientBtoYPB, 1, Qt::AlignTop); vLayout2->addWidget(staticCheckBox, 0, Qt::AlignTop); @@ -350,6 +376,8 @@ int main(int argc, char **argv) QObject::connect(fontSizeSlider, &QSlider::valueChanged, modifier, &GraphModifier::changeFontSize); + QObject::connect(multiScaleButton, &QPushButton::clicked, modifier, + &GraphModifier::toggleMultiseriesScaling); QObject::connect(styleButton, &QPushButton::clicked, modifier, &GraphModifier::changeStyle); QObject::connect(cameraButton, &QPushButton::clicked, modifier, &GraphModifier::changePresetCamera); @@ -373,6 +401,8 @@ int main(int argc, char **argv) &GraphModifier::selectBar); QObject::connect(swapAxisButton, &QPushButton::clicked, modifier, &GraphModifier::swapAxis); + QObject::connect(insertRemoveTestButton, &QPushButton::clicked, modifier, + &GraphModifier::insertRemoveTestToggle); QObject::connect(releaseAxesButton, &QPushButton::clicked, modifier, &GraphModifier::releaseAxes); QObject::connect(releaseProxiesButton, &QPushButton::clicked, modifier, @@ -384,6 +414,10 @@ 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(toggleRotationButton, &QPushButton::clicked, modifier, + &GraphModifier::toggleRotation); QObject::connect(colorDialog, &QColorDialog::currentColorChanged, modifier, &GraphModifier::changeBaseColor); QObject::connect(gradientBtoYPB, &QPushButton::clicked, modifier, diff --git a/tests/directional/directional.pro b/tests/directional/directional.pro new file mode 100644 index 00000000..7138e1f2 --- /dev/null +++ b/tests/directional/directional.pro @@ -0,0 +1,10 @@ +!include( ../tests.pri ) { + error( "Couldn't find the tests.pri file!" ) +} + +SOURCES += main.cpp scatterdatamodifier.cpp +HEADERS += scatterdatamodifier.h + +QT += widgets + +INSTALLS += target diff --git a/tests/directional/main.cpp b/tests/directional/main.cpp new file mode 100644 index 00000000..f4871a70 --- /dev/null +++ b/tests/directional/main.cpp @@ -0,0 +1,170 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "scatterdatamodifier.h" + +#include <QApplication> +#include <QWidget> +#include <QHBoxLayout> +#include <QVBoxLayout> +#include <QPushButton> +#include <QCheckBox> +#include <QComboBox> +#include <QFontComboBox> +#include <QLabel> +#include <QScreen> +#include <QFontDatabase> + +int main(int argc, char **argv) +{ + //! [0] + QApplication app(argc, argv); + Q3DScatter *graph = new Q3DScatter(); + QWidget *container = QWidget::createWindowContainer(graph); + //! [0] + + QSize screenSize = graph->screen()->size(); + container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.5)); + container->setMaximumSize(screenSize); + container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + container->setFocusPolicy(Qt::StrongFocus); + + //! [1] + QWidget *widget = new QWidget; + QHBoxLayout *hLayout = new QHBoxLayout(widget); + QVBoxLayout *vLayout = new QVBoxLayout(); + hLayout->addWidget(container, 1); + hLayout->addLayout(vLayout); + //! [1] + + widget->setWindowTitle(QStringLiteral("Directional scatter")); + + //! [4] + QComboBox *themeList = new QComboBox(widget); + themeList->addItem(QStringLiteral("Qt")); + themeList->addItem(QStringLiteral("Primary Colors")); + themeList->addItem(QStringLiteral("Digia")); + themeList->addItem(QStringLiteral("Stone Moss")); + themeList->addItem(QStringLiteral("Army Blue")); + themeList->addItem(QStringLiteral("Retro")); + themeList->addItem(QStringLiteral("Ebony")); + themeList->addItem(QStringLiteral("Isabelle")); + themeList->setCurrentIndex(6); + + QPushButton *labelButton = new QPushButton(widget); + labelButton->setText(QStringLiteral("Change label style")); + + QComboBox *itemStyleList = new QComboBox(widget); + itemStyleList->addItem(QStringLiteral("Arrow"), int(QAbstract3DSeries::MeshArrow)); + itemStyleList->addItem(QStringLiteral("Cube"), int(QAbstract3DSeries::MeshCube)); + itemStyleList->addItem(QStringLiteral("Minimal"), int(QAbstract3DSeries::MeshMinimal)); + itemStyleList->setCurrentIndex(-1); + + QPushButton *cameraButton = new QPushButton(widget); + cameraButton->setText(QStringLiteral("Change camera preset")); + + QPushButton *toggleRotationButton = new QPushButton(widget); + toggleRotationButton->setText(QStringLiteral("Toggle rotation")); + + QCheckBox *backgroundCheckBox = new QCheckBox(widget); + backgroundCheckBox->setText(QStringLiteral("Show background")); + backgroundCheckBox->setChecked(true); + + QCheckBox *gridCheckBox = new QCheckBox(widget); + gridCheckBox->setText(QStringLiteral("Show grid")); + gridCheckBox->setChecked(true); + + QComboBox *shadowQuality = new QComboBox(widget); + shadowQuality->addItem(QStringLiteral("None")); + shadowQuality->addItem(QStringLiteral("Low")); + shadowQuality->addItem(QStringLiteral("Medium")); + shadowQuality->addItem(QStringLiteral("High")); + shadowQuality->addItem(QStringLiteral("Low Soft")); + shadowQuality->addItem(QStringLiteral("Medium Soft")); + shadowQuality->addItem(QStringLiteral("High Soft")); + shadowQuality->setCurrentIndex(4); + + QFontComboBox *fontList = new QFontComboBox(widget); + fontList->setCurrentFont(QFont("Arial")); + //! [4] + + //! [5] + vLayout->addWidget(labelButton, 0, Qt::AlignTop); + vLayout->addWidget(cameraButton, 0, Qt::AlignTop); + vLayout->addWidget(toggleRotationButton, 0, Qt::AlignTop); + vLayout->addWidget(backgroundCheckBox); + vLayout->addWidget(gridCheckBox); + vLayout->addWidget(new QLabel(QStringLiteral("Change dot style"))); + vLayout->addWidget(itemStyleList); + vLayout->addWidget(new QLabel(QStringLiteral("Change theme"))); + vLayout->addWidget(themeList); + vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality"))); + vLayout->addWidget(shadowQuality); + vLayout->addWidget(new QLabel(QStringLiteral("Change font"))); + vLayout->addWidget(fontList, 1, Qt::AlignTop); + //! [5] + + //! [2] + ScatterDataModifier *modifier = new ScatterDataModifier(graph); + //! [2] + + //! [6] + QObject::connect(cameraButton, &QPushButton::clicked, modifier, + &ScatterDataModifier::changePresetCamera); + QObject::connect(toggleRotationButton, &QPushButton::clicked, modifier, + &ScatterDataModifier::toggleRotation); + QObject::connect(labelButton, &QPushButton::clicked, modifier, + &ScatterDataModifier::changeLabelStyle); + + QObject::connect(backgroundCheckBox, &QCheckBox::stateChanged, modifier, + &ScatterDataModifier::setBackgroundEnabled); + QObject::connect(gridCheckBox, &QCheckBox::stateChanged, modifier, + &ScatterDataModifier::setGridEnabled); + + QObject::connect(modifier, &ScatterDataModifier::backgroundEnabledChanged, + backgroundCheckBox, &QCheckBox::setChecked); + QObject::connect(modifier, &ScatterDataModifier::gridEnabledChanged, + gridCheckBox, &QCheckBox::setChecked); + QObject::connect(itemStyleList, SIGNAL(currentIndexChanged(int)), modifier, + SLOT(changeStyle(int))); + + QObject::connect(themeList, SIGNAL(currentIndexChanged(int)), modifier, + SLOT(changeTheme(int))); + + QObject::connect(shadowQuality, SIGNAL(currentIndexChanged(int)), modifier, + SLOT(changeShadowQuality(int))); + + QObject::connect(modifier, &ScatterDataModifier::shadowQualityChanged, shadowQuality, + &QComboBox::setCurrentIndex); + QObject::connect(graph, &Q3DScatter::shadowQualityChanged, modifier, + &ScatterDataModifier::shadowQualityUpdatedByVisual); + + QObject::connect(fontList, &QFontComboBox::currentFontChanged, modifier, + &ScatterDataModifier::changeFont); + + QObject::connect(modifier, &ScatterDataModifier::fontChanged, fontList, + &QFontComboBox::setCurrentFont); + //! [6] + + itemStyleList->setCurrentIndex(0); + + //! [3] + widget->show(); + return app.exec(); + //! [3] +} diff --git a/tests/directional/scatterdatamodifier.cpp b/tests/directional/scatterdatamodifier.cpp new file mode 100644 index 00000000..96a7b975 --- /dev/null +++ b/tests/directional/scatterdatamodifier.cpp @@ -0,0 +1,210 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "scatterdatamodifier.h" +#include <QtDataVisualization/qscatterdataproxy.h> +#include <QtDataVisualization/qvalue3daxis.h> +#include <QtDataVisualization/q3dscene.h> +#include <QtDataVisualization/q3dcamera.h> +#include <QtDataVisualization/qscatter3dseries.h> +#include <QtDataVisualization/q3dtheme.h> +#include <qmath.h> +#include <QComboBox> + +using namespace QtDataVisualization; + +const int numberOfCols = 8; +const int numberOfRows = 8; +const float limit = 8.0f; +const float PI = 3.14159f; +//#define HEDGEHOG + +ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter) + : m_graph(scatter), + m_fontSize(40.0f), + m_style(QAbstract3DSeries::MeshUserDefined), + m_smooth(true) +{ + m_graph->activeTheme()->setType(Q3DTheme::ThemeEbony); + QFont font = m_graph->activeTheme()->font(); + font.setPointSize(m_fontSize); + m_graph->activeTheme()->setFont(font); + m_graph->setShadowQuality(QAbstract3DGraph::ShadowQualitySoftLow); + m_graph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront); + + m_graph->setAxisX(new QValue3DAxis); + m_graph->setAxisY(new QValue3DAxis); + m_graph->setAxisZ(new QValue3DAxis); + + QScatterDataProxy *proxy = new QScatterDataProxy; + QScatter3DSeries *series = new QScatter3DSeries(proxy); + series->setItemLabelFormat("@xTitle: @xLabel @yTitle: @yLabel @zTitle: @zLabel"); + m_graph->addSeries(series); + + QObject::connect(&m_rotationTimer, &QTimer::timeout, this, + &ScatterDataModifier::triggerRotation); + + addData(); +} + +ScatterDataModifier::~ScatterDataModifier() +{ + delete m_graph; +} + +void ScatterDataModifier::addData() +{ + // Configure the axes according to the data + m_graph->axisX()->setTitle("X"); + m_graph->axisY()->setTitle("Y"); + m_graph->axisZ()->setTitle("Z"); + m_graph->axisX()->setRange(-limit, limit); + m_graph->axisY()->setRange(-1.0f, 1.0f); + m_graph->axisZ()->setRange(-limit, limit); + + QScatterDataArray *dataArray = new QScatterDataArray; + dataArray->resize(numberOfCols * numberOfRows); + QScatterDataItem *ptrToDataArray = &dataArray->first(); + + float angleStep = 360.0f / float(numberOfCols); + float latAngleStep = 100.0f / float(numberOfRows); + + for (float i = 0; i < numberOfRows; i++) { + float latAngle = float(i) * latAngleStep + 40.0f; + float radius = qSin(latAngle * PI / 180.0f) * limit; + float y = qCos(latAngle * PI / 180.0f) * 1.0f; +#ifdef HEDGEHOG + float angleZ = (qAtan((y * limit / 2.0f) / radius) * 180.0f / PI); + QQuaternion rotationZ = QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 0.0f, 1.0f), angleZ - 90.0f); +#endif + for (float j = 0; j < numberOfCols; j++) { + float angle = float(j) * angleStep; + float x = qCos(angle * PI / 180.0f) * radius; + float z = qSin(angle * PI / 180.0f) * radius; + + float angleY = (qAtan(z / x) * 180.0f / PI); + if (x < 0) + angleY = 180.0f + angleY; + if (x > 0 && z < 0) + angleY = 360.0f + angleY; +#ifdef HEDGEHOG + QQuaternion rotationY = QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), angleY); + QQuaternion rotation = rotationY * rotationZ; +#else + QQuaternion rotation = QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), angleY) * + QQuaternion::fromAxisAndAngle(QVector3D(1.0f, 0.0f, 0.0f), -90.0f); +#endif + + ptrToDataArray->setPosition(QVector3D(x, y, z)); + ptrToDataArray->setRotation(rotation); + ptrToDataArray++; + } + } + + m_graph->seriesList().at(0)->dataProxy()->resetArray(dataArray); +} + +//! [8] +void ScatterDataModifier::changeStyle(int style) +{ + QComboBox *comboBox = qobject_cast<QComboBox *>(sender()); + if (comboBox) { + m_style = QAbstract3DSeries::Mesh(comboBox->itemData(style).toInt()); + if (m_graph->seriesList().size()) + m_graph->seriesList().at(0)->setMesh(m_style); + } +} + +void ScatterDataModifier::changeTheme(int theme) +{ + Q3DTheme *currentTheme = m_graph->activeTheme(); + currentTheme->setType(Q3DTheme::Theme(theme)); + emit backgroundEnabledChanged(currentTheme->isBackgroundEnabled()); + emit gridEnabledChanged(currentTheme->isGridEnabled()); + emit fontChanged(currentTheme->font()); +} + +void ScatterDataModifier::changePresetCamera() +{ + static int preset = Q3DCamera::CameraPresetFrontLow; + + m_graph->scene()->activeCamera()->setCameraPreset((Q3DCamera::CameraPreset)preset); + + if (++preset > Q3DCamera::CameraPresetDirectlyBelow) + preset = Q3DCamera::CameraPresetFrontLow; +} + +void ScatterDataModifier::changeLabelStyle() +{ + m_graph->activeTheme()->setLabelBackgroundEnabled(!m_graph->activeTheme()->isLabelBackgroundEnabled()); +} + +void ScatterDataModifier::changeFont(const QFont &font) +{ + QFont newFont = font; + newFont.setPointSizeF(m_fontSize); + m_graph->activeTheme()->setFont(newFont); +} + +void ScatterDataModifier::shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality sq) +{ + int quality = int(sq); + emit shadowQualityChanged(quality); // connected to a checkbox in main.cpp +} + +void ScatterDataModifier::triggerRotation() +{ + if (m_graph->seriesList().size()) { + int selectedIndex = m_graph->seriesList().at(0)->selectedItem(); + if (selectedIndex != QScatter3DSeries::invalidSelectionIndex()) { + static float itemAngle = 0.0f; + QScatterDataItem item(*(m_graph->seriesList().at(0)->dataProxy()->itemAt(selectedIndex))); + QQuaternion itemRotation = QQuaternion::fromAxisAndAngle(0.0f, 0.0f, 1.0f, itemAngle++); + item.setRotation(itemRotation); + m_graph->seriesList().at(0)->dataProxy()->setItem(selectedIndex, item); + } else { + static float seriesAngle = 0.0f; + QQuaternion rotation = QQuaternion::fromAxisAndAngle(1.0f, 1.0f, 1.0f, seriesAngle++); + m_graph->seriesList().at(0)->setMeshRotation(rotation); + } + } +} + +void ScatterDataModifier::changeShadowQuality(int quality) +{ + QAbstract3DGraph::ShadowQuality sq = QAbstract3DGraph::ShadowQuality(quality); + m_graph->setShadowQuality(sq); +} + +void ScatterDataModifier::setBackgroundEnabled(int enabled) +{ + m_graph->activeTheme()->setBackgroundEnabled((bool)enabled); +} + +void ScatterDataModifier::setGridEnabled(int enabled) +{ + m_graph->activeTheme()->setGridEnabled((bool)enabled); +} + +void ScatterDataModifier::toggleRotation() +{ + if (m_rotationTimer.isActive()) + m_rotationTimer.stop(); + else + m_rotationTimer.start(20); +} diff --git a/tests/directional/scatterdatamodifier.h b/tests/directional/scatterdatamodifier.h new file mode 100644 index 00000000..b87fa89f --- /dev/null +++ b/tests/directional/scatterdatamodifier.h @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#ifndef SCATTERDATAMODIFIER_H +#define SCATTERDATAMODIFIER_H + +#include <QtDataVisualization/q3dscatter.h> +#include <QtDataVisualization/qabstract3dseries.h> +#include <QtGui/QFont> +#include <QtCore/QTimer> + +using namespace QtDataVisualization; + +class ScatterDataModifier : public QObject +{ + Q_OBJECT +public: + explicit ScatterDataModifier(Q3DScatter *scatter); + ~ScatterDataModifier(); + + void addData(); + void changeStyle(); + void changePresetCamera(); + void changeLabelStyle(); + void changeFont(const QFont &font); + void changeFontSize(int fontsize); + void setBackgroundEnabled(int enabled); + void setGridEnabled(int enabled); + void toggleRotation(); + void start(); + +public slots: + void changeStyle(int style); + void changeTheme(int theme); + void changeShadowQuality(int quality); + void shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality shadowQuality); + void triggerRotation(); + +signals: + void backgroundEnabledChanged(bool enabled); + void gridEnabledChanged(bool enabled); + void shadowQualityChanged(int quality); + void fontChanged(QFont font); + +private: + Q3DScatter *m_graph; + int m_fontSize; + QAbstract3DSeries::Mesh m_style; + bool m_smooth; + QTimer m_rotationTimer; +}; + +#endif diff --git a/tests/kinectsurface/main.cpp b/tests/kinectsurface/main.cpp index 04bfc207..1e7fe118 100644 --- a/tests/kinectsurface/main.cpp +++ b/tests/kinectsurface/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/kinectsurface/surfacedata.cpp b/tests/kinectsurface/surfacedata.cpp index fe94519a..85d048a5 100644 --- a/tests/kinectsurface/surfacedata.cpp +++ b/tests/kinectsurface/surfacedata.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -20,12 +20,17 @@ #include "surfacedata.h" #include "QKinectWrapper.h" -#include <QtDataVisualization/Q3DValueAxis> +#include <QtDataVisualization/QValue3DAxis> +#include <QtDataVisualization/Q3DCamera> +#include <QtDataVisualization/QBar3DSeries> +#include <QtDataVisualization/QScatter3DSeries> +#include <QtDataVisualization/QSurface3DSeries> +#include <QtDataVisualization/Q3DTheme> #include <QScrollBar> #include <QSize> #include <QImage> -QT_DATAVISUALIZATION_USE_NAMESPACE +using namespace QtDataVisualization; SurfaceData::SurfaceData(Q3DSurface *surface, Q3DScatter *scatter, Q3DBars *bars, QTextEdit *statusArea) : @@ -39,29 +44,33 @@ SurfaceData::SurfaceData(Q3DSurface *surface, Q3DScatter *scatter, Q3DBars *bars m_mode(Surface) { // Initialize surface - m_surface->setTheme(QDataVis::ThemeIsabelle); + m_surface->activeTheme()->setType(Q3DTheme::ThemeIsabelle); QLinearGradient gradient; gradient.setColorAt(0.0, Qt::black); gradient.setColorAt(0.33, Qt::blue); gradient.setColorAt(0.67, Qt::red); gradient.setColorAt(1.0, Qt::yellow); - m_surface->setSelectionMode(QDataVis::SelectionNone); - m_surface->setGridVisible(false); - m_surface->setGradient(gradient); + m_surface->setSelectionMode(QAbstract3DGraph::SelectionNone); + m_surface->activeTheme()->setGridEnabled(false); + m_surface->activeTheme()->setBackgroundEnabled(false); + m_surface->scene()->activeCamera()->setCameraPosition(0.0, 90.0, 150); m_surface->axisY()->setMax(255); - m_surface->setSurfaceGridEnabled(false); - m_surface->setBackgroundVisible(false); - m_surface->setFlatShadingEnabled(true); - m_surface->setActiveDataProxy(new QHeightMapSurfaceDataProxy()); - m_surface->setCameraPosition(0.0, 90.0, 105); + QSurface3DSeries *series1 = new QSurface3DSeries(new QHeightMapSurfaceDataProxy()); + series1->setFlatShadingEnabled(true); + series1->setDrawMode(QSurface3DSeries::DrawSurface); + series1->setColorStyle(Q3DTheme::ColorStyleRangeGradient); + series1->setBaseGradient(gradient); + m_surface->addSeries(series1); // Initialize scatter - m_scatter->setTheme(QDataVis::ThemeStoneMoss); - m_scatter->setSelectionMode(QDataVis::SelectionNone); - m_scatter->setGridVisible(false); - m_scatter->setObjectType(QDataVis::MeshDots, false); - m_scatter->setShadowQuality(QDataVis::ShadowQualitySoftLow); - m_scatter->setCameraPosition(0.0, 85.0, 110); + m_scatter->activeTheme()->setType(Q3DTheme::ThemeStoneMoss); + m_scatter->setSelectionMode(QAbstract3DGraph::SelectionNone); + m_scatter->activeTheme()->setGridEnabled(false); + m_scatter->setShadowQuality(QAbstract3DGraph::ShadowQualitySoftLow); + m_scatter->scene()->activeCamera()->setCameraPosition(0.0, 85.0, 150); + QScatter3DSeries *series2 = new QScatter3DSeries; + series2->setMesh(QAbstract3DSeries::MeshPoint); + m_scatter->addSeries(series2); m_scatter->axisY()->setMin(-128); m_scatter->axisY()->setMax(128); m_scatter->axisX()->setMin(-m_resolution.width() / 2); @@ -70,16 +79,16 @@ SurfaceData::SurfaceData(Q3DSurface *surface, Q3DScatter *scatter, Q3DBars *bars m_scatter->axisZ()->setMax(m_resolution.height() / 2); // Initialize bars - m_bars->setTheme(QDataVis::ThemeQt); - m_bars->setSelectionMode(QDataVis::SelectionNone); - m_bars->setGridVisible(false); - m_bars->setBarType(QDataVis::MeshBars, true); -#if 1 - m_bars->setShadowQuality(QDataVis::ShadowQualityLow); -#else + m_bars->activeTheme()->setType(Q3DTheme::ThemeQt); + m_bars->setSelectionMode(QAbstract3DGraph::SelectionNone); + m_bars->activeTheme()->setGridEnabled(false); + m_bars->setShadowQuality(QAbstract3DGraph::ShadowQualityLow); m_bars->setBarSpacing(QSizeF(0.0, 0.0)); -#endif - m_bars->setCameraPosition(0.0, 75.0); + m_bars->scene()->activeCamera()->setCameraPosition(0.0, 75.0, 150); + QBar3DSeries *series3 = new QBar3DSeries; + series3->setMesh(QAbstract3DSeries::MeshBar); + series3->setMeshSmooth(true); + m_bars->addSeries(series3); m_bars->valueAxis()->setMax(255); // Hide scroll bar @@ -92,21 +101,10 @@ SurfaceData::SurfaceData(Q3DSurface *surface, Q3DScatter *scatter, Q3DBars *bars } SurfaceData::~SurfaceData() -{ // HACK: The current context needs to be destroyed last - // TODO: Fix properly in datavis code somehow - if (m_mode == Surface) { - delete m_scatter; - delete m_bars; - delete m_surface; - } else if (m_mode == MeshBars) { - delete m_scatter; - delete m_surface; - delete m_bars; - } else { - delete m_bars; - delete m_surface; - delete m_scatter; - } +{ + delete m_bars; + delete m_surface; + delete m_scatter; } void SurfaceData::updateData() @@ -114,11 +112,12 @@ void SurfaceData::updateData() QImage depthMap = m_kinect.getDepth(); if (m_resize) // Resize for better performance depthMap = depthMap.scaled(m_resolution); - if (m_mode != Surface) + if (m_mode != Surface) { setData(depthMap); - else - static_cast<QHeightMapSurfaceDataProxy *>(m_surface->activeDataProxy())->setHeightMap( + } else { + static_cast<QHeightMapSurfaceDataProxy *>(m_surface->seriesList().at(0)->dataProxy())->setHeightMap( depthMap); + } } void SurfaceData::updateStatus(QKinect::KinectStatus status) @@ -164,7 +163,7 @@ void SurfaceData::stop() void SurfaceData::setDistance(int distance) { - m_kinect.setMaxDist(unsigned int(distance * 100)); + m_kinect.setMaxDist((unsigned int)(distance * 100)); } void SurfaceData::setResolution(int selection) @@ -226,24 +225,26 @@ void SurfaceData::scrollDown() void SurfaceData::useGradientOne() { - m_surface->setTheme(QDataVis::ThemeIsabelle); + m_surface->activeTheme()->setType(Q3DTheme::ThemeIsabelle); QLinearGradient gradient; gradient.setColorAt(0.0, Qt::black); gradient.setColorAt(0.33, Qt::blue); gradient.setColorAt(0.67, Qt::red); gradient.setColorAt(1.0, Qt::yellow); - m_surface->setGradient(gradient); + m_surface->seriesList().at(0)->setBaseGradient(gradient); + m_surface->seriesList().at(0)->setColorStyle(Q3DTheme::ColorStyleRangeGradient); m_statusArea->append(QStringLiteral("<b>Colors:</b> Thermal image imitation")); } void SurfaceData::useGradientTwo() { - m_surface->setTheme(QDataVis::ThemeQt); + m_surface->activeTheme()->setType(Q3DTheme::ThemeQt); QLinearGradient gradient; gradient.setColorAt(0.0, Qt::white); gradient.setColorAt(0.8, Qt::red); gradient.setColorAt(1.0, Qt::green); - m_surface->setGradient(gradient); + m_surface->seriesList().at(0)->setBaseGradient(gradient); + m_surface->seriesList().at(0)->setColorStyle(Q3DTheme::ColorStyleRangeGradient); m_statusArea->append(QStringLiteral("<b>Colors:</b> Highlight foreground")); } @@ -278,7 +279,7 @@ void SurfaceData::setData(const QImage &image) } QScatterDataArray *dataArray = new QScatterDataArray(m_scatterDataArray->mid(0, count)); - static_cast<QScatterDataProxy *>(m_scatter->activeDataProxy())->resetArray(dataArray); + m_scatter->seriesList().at(0)->dataProxy()->resetArray(dataArray); } else { QBarDataArray *dataArray = m_barDataArray; for (int i = 0; i < imageHeight; i++, bitCount -= widthBits) { @@ -287,7 +288,7 @@ void SurfaceData::setData(const QImage &image) newRow[j] = qreal(bits[bitCount + (j * 4)]); } - static_cast<QBarDataProxy *>(m_bars->activeDataProxy())->resetArray(dataArray); + m_bars->seriesList().at(0)->dataProxy()->resetArray(dataArray); } } diff --git a/tests/kinectsurface/surfacedata.h b/tests/kinectsurface/surfacedata.h index fcae03b4..7193e446 100644 --- a/tests/kinectsurface/surfacedata.h +++ b/tests/kinectsurface/surfacedata.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/minimalbars/minimalbars.pro b/tests/minimalbars/minimalbars.pro index b948a31f..bfb48f68 100644 --- a/tests/minimalbars/minimalbars.pro +++ b/tests/minimalbars/minimalbars.pro @@ -1,4 +1,8 @@ -QT += core gui datavisualization +!include( ../tests.pri ) { + error( "Couldn't find the tests.pri file!" ) +} + +QT += core gui datavisualization TARGET = MinimalBars TEMPLATE = app diff --git a/tests/minimalscatter/minimalscatter.pro b/tests/minimalscatter/minimalscatter.pro index 6fd9913d..27147be6 100644 --- a/tests/minimalscatter/minimalscatter.pro +++ b/tests/minimalscatter/minimalscatter.pro @@ -1,4 +1,8 @@ -QT += core gui datavisualization +!include( ../tests.pri ) { + error( "Couldn't find the tests.pri file!" ) +} + +QT += core gui datavisualization TARGET = MinimalScatter TEMPLATE = app diff --git a/tests/minimalsurface/minimalsurface.pro b/tests/minimalsurface/minimalsurface.pro index 4ff9b485..b70d4f76 100644 --- a/tests/minimalsurface/minimalsurface.pro +++ b/tests/minimalsurface/minimalsurface.pro @@ -1,4 +1,8 @@ -QT += core gui datavisualization +!include( ../tests.pri ) { + error( "Couldn't find the tests.pri file!" ) +} + +QT += core gui datavisualization TARGET = minimalSurface TEMPLATE = app diff --git a/tests/multigraphs/data.cpp b/tests/multigraphs/data.cpp index 99354caf..1164a2f1 100644 --- a/tests/multigraphs/data.cpp +++ b/tests/multigraphs/data.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -19,7 +19,7 @@ #define NOMINMAX #include "data.h" -#include <QtDataVisualization/Q3DValueAxis> +#include <QtDataVisualization/QValue3DAxis> #include <QtDataVisualization/Q3DCamera> #include <QtDataVisualization/QBar3DSeries> #include <QtDataVisualization/QScatter3DSeries> @@ -29,7 +29,7 @@ #include <QSize> #include <QImage> -QT_DATAVISUALIZATION_USE_NAMESPACE +using namespace QtDataVisualization; Data::Data(Q3DSurface *surface, Q3DScatter *scatter, Q3DBars *bars, QTextEdit *statusArea, QWidget *widget) : @@ -42,18 +42,20 @@ Data::Data(Q3DSurface *surface, Q3DScatter *scatter, Q3DBars *bars, m_resolution(QSize(300, 300)), m_resolutionLevel(0), m_mode(Surface), + m_scatterDataArray(0), + m_barDataArray(0), m_started(false) { // Initialize surface - m_surface->setTheme(new Q3DTheme(Q3DTheme::ThemeIsabelle)); + m_surface->activeTheme()->setType(Q3DTheme::ThemeIsabelle); QLinearGradient gradient; gradient.setColorAt(0.0, Qt::black); gradient.setColorAt(0.33, Qt::blue); gradient.setColorAt(0.67, Qt::red); gradient.setColorAt(1.0, Qt::yellow); - m_surface->setSelectionMode(QDataVis::SelectionNone); - m_surface->theme()->setGridEnabled(false); - m_surface->theme()->setBackgroundEnabled(false); + m_surface->setSelectionMode(QAbstract3DGraph::SelectionNone); + m_surface->activeTheme()->setGridEnabled(false); + m_surface->activeTheme()->setBackgroundEnabled(false); m_surface->scene()->activeCamera()->setCameraPosition(0.0, 90.0, 150); QSurface3DSeries *series1 = new QSurface3DSeries(new QHeightMapSurfaceDataProxy()); series1->setFlatShadingEnabled(true); @@ -63,20 +65,20 @@ Data::Data(Q3DSurface *surface, Q3DScatter *scatter, Q3DBars *bars, m_surface->addSeries(series1); // Initialize scatter - m_scatter->setTheme(new Q3DTheme(Q3DTheme::ThemeStoneMoss)); - m_scatter->setSelectionMode(QDataVis::SelectionNone); - m_scatter->theme()->setGridEnabled(false); - m_scatter->setShadowQuality(QDataVis::ShadowQualitySoftLow); + m_scatter->activeTheme()->setType(Q3DTheme::ThemeStoneMoss); + m_scatter->setSelectionMode(QAbstract3DGraph::SelectionNone); + m_scatter->activeTheme()->setGridEnabled(false); + m_scatter->setShadowQuality(QAbstract3DGraph::ShadowQualitySoftLow); m_scatter->scene()->activeCamera()->setCameraPosition(0.0, 85.0, 150); QScatter3DSeries *series2 = new QScatter3DSeries; series2->setMesh(QAbstract3DSeries::MeshPoint); m_scatter->addSeries(series2); // Initialize bars - m_bars->setTheme(new Q3DTheme(Q3DTheme::ThemeQt)); - m_bars->setSelectionMode(QDataVis::SelectionItemAndRow | QDataVis::SelectionSlice); - m_bars->theme()->setGridEnabled(false); - m_bars->setShadowQuality(QDataVis::ShadowQualityLow); + m_bars->activeTheme()->setType(Q3DTheme::ThemeQt); + m_bars->setSelectionMode(QAbstract3DGraph::SelectionItemAndRow | QAbstract3DGraph::SelectionSlice); + m_bars->activeTheme()->setGridEnabled(false); + m_bars->setShadowQuality(QAbstract3DGraph::ShadowQualityLow); m_bars->setBarSpacing(QSizeF(0.0, 0.0)); m_bars->scene()->activeCamera()->setCameraPosition(0.0, 75.0, 150); QBar3DSeries *series3 = new QBar3DSeries; @@ -88,21 +90,10 @@ Data::Data(Q3DSurface *surface, Q3DScatter *scatter, Q3DBars *bars, } Data::~Data() -{ // HACK: The current context needs to be destroyed last - // TODO: Fix properly in datavis code somehow - if (m_mode == Surface) { - delete m_scatter; - delete m_bars; - delete m_surface; - } else if (m_mode == Bars) { - delete m_scatter; - delete m_surface; - delete m_bars; - } else { - delete m_bars; - delete m_surface; - delete m_scatter; - } +{ + delete m_bars; + delete m_surface; + delete m_scatter; delete m_widget; delete m_scatterDataArray; // only portion of this array is set to graph } @@ -185,24 +176,26 @@ void Data::scrollDown() void Data::useGradientOne() { - m_surface->setTheme(new Q3DTheme(Q3DTheme::ThemeIsabelle)); + m_surface->activeTheme()->setType(Q3DTheme::ThemeIsabelle); QLinearGradient gradient; gradient.setColorAt(0.0, Qt::black); gradient.setColorAt(0.33, Qt::blue); gradient.setColorAt(0.67, Qt::red); gradient.setColorAt(1.0, Qt::yellow); m_surface->seriesList().at(0)->setBaseGradient(gradient); + m_surface->seriesList().at(0)->setColorStyle(Q3DTheme::ColorStyleRangeGradient); m_statusArea->append(QStringLiteral("<b>Colors:</b> Thermal image imitation")); } void Data::useGradientTwo() { - m_surface->setTheme(new Q3DTheme(Q3DTheme::ThemeQt)); + m_surface->activeTheme()->setType(Q3DTheme::ThemeQt); QLinearGradient gradient; gradient.setColorAt(0.0, Qt::white); gradient.setColorAt(0.8, Qt::red); gradient.setColorAt(1.0, Qt::green); m_surface->seriesList().at(0)->setBaseGradient(gradient); + m_surface->seriesList().at(0)->setColorStyle(Q3DTheme::ColorStyleRangeGradient); m_statusArea->append(QStringLiteral("<b>Colors:</b> Highlight foreground")); } diff --git a/tests/multigraphs/data.h b/tests/multigraphs/data.h index 91e68334..98d34432 100644 --- a/tests/multigraphs/data.h +++ b/tests/multigraphs/data.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/multigraphs/main.cpp b/tests/multigraphs/main.cpp index a959641d..84840a43 100644 --- a/tests/multigraphs/main.cpp +++ b/tests/multigraphs/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/qmlcamera/main.cpp b/tests/qmlcamera/main.cpp index f35e9fc8..c93502f7 100644 --- a/tests/qmlcamera/main.cpp +++ b/tests/qmlcamera/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -16,6 +16,7 @@ ** ****************************************************************************/ +#include <QtDataVisualization/qutils.h> #include <QtGui/QGuiApplication> #include "qtquick2applicationviewer.h" @@ -25,15 +26,8 @@ int main(int argc, char *argv[]) QtQuick2ApplicationViewer viewer; -#if !defined(QT_OPENGL_ES_2) // Enable antialiasing - QSurfaceFormat surfaceFormat; - surfaceFormat.setDepthBufferSize(24); - surfaceFormat.setSamples(8); - surfaceFormat.setRenderableType(QSurfaceFormat::OpenGL); - surfaceFormat.setSwapBehavior(QSurfaceFormat::DoubleBuffer); - viewer.setFormat(surfaceFormat); -#endif + viewer.setFormat(QtDataVisualization::qDefaultSurfaceFormat()); #ifdef Q_OS_ANDROID viewer.addImportPath(QString::fromLatin1("assets:/qml")); diff --git a/tests/qmlcamera/qml/qmlcamera/Axes.qml b/tests/qmlcamera/qml/qmlcamera/Axes.qml index 0506d9ee..a6b8d4de 100644 --- a/tests/qmlcamera/qml/qmlcamera/Axes.qml +++ b/tests/qmlcamera/qml/qmlcamera/Axes.qml @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/qmlcamera/qml/qmlcamera/ControlSurface.qml b/tests/qmlcamera/qml/qmlcamera/ControlSurface.qml index c655e016..1e780f4a 100644 --- a/tests/qmlcamera/qml/qmlcamera/ControlSurface.qml +++ b/tests/qmlcamera/qml/qmlcamera/ControlSurface.qml @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/qmlcamera/qml/qmlcamera/Data.qml b/tests/qmlcamera/qml/qmlcamera/Data.qml index f7b71c7a..3c787186 100644 --- a/tests/qmlcamera/qml/qmlcamera/Data.qml +++ b/tests/qmlcamera/qml/qmlcamera/Data.qml @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/qmlcamera/qml/qmlcamera/main.qml b/tests/qmlcamera/qml/qmlcamera/main.qml index c1266b41..a5176553 100644 --- a/tests/qmlcamera/qml/qmlcamera/main.qml +++ b/tests/qmlcamera/qml/qmlcamera/main.qml @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/qmldynamicdata/main.cpp b/tests/qmldynamicdata/main.cpp index aedc026e..7c9bcf86 100644 --- a/tests/qmldynamicdata/main.cpp +++ b/tests/qmldynamicdata/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -16,6 +16,7 @@ ** ****************************************************************************/ +#include <QtDataVisualization/qutils.h> #include <QtGui/QGuiApplication> #include "qtquick2applicationviewer.h" #ifdef Q_OS_ANDROID @@ -30,15 +31,8 @@ int main(int argc, char *argv[]) QtQuick2ApplicationViewer viewer; -#if !defined(QT_OPENGL_ES_2) // Enable antialiasing - QSurfaceFormat surfaceFormat; - surfaceFormat.setDepthBufferSize(24); - surfaceFormat.setSamples(8); - surfaceFormat.setRenderableType(QSurfaceFormat::OpenGL); - surfaceFormat.setSwapBehavior(QSurfaceFormat::DoubleBuffer); - viewer.setFormat(surfaceFormat); -#endif + viewer.setFormat(QtDataVisualization::qDefaultSurfaceFormat()); #ifdef Q_OS_ANDROID viewer.addImportPath(QString::fromLatin1("assets:/qml")); diff --git a/tests/qmldynamicdata/qml/qmldynamicdata/main.qml b/tests/qmldynamicdata/qml/qmldynamicdata/main.qml index 4ed3b8ae..6f0032ac 100644 --- a/tests/qmldynamicdata/qml/qmldynamicdata/main.qml +++ b/tests/qmldynamicdata/qml/qmldynamicdata/main.qml @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -34,7 +34,7 @@ Item { Timer { id: dataTimer - interval: 20 + interval: 1 running: true repeat: true property bool isIncreasing: true @@ -42,7 +42,16 @@ Item { onTriggered: { if (isIncreasing) { graphModel.append({"xPos": Math.random(), "yPos": Math.random(), "zPos": Math.random()}); - if (graphModel.count == 500) { + graphModel.append({"xPos": Math.random(), "yPos": Math.random(), "zPos": Math.random()}); + graphModel.append({"xPos": Math.random(), "yPos": Math.random(), "zPos": Math.random()}); + graphModel.append({"xPos": Math.random(), "yPos": Math.random(), "zPos": Math.random()}); + graphModel.append({"xPos": Math.random(), "yPos": Math.random(), "zPos": Math.random()}); + graphModel.append({"xPos": Math.random(), "yPos": Math.random(), "zPos": Math.random()}); + graphModel.append({"xPos": Math.random(), "yPos": Math.random(), "zPos": Math.random()}); + graphModel.append({"xPos": Math.random(), "yPos": Math.random(), "zPos": Math.random()}); + graphModel.append({"xPos": Math.random(), "yPos": Math.random(), "zPos": Math.random()}); + graphModel.append({"xPos": Math.random(), "yPos": Math.random(), "zPos": Math.random()}); + if (graphModel.count > 5000) { scatterGraph.theme.type = Theme3D.ThemeIsabelle; isIncreasing = false; } @@ -50,6 +59,15 @@ Item { // TODO: Once QTRD-2645 is fixed, change this to remove from // random index to add coverage. graphModel.remove(2); + graphModel.remove(2); + graphModel.remove(2); + graphModel.remove(2); + graphModel.remove(2); + graphModel.remove(2); + graphModel.remove(2); + graphModel.remove(2); + graphModel.remove(2); + graphModel.remove(2); if (graphModel.count == 2) { scatterGraph.theme.type = Theme3D.ThemeDigia; isIncreasing = true; diff --git a/tests/qmldynamicdata/qml/qmldynamicdata/newbutton.qml b/tests/qmldynamicdata/qml/qmldynamicdata/newbutton.qml index 895db183..0b792dbf 100644 --- a/tests/qmldynamicdata/qml/qmldynamicdata/newbutton.qml +++ b/tests/qmldynamicdata/qml/qmldynamicdata/newbutton.qml @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/qmldynamicdata/qmldynamicdata.pro b/tests/qmldynamicdata/qmldynamicdata.pro index da987ff0..b95f1577 100644 --- a/tests/qmldynamicdata/qmldynamicdata.pro +++ b/tests/qmldynamicdata/qmldynamicdata.pro @@ -1,5 +1,5 @@ !include( ../tests.pri ) { - error( "Couldn't find the examples.pri file!" ) + error( "Couldn't find the tests.pri file!" ) } QT += widgets diff --git a/tests/scattertest/main.cpp b/tests/scattertest/main.cpp index 26f30beb..30382ca5 100644 --- a/tests/scattertest/main.cpp +++ b/tests/scattertest/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -106,6 +106,12 @@ int main(int argc, char **argv) QPushButton *removeSeriesButton = new QPushButton(widget); removeSeriesButton->setText(QStringLiteral("Remove Series")); + 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")); @@ -172,6 +178,8 @@ int main(int argc, char **argv) vLayout->addWidget(setSelectedItemButton, 0, Qt::AlignTop); 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); @@ -224,6 +232,10 @@ int main(int argc, char **argv) &ScatterDataModifier::addSeries); QObject::connect(removeSeriesButton, &QPushButton::clicked, modifier, &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 b1df526a..6ee7711e 100644 --- a/tests/scattertest/scatterchart.cpp +++ b/tests/scattertest/scatterchart.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -19,7 +19,7 @@ #include "scatterchart.h" #include <QtDataVisualization/qscatterdataproxy.h> #include <QtDataVisualization/qscatter3dseries.h> -#include <QtDataVisualization/q3dvalueaxis.h> +#include <QtDataVisualization/qvalue3daxis.h> #include <QtDataVisualization/q3dscene.h> #include <QtDataVisualization/q3dcamera.h> #include <QtDataVisualization/q3dtheme.h> @@ -37,24 +37,31 @@ ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter) m_selectedItem(-1), m_targetSeries(0) { - m_chart->setTheme(new Q3DTheme(Q3DTheme::ThemeStoneMoss)); - QFont font = m_chart->theme()->font(); + m_chart->activeTheme()->setType(Q3DTheme::ThemeStoneMoss); + QFont font = m_chart->activeTheme()->font(); font.setPointSize(m_fontSize); - m_chart->theme()->setFont(font); - m_chart->setShadowQuality(QDataVis::ShadowQualityNone); + m_chart->activeTheme()->setFont(font); + m_chart->setShadowQuality(QAbstract3DGraph::ShadowQualityNone); m_chart->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront); - m_chart->setAxisX(new Q3DValueAxis); - m_chart->setAxisY(new Q3DValueAxis); - m_chart->setAxisZ(new Q3DValueAxis); + m_chart->setAxisX(new QValue3DAxis); + m_chart->setAxisY(new QValue3DAxis); + m_chart->setAxisZ(new QValue3DAxis); createAndAddSeries(); createAndAddSeries(); - m_chart->setSelectionMode(QDataVis::SelectionItem); + m_chart->setSelectionMode(QAbstract3DGraph::SelectionItem); QObject::connect(&m_timer, &QTimer::timeout, this, &ScatterDataModifier::timeout); QObject::connect(m_chart, &Q3DScatter::shadowQualityChanged, this, &ScatterDataModifier::shadowQualityUpdatedByVisual); + + QObject::connect(m_chart, &Q3DScatter::axisXChanged, this, + &ScatterDataModifier::handleAxisXChanged); + QObject::connect(m_chart, &Q3DScatter::axisYChanged, this, + &ScatterDataModifier::handleAxisYChanged); + QObject::connect(m_chart, &Q3DScatter::axisZChanged, this, + &ScatterDataModifier::handleAxisZChanged); } ScatterDataModifier::~ScatterDataModifier() @@ -105,6 +112,8 @@ void ScatterDataModifier::addData() m_chart->seriesList().at(0)->dataProxy()->resetArray(dataArray); m_chart->seriesList().at(1)->dataProxy()->resetArray(dataArray2); + m_chart->seriesList().at(0)->setItemSize(0.0f); + m_chart->seriesList().at(1)->setItemSize(0.0f); } void ScatterDataModifier::changeStyle() @@ -161,7 +170,7 @@ void ScatterDataModifier::changeTheme() { static int theme = Q3DTheme::ThemeQt; - m_chart->setTheme(new Q3DTheme(Q3DTheme::Theme(theme))); + m_chart->activeTheme()->setType(Q3DTheme::Theme(theme)); if (++theme > Q3DTheme::ThemeIsabelle) theme = Q3DTheme::ThemeQt; @@ -169,22 +178,22 @@ void ScatterDataModifier::changeTheme() void ScatterDataModifier::changeLabelStyle() { - m_chart->theme()->setLabelBackgroundEnabled(!m_chart->theme()->isLabelBackgroundEnabled()); + m_chart->activeTheme()->setLabelBackgroundEnabled(!m_chart->activeTheme()->isLabelBackgroundEnabled()); } void ScatterDataModifier::changeFont(const QFont &font) { QFont newFont = font; newFont.setPointSizeF(m_fontSize); - m_chart->theme()->setFont(newFont); + m_chart->activeTheme()->setFont(newFont); } void ScatterDataModifier::changeFontSize(int fontSize) { m_fontSize = fontSize; - QFont font = m_chart->theme()->font(); + QFont font = m_chart->activeTheme()->font(); font.setPointSize(m_fontSize); - m_chart->theme()->setFont(font); + m_chart->activeTheme()->setFont(font); } void ScatterDataModifier::changePointSize(int pointSize) @@ -192,7 +201,7 @@ void ScatterDataModifier::changePointSize(int pointSize) m_targetSeries->setItemSize(0.01f * float(pointSize)); } -void ScatterDataModifier::shadowQualityUpdatedByVisual(QDataVis::ShadowQuality sq) +void ScatterDataModifier::shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality sq) { int quality = int(sq); // Updates the UI component to show correct shadow quality @@ -217,9 +226,9 @@ void ScatterDataModifier::resetAxes() m_chart->releaseAxis(m_chart->axisY()); m_chart->releaseAxis(m_chart->axisZ()); - m_chart->setAxisX(new Q3DValueAxis); - m_chart->setAxisY(new Q3DValueAxis); - m_chart->setAxisZ(new Q3DValueAxis); + m_chart->setAxisX(new QValue3DAxis); + m_chart->setAxisY(new QValue3DAxis); + m_chart->setAxisZ(new QValue3DAxis); m_chart->axisX()->setSegmentCount(5); m_chart->axisY()->setSegmentCount(5); m_chart->axisZ()->setSegmentCount(5); @@ -461,21 +470,48 @@ void ScatterDataModifier::removeSeries() } } +void ScatterDataModifier::toggleSeriesVisibility() +{ + if (m_targetSeries) + 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()); +} + +void ScatterDataModifier::handleAxisYChanged(QValue3DAxis *axis) +{ + qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_chart->axisY()); +} + +void ScatterDataModifier::handleAxisZChanged(QValue3DAxis *axis) +{ + qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_chart->axisZ()); +} + void ScatterDataModifier::changeShadowQuality(int quality) { - QDataVis::ShadowQuality sq = QDataVis::ShadowQuality(quality); + QAbstract3DGraph::ShadowQuality sq = QAbstract3DGraph::ShadowQuality(quality); m_chart->setShadowQuality(sq); emit shadowQualityChanged(quality); } void ScatterDataModifier::setBackgroundEnabled(int enabled) { - m_chart->theme()->setBackgroundEnabled((bool)enabled); + m_chart->activeTheme()->setBackgroundEnabled((bool)enabled); } void ScatterDataModifier::setGridEnabled(int enabled) { - m_chart->theme()->setGridEnabled((bool)enabled); + m_chart->activeTheme()->setGridEnabled((bool)enabled); } QVector3D ScatterDataModifier::randVector() @@ -496,10 +532,12 @@ 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)); + series->setItemSize(float(rand() % 90 + 10) / 100.0f); QObject::connect(series, &QScatter3DSeries::selectedItemChanged, this, &ScatterDataModifier::handleSelectionChange); diff --git a/tests/scattertest/scatterchart.h b/tests/scattertest/scatterchart.h index 5524929e..21357d62 100644 --- a/tests/scattertest/scatterchart.h +++ b/tests/scattertest/scatterchart.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -49,7 +49,7 @@ public: public slots: void changeShadowQuality(int quality); - void shadowQualityUpdatedByVisual(QDataVis::ShadowQuality shadowQuality); + void shadowQualityUpdatedByVisual(QAbstract3DGraph::ShadowQuality shadowQuality); void clear(); void resetAxes(); void addOne(); @@ -67,6 +67,12 @@ public slots: void setGradient(); void addSeries(); void removeSeries(); + void toggleSeriesVisibility(); + void changeSeriesName(); + + void handleAxisXChanged(QValue3DAxis *axis); + void handleAxisYChanged(QValue3DAxis *axis); + void handleAxisZChanged(QValue3DAxis *axis); signals: void shadowQualityChanged(int quality); diff --git a/tests/spectrum/3rdparty/fftreal/fftreal_wrapper.cpp b/tests/spectrum/3rdparty/fftreal/fftreal_wrapper.cpp index f6fc37e0..618709f7 100644 --- a/tests/spectrum/3rdparty/fftreal/fftreal_wrapper.cpp +++ b/tests/spectrum/3rdparty/fftreal/fftreal_wrapper.cpp @@ -1,6 +1,6 @@ /*************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the examples of QtDataVisualization. diff --git a/tests/spectrum/3rdparty/fftreal/fftreal_wrapper.h b/tests/spectrum/3rdparty/fftreal/fftreal_wrapper.h index 4cfa580b..92ee5728 100644 --- a/tests/spectrum/3rdparty/fftreal/fftreal_wrapper.h +++ b/tests/spectrum/3rdparty/fftreal/fftreal_wrapper.h @@ -1,6 +1,6 @@ /*************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the examples of QtDataVisualization. diff --git a/tests/spectrum/spectrumapp/engine.cpp b/tests/spectrum/spectrumapp/engine.cpp index 9d049384..9ddc2ab6 100644 --- a/tests/spectrum/spectrumapp/engine.cpp +++ b/tests/spectrum/spectrumapp/engine.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/spectrum/spectrumapp/engine.h b/tests/spectrum/spectrumapp/engine.h index 1ad86065..a65179e0 100644 --- a/tests/spectrum/spectrumapp/engine.h +++ b/tests/spectrum/spectrumapp/engine.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/spectrum/spectrumapp/frequencyspectrum.cpp b/tests/spectrum/spectrumapp/frequencyspectrum.cpp index c5f62cef..26fa745f 100644 --- a/tests/spectrum/spectrumapp/frequencyspectrum.cpp +++ b/tests/spectrum/spectrumapp/frequencyspectrum.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/spectrum/spectrumapp/frequencyspectrum.h b/tests/spectrum/spectrumapp/frequencyspectrum.h index 0008985f..83c64d1c 100644 --- a/tests/spectrum/spectrumapp/frequencyspectrum.h +++ b/tests/spectrum/spectrumapp/frequencyspectrum.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/spectrum/spectrumapp/main.cpp b/tests/spectrum/spectrumapp/main.cpp index 311de719..6be1aae0 100644 --- a/tests/spectrum/spectrumapp/main.cpp +++ b/tests/spectrum/spectrumapp/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -21,8 +21,8 @@ #include <QtDataVisualization/q3dbars.h> #include <QtDataVisualization/qbardataproxy.h> -#include <QtDataVisualization/q3dvalueaxis.h> -#include <QtDataVisualization/q3dcategoryaxis.h> +#include <QtDataVisualization/qvalue3daxis.h> +#include <QtDataVisualization/qcategory3daxis.h> #include <QtDataVisualization/q3dscene.h> #include <QtDataVisualization/q3dcamera.h> #include <QtDataVisualization/qbar3dseries.h> @@ -74,18 +74,18 @@ MainApp::MainApp(Q3DBars *window) m_chart->rowAxis()->setMax(SpectrumNumBands * 2); m_chart->columnAxis()->setMax(SpectrumNumBands - 1); // Disable grid - m_chart->theme()->setGridEnabled(false); + m_chart->activeTheme()->setGridEnabled(false); // Disable auto-scaling of height by defining explicit range m_chart->valueAxis()->setRange(0.0f, 1.0f); // Disable shadows - m_chart->setShadowQuality(QDataVis::ShadowQualityNone); + m_chart->setShadowQuality(QAbstract3DGraph::ShadowQualityNone); #if USE_CONES // Set bar specifications; make them a bit wider than deep and make them be drawn 75% // inside each other m_chart->setBarThickness(1.25); m_chart->setBarSpacing(QSizeF(0.2, -0.75)); // Set bar type, smooth cones - m_chart->setBarType(QDataVis::MeshCones, true); + m_chart->setBarType(QAbstract3DGraph::MeshCones, true); // Adjust zoom manually; automatic zoom level calculation does not work well with negative // spacings (in setBarSpacing) m_chart->setCameraPosition(10.0f, 5.0f, 70.0f); @@ -98,7 +98,7 @@ MainApp::MainApp(Q3DBars *window) m_chart->scene()->activeCamera()->setCameraPosition(10.0f, 7.5f, 75.0f); #endif // Disable selection - m_chart->setSelectionMode(QDataVis::SelectionNone); + m_chart->setSelectionMode(QAbstract3DGraph::SelectionNone); QObject::connect(m_engine, &Engine::changedSpectrum, this, &MainApp::spectrumChanged); QObject::connect(m_engine, &Engine::stateChanged, this, &MainApp::stateChanged); m_restartTimer->setSingleShot(true); diff --git a/tests/spectrum/spectrumapp/spectrum.h b/tests/spectrum/spectrumapp/spectrum.h index 97096b1c..7a83b91c 100644 --- a/tests/spectrum/spectrumapp/spectrum.h +++ b/tests/spectrum/spectrumapp/spectrum.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/spectrum/spectrumapp/spectrumanalyser.cpp b/tests/spectrum/spectrumapp/spectrumanalyser.cpp index b86a851c..6e353d96 100644 --- a/tests/spectrum/spectrumapp/spectrumanalyser.cpp +++ b/tests/spectrum/spectrumapp/spectrumanalyser.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/spectrum/spectrumapp/spectrumanalyser.h b/tests/spectrum/spectrumapp/spectrumanalyser.h index 0e40fe66..3343888d 100644 --- a/tests/spectrum/spectrumapp/spectrumanalyser.h +++ b/tests/spectrum/spectrumapp/spectrumanalyser.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/spectrum/spectrumapp/utils.cpp b/tests/spectrum/spectrumapp/utils.cpp index f007959c..8fef6051 100644 --- a/tests/spectrum/spectrumapp/utils.cpp +++ b/tests/spectrum/spectrumapp/utils.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/spectrum/spectrumapp/utils.h b/tests/spectrum/spectrumapp/utils.h index 009f895b..fd6a3c12 100644 --- a/tests/spectrum/spectrumapp/utils.h +++ b/tests/spectrum/spectrumapp/utils.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/spectrum/spectrumapp/wavfile.cpp b/tests/spectrum/spectrumapp/wavfile.cpp index 56dd340e..acf35588 100644 --- a/tests/spectrum/spectrumapp/wavfile.cpp +++ b/tests/spectrum/spectrumapp/wavfile.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/spectrum/spectrumapp/wavfile.h b/tests/spectrum/spectrumapp/wavfile.h index 25673630..b24cf60e 100644 --- a/tests/spectrum/spectrumapp/wavfile.h +++ b/tests/spectrum/spectrumapp/wavfile.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** diff --git a/tests/surfacetest/graphmodifier.cpp b/tests/surfacetest/graphmodifier.cpp index 3474b67f..528a803b 100644 --- a/tests/surfacetest/graphmodifier.cpp +++ b/tests/surfacetest/graphmodifier.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -17,7 +17,7 @@ ****************************************************************************/ #include "graphmodifier.h" -#include <QtDataVisualization/Q3DValueAxis> +#include <QtDataVisualization/QValue3DAxis> #include <QtDataVisualization/QSurfaceDataProxy> #include <QtDataVisualization/QSurface3DSeries> #include <QtDataVisualization/Q3DTheme> @@ -27,7 +27,7 @@ #include <QDebug> #include <QComboBox> -QT_DATAVISUALIZATION_USE_NAMESPACE +using namespace QtDataVisualization; //#define JITTER_PLANE //#define WONKY_PLANE @@ -55,16 +55,26 @@ GraphModifier::GraphModifier(Q3DSurface *graph) m_theSeries(new QSurface3DSeries), m_drawMode(QSurface3DSeries::DrawSurfaceAndWireframe) { - m_graph->setAxisX(new Q3DValueAxis); - m_graph->setAxisY(new Q3DValueAxis); - m_graph->setAxisZ(new Q3DValueAxis); + m_graph->setAxisX(new QValue3DAxis); + m_graph->setAxisY(new QValue3DAxis); + m_graph->setAxisZ(new QValue3DAxis); 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); + + QObject::connect(m_graph, &Q3DSurface::axisXChanged, this, + &GraphModifier::handleAxisXChanged); + QObject::connect(m_graph, &Q3DSurface::axisYChanged, this, + &GraphModifier::handleAxisYChanged); + QObject::connect(m_graph, &Q3DSurface::axisZChanged, this, + &GraphModifier::handleAxisZChanged); } GraphModifier::~GraphModifier() @@ -137,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; @@ -189,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++) { @@ -209,6 +223,8 @@ void GraphModifier::togglePlane(bool enable) *m_planeArray << newRow; } + m_theSeries->setName("Plane"); + resetArrayAndSliders(m_planeArray, minZ, maxZ, minX, maxX); #endif @@ -253,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; @@ -338,12 +356,12 @@ void GraphModifier::changeFont(const QFont &font) { QFont newFont = font; newFont.setPointSizeF(m_fontSize); - m_graph->theme()->setFont(newFont); + m_graph->activeTheme()->setFont(newFont); } void GraphModifier::changeStyle() { - m_graph->theme()->setLabelBackgroundEnabled(!m_graph->theme()->isLabelBackgroundEnabled()); + m_graph->activeTheme()->setLabelBackgroundEnabled(!m_graph->activeTheme()->isLabelBackgroundEnabled()); } void GraphModifier::selectButtonClicked() @@ -363,7 +381,7 @@ void GraphModifier::selectedPointChanged(const QPoint &point) void GraphModifier::changeTheme(int theme) { - m_graph->setTheme(new Q3DTheme(Q3DTheme::Theme(theme))); + m_graph->activeTheme()->setType(Q3DTheme::Theme(theme)); } @@ -393,6 +411,21 @@ void GraphModifier::timeout() m_theSeries->dataProxy()->resetArray(m_planeArray); } +void GraphModifier::handleAxisXChanged(QValue3DAxis *axis) +{ + qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_graph->axisX()); +} + +void GraphModifier::handleAxisYChanged(QValue3DAxis *axis) +{ + qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_graph->axisY()); +} + +void GraphModifier::handleAxisZChanged(QValue3DAxis *axis) +{ + qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_graph->axisZ()); +} + void GraphModifier::resetArrayAndSliders(QSurfaceDataArray *array, float minZ, float maxZ, float minX, float maxX) { m_axisMinSliderX->setValue(minX); @@ -405,7 +438,7 @@ void GraphModifier::resetArrayAndSliders(QSurfaceDataArray *array, float minZ, f void GraphModifier::changeShadowQuality(int quality) { - QDataVis::ShadowQuality sq = QDataVis::ShadowQuality(quality); + QAbstract3DGraph::ShadowQuality sq = QAbstract3DGraph::ShadowQuality(quality); m_graph->setShadowQuality(sq); } @@ -414,7 +447,7 @@ void GraphModifier::changeSelectionMode(int mode) QComboBox *comboBox = qobject_cast<QComboBox *>(sender()); if (comboBox) { int flags = comboBox->itemData(mode).toInt(); - m_graph->setSelectionMode(QDataVis::SelectionFlags(flags)); + m_graph->setSelectionMode(QAbstract3DGraph::SelectionFlags(flags)); } } diff --git a/tests/surfacetest/graphmodifier.h b/tests/surfacetest/graphmodifier.h index f0b5cce7..8ccff62f 100644 --- a/tests/surfacetest/graphmodifier.h +++ b/tests/surfacetest/graphmodifier.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -87,6 +87,10 @@ public slots: void changeSelectionMode(int mode); void timeout(); + void handleAxisXChanged(QValue3DAxis *axis); + void handleAxisYChanged(QValue3DAxis *axis); + void handleAxisZChanged(QValue3DAxis *axis); + private: void resetArrayAndSliders(QSurfaceDataArray *array, float minZ, float maxZ, float minX, float maxX); diff --git a/tests/surfacetest/main.cpp b/tests/surfacetest/main.cpp index c25c5b89..b31586b0 100644 --- a/tests/surfacetest/main.cpp +++ b/tests/surfacetest/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -52,7 +52,7 @@ int main(int argc, char *argv[]) QSize screenSize = surfaceGraph->screen()->size(); // Set to default, should be same as the initial on themeList - surfaceGraph->setTheme(new Q3DTheme(Q3DTheme::Theme(initialTheme))); + surfaceGraph->activeTheme()->setType(Q3DTheme::Theme(initialTheme)); QWidget *container = QWidget::createWindowContainer(surfaceGraph); container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2)); @@ -184,29 +184,29 @@ int main(int argc, char *argv[]) QComboBox *selectionMode = new QComboBox(widget); selectionMode->addItem(QStringLiteral("None"), - int(QDataVis::SelectionNone)); + int(QAbstract3DGraph::SelectionNone)); selectionMode->addItem(QStringLiteral("Item"), - int(QDataVis::SelectionItem)); + int(QAbstract3DGraph::SelectionItem)); selectionMode->addItem(QStringLiteral("Row"), - int(QDataVis::SelectionRow)); + int(QAbstract3DGraph::SelectionRow)); selectionMode->addItem(QStringLiteral("Item and Row"), - int(QDataVis::SelectionItemAndRow)); + int(QAbstract3DGraph::SelectionItemAndRow)); selectionMode->addItem(QStringLiteral("Column"), - int(QDataVis::SelectionColumn)); + int(QAbstract3DGraph::SelectionColumn)); selectionMode->addItem(QStringLiteral("Item and Column"), - int(QDataVis::SelectionItemAndColumn)); + int(QAbstract3DGraph::SelectionItemAndColumn)); selectionMode->addItem(QStringLiteral("Row and Column"), - int(QDataVis::SelectionRowAndColumn)); + int(QAbstract3DGraph::SelectionRowAndColumn)); selectionMode->addItem(QStringLiteral("Item, Row and Column"), - int(QDataVis::SelectionItemRowAndColumn)); + int(QAbstract3DGraph::SelectionItemRowAndColumn)); selectionMode->addItem(QStringLiteral("Slice into Row"), - int(QDataVis::SelectionSlice | QDataVis::SelectionRow)); + int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionRow)); selectionMode->addItem(QStringLiteral("Slice into Row and Item"), - int(QDataVis::SelectionSlice | QDataVis::SelectionItemAndRow)); + int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionItemAndRow)); selectionMode->addItem(QStringLiteral("Slice into Column"), - int(QDataVis::SelectionSlice | QDataVis::SelectionColumn)); + int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionColumn)); selectionMode->addItem(QStringLiteral("Slice into Column and Item"), - int(QDataVis::SelectionSlice | QDataVis::SelectionItemAndColumn)); + int(QAbstract3DGraph::SelectionSlice | QAbstract3DGraph::SelectionItemAndColumn)); selectionMode->setCurrentIndex(1); QPushButton *selectButton = new QPushButton(widget); diff --git a/tests/tests.pri b/tests/tests.pri index fd17b360..59253152 100644 --- a/tests/tests.pri +++ b/tests/tests.pri @@ -19,6 +19,15 @@ TEMPLATE = app QT += datavisualization +!static:android { + # Add Qt library to be loaded in shared android build + vis_lib_name = DataVisualization + vis_src_lib = lib$${vis_lib_name}.so + vis_lib_dir = $$OUT_PWD/../../lib/$$vis_src_lib + vis_lib_formatted = $$replace(vis_lib_dir, /, $$QMAKE_DIR_SEP) + ANDROID_EXTRA_LIBS = $$vis_lib_formatted +} + contains(TARGET, qml.*) { uri = QtDataVisualization lib_name = datavisualizationqml2 @@ -29,46 +38,75 @@ contains(TARGET, qml.*) { make_qmldir_target = \"$$replace(make_qmldir_path, /, $$QMAKE_DIR_SEP)\" system($$QMAKE_MKDIR $$make_qmldir_target) } - copy_qmldir_examples.target = $$make_qmldir_path/qmldir - copy_qmldir_examples.depends = $$_PRO_FILE_PWD_/../../src/$$lib_name/qmldir - copy_qmldir_examples.commands = $(COPY_FILE) \"$$replace(copy_qmldir_examples.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_qmldir_examples.target, /, $$QMAKE_DIR_SEP)\" - QMAKE_EXTRA_TARGETS += copy_qmldir_examples - PRE_TARGETDEPS += $$copy_qmldir_examples.target + copy_qmldir.target = $$make_qmldir_path/qmldir + copy_qmldir.depends = $$_PRO_FILE_PWD_/../../src/$$lib_name/qmldir + copy_qmldir_formatted = \"$$replace(copy_qmldir.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_qmldir.target, /, $$QMAKE_DIR_SEP)\" + copy_qmldir.commands = $(COPY_FILE) $$copy_qmldir_formatted + QMAKE_EXTRA_TARGETS += copy_qmldir + PRE_TARGETDEPS += $$copy_qmldir.target + + static:contains(QT_CONFIG, static) { + # Make import scan find our copied qmldir & statically built qml lib + !win32 { + LIB_EXTENSION = a + } else { + LIB_EXTENSION = lib + } + QMLPATHS += $$DESTDIR + # We need to copy the qmldir & lib already at qmake run stage as import scan is done then + exists($$copy_qmldir.depends): system($$QMAKE_COPY $$copy_qmldir_formatted) + } else { + win32 { + LIB_EXTENSION = dll + } else { + mac|ios { + LIB_EXTENSION = dylib + } else { + LIB_EXTENSION = so + } + } + } win32 { CONFIG(debug, release|debug) { - src_dir = debug - src_lib = $${lib_name}d.dll + src_dir = /debug + src_lib = $${lib_name}d.$$LIB_EXTENSION } CONFIG(release, release|debug){ - src_dir = release - src_lib = $${lib_name}.dll + src_dir = /release + src_lib = $${lib_name}.$$LIB_EXTENSION } } else { - src_dir = . - mac { + src_dir = + mac|ios { CONFIG(debug, release|debug) { - src_lib = lib$${lib_name}_debug.dylib + src_lib = lib$${lib_name}_debug.$$LIB_EXTENSION } CONFIG(release, release|debug){ - src_lib = lib$${lib_name}.dylib + src_lib = lib$${lib_name}.$$LIB_EXTENSION } } else { # linux, android - src_lib = lib$${lib_name}.so + src_lib = lib$${lib_name}.$$LIB_EXTENSION } } copy_lib.target = $$make_qmldir_path/$$src_lib - copy_lib.depends = $$OUT_PWD/../../src/$$lib_name/$$src_dir/$$src_lib - copy_lib.commands = $(COPY_FILE) \"$$replace(copy_lib.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_lib.target, /, $$QMAKE_DIR_SEP)\" + copy_lib.depends = $$OUT_PWD/../../src/$$lib_name$$src_dir/$$src_lib + copy_lib_formatted = \"$$replace(copy_lib.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_lib.target, /, $$QMAKE_DIR_SEP)\" + copy_lib.commands = $(COPY_FILE) $$copy_lib_formatted QMAKE_EXTRA_TARGETS += copy_lib PRE_TARGETDEPS += $$copy_lib.target android { - android_qmldir.files = $$copy_qmldir_examples.target + system($$QMAKE_COPY $$copy_qmldir_formatted) + android_qmldir.files = $$copy_qmldir.target android_qmldir.path = /assets/qml/$$uri_replaced + INSTALLS += android_qmldir + } + android|ios { + system($$QMAKE_COPY $$copy_lib_formatted) android_qmlplugin.files = $$copy_lib.target android_qmlplugin.path = $$target.path - INSTALLS += android_qmldir android_qmlplugin + INSTALLS += android_qmlplugin } } diff --git a/tests/tests.pro b/tests/tests.pro index 01b0f109..ec28d997 100644 --- a/tests/tests.pro +++ b/tests/tests.pro @@ -12,14 +12,14 @@ SUBDIRS += barstest \ surfacetest \ qmlcamera \ qmldynamicdata \ - multigraphs + multigraphs \ + directional #SUBDIRS += kinectsurface -qtHaveModule(multimedia):!android: SUBDIRS += spectrum +qtHaveModule(multimedia):!android:!static: SUBDIRS += spectrum # For testing code snippets of minimal applications SUBDIRS += minimalbars \ minimalscatter \ minimalsurface - |