summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-05-12 11:10:46 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-05-12 12:26:20 +0300
commit4dcef4be656aedb7c6c9e222f291a1a508641007 (patch)
tree1fe53e7b4ddba8c8ac719f95c04eac298cb22dc3 /tests
parent8e97d823208ed314278a22a924f0da10c9328839 (diff)
Enable mapping single role to multiple properties for surface
Task-number: QTRD-3074 Change-Id: If40de067526b6f24b3e55bf64ed804a79d473e5f Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com> Reviewed-by: Titta Heikkala <titta.heikkala@digia.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/itemmodeltest/main.cpp37
-rw-r--r--tests/qmlmultitest/main.cpp47
-rw-r--r--tests/qmlmultitest/qml/qmlmultitest/Data.qml48
-rw-r--r--tests/qmlmultitest/qml/qmlmultitest/NewButton.qml52
-rw-r--r--tests/qmlmultitest/qml/qmlmultitest/main.qml231
-rw-r--r--tests/qmlmultitest/qmlmultitest.pro12
-rw-r--r--tests/qmlmultitest/qmlmultitest.qrc7
-rw-r--r--tests/tests.pro3
8 files changed, 422 insertions, 15 deletions
diff --git a/tests/itemmodeltest/main.cpp b/tests/itemmodeltest/main.cpp
index a607fe8d..38454948 100644
--- a/tests/itemmodeltest/main.cpp
+++ b/tests/itemmodeltest/main.cpp
@@ -49,9 +49,6 @@ public:
void setupModel();
void addRow();
- void changeStyle();
- void changePresetCamera();
- void changeTheme();
void start();
void selectFromTable(const QPoint &selection);
void selectedFromTable(int currentRow, int currentColumn, int previousRow, int previousColumn);
@@ -148,12 +145,14 @@ void GraphDataGenerator::setupModel()
QStringList weeks;
weeks << "week 1" << "week 2" << "week 3" << "week 4" << "week 5";
- // Set up data Mon Tue Wed Thu Fri Sat Sun
- const char *hours[5][7] = {{"2.0/30", "1.0/30", "3.0/30", "0.2/30", "1.0/30", "5.0/30", "10.0/30"}, // week 1
- {"0.5/45", "1.0/45", "3.0/45", "1.0/45", "2.0/45", "2.0/45", "3.0/45"}, // week 2
- {"1.0/60", "1.0/60", "2.0/60", "1.0/60", "4.0/60", "4.0/60", "4.0/60"}, // week 3
- {"0.0/75", "1.0/75", "0.0/75", "0.0/75", "2.0/75", "2.0/75", "0.3/75"}, // week 4
- {"3.0/90", "3.0/90", "6.0/90", "2.0/90", "2.0/90", "1.0/90", "1.0/90"}}; // week 5
+ // Set up data
+ const char *hours[5][7] =
+ // Mon Tue Wed Thu Fri Sat Sun
+ {{"9/10/2.0/30", "9/11/1.0/30", "9/12/3.0/30", "9/13/0.2/30", "9/14/1.0/30", "9/15/5.0/30", "9/16/10.0/30"}, // week 1
+ {"8/10/0.5/45", "8/11/1.0/45", "8/12/3.0/45", "8/13/1.0/45", "8/14/2.0/45", "8/15/2.0/45", "8/16/3.0/45"}, // week 2
+ {"7/10/1.0/60", "7/11/1.0/60", "7/12/2.0/60", "7/13/1.0/60", "7/14/4.0/60", "7/15/4.0/60", "7/16/4.0/60"}, // week 3
+ {"6/10/0.0/75", "6/11/1.0/75", "6/12/0.0/75", "6/13/0.0/75", "6/14/2.0/75", "6/15/2.0/75", "6/16/0.3/75"}, // week 4
+ {"5/10/3.0/90", "5/11/3.0/90", "5/12/6.0/90", "5/13/2.0/90", "5/14/2.0/90", "5/15/1.0/90", "5/16/1.0/90"}}; // week 5
// Add labels
m_barGraph->rowAxis()->setTitle("Week of year");
@@ -275,17 +274,27 @@ int main(int argc, char **argv)
barProxy->setUseModelCategories(true);
surfaceProxy->setUseModelCategories(true);
barProxy->setRotationRole(tableWidget->model()->roleNames().value(Qt::DisplayRole));
- barProxy->setValueRolePattern(QRegExp(QStringLiteral("^(\\d*[\\.\\,]?\\d*)\\/(\\d*[\\.\\,]?\\d*)$")));
- barProxy->setRotationRolePattern(QRegExp(QStringLiteral("^(\\d*[\\.\\,]?\\d*)\\/(\\d*[\\.\\,]?\\d*)$")));
- barProxy->setValueRoleReplace(QStringLiteral("\\1"));
- barProxy->setRotationRoleReplace(QStringLiteral("\\2"));
- // TODO surface proxy test
+ barProxy->setValueRolePattern(QRegExp(QStringLiteral("^(\\d*)(\\/)(\\d*)\\/(\\d*[\\.\\,]?\\d*)\\/\\d*[\\.\\,]?\\d*$")));
+ barProxy->setRotationRolePattern(QRegExp(QStringLiteral("^(\\d*)(\\/)\\d*\\/\\d*([\\.\\,]?)\\d*(\\/)(\\d*[\\.\\,]?\\d*)$")));
+ barProxy->setValueRoleReplace(QStringLiteral("\\4"));
+ barProxy->setRotationRoleReplace(QStringLiteral("\\5"));
+ surfaceProxy->setXPosRole(tableWidget->model()->roleNames().value(Qt::DisplayRole));
+ surfaceProxy->setZPosRole(tableWidget->model()->roleNames().value(Qt::DisplayRole));
+ surfaceProxy->setXPosRolePattern(QRegExp(QStringLiteral("^(\\d*)\\/(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
+ surfaceProxy->setXPosRoleReplace(QStringLiteral("\\2"));
+ surfaceProxy->setYPosRolePattern(QRegExp(QStringLiteral("^\\d*(\\/)(\\d*)\\/(\\d*[\\.\\,]?\\d*)\\/\\d*[\\.\\,]?\\d*$")));
+ surfaceProxy->setYPosRoleReplace(QStringLiteral("\\3"));
+ surfaceProxy->setZPosRolePattern(QRegExp(QStringLiteral("^(\\d*)(\\/)(\\d*)\\/\\d*[\\.\\,]?\\d*\\/\\d*[\\.\\,]?\\d*$")));
+ surfaceProxy->setZPosRoleReplace(QStringLiteral("\\1"));
QBar3DSeries *barSeries = new QBar3DSeries(barProxy);
QSurface3DSeries *surfaceSeries = new QSurface3DSeries(surfaceProxy);
barSeries->setMesh(QAbstract3DSeries::MeshPyramid);
barGraph->addSeries(barSeries);
surfaceGraph->addSeries(surfaceSeries);
+ barGraph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetBehind);
+ surfaceGraph->scene()->activeCamera()->setCameraPreset(Q3DCamera::CameraPresetFront);
+
GraphDataGenerator generator(barGraph, surfaceGraph, tableWidget);
QObject::connect(barSeries, &QBar3DSeries::selectedBarChanged, &generator,
&GraphDataGenerator::selectFromTable);
diff --git a/tests/qmlmultitest/main.cpp b/tests/qmlmultitest/main.cpp
new file mode 100644
index 00000000..a4754f56
--- /dev/null
+++ b/tests/qmlmultitest/main.cpp
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** 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 <QtGui/QGuiApplication>
+#include <QtCore/QDir>
+#include <QtQuick/QQuickView>
+#include <QtQml/QQmlEngine>
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ QQuickView viewer;
+
+ // The following are needed to make examples run without having to install the module
+ // in desktop environments.
+#ifdef Q_OS_WIN
+ QString extraImportPath(QStringLiteral("%1/../../../%2"));
+#else
+ QString extraImportPath(QStringLiteral("%1/../../%2"));
+#endif
+ viewer.engine()->addImportPath(extraImportPath.arg(QGuiApplication::applicationDirPath(),
+ QString::fromLatin1("qml")));
+ QObject::connect(viewer.engine(), &QQmlEngine::quit, &viewer, &QWindow::close);
+
+ viewer.setTitle(QStringLiteral("QML multitest"));
+ viewer.setSource(QUrl("qrc:/qml/qmlmultitest/main.qml"));
+ viewer.setResizeMode(QQuickView::SizeRootObjectToView);
+ viewer.show();
+
+ return app.exec();
+}
diff --git a/tests/qmlmultitest/qml/qmlmultitest/Data.qml b/tests/qmlmultitest/qml/qmlmultitest/Data.qml
new file mode 100644
index 00000000..ddc0aad8
--- /dev/null
+++ b/tests/qmlmultitest/qml/qmlmultitest/Data.qml
@@ -0,0 +1,48 @@
+/****************************************************************************
+**
+** 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
+**
+****************************************************************************/
+
+import QtQuick 2.1
+
+Item {
+ property alias sharedData: dataModel
+
+ ListModel {
+ id: dataModel
+ ListElement{ coords: "0,0"; data: "20.0/10.0/4.75"; }
+ ListElement{ coords: "1,0"; data: "21.1/10.3/3.00"; }
+ ListElement{ coords: "2,0"; data: "22.5/10.7/1.24"; }
+ ListElement{ coords: "3,0"; data: "24.0/10.5/2.53"; }
+ ListElement{ coords: "0,1"; data: "20.2/11.2/3.55"; }
+ ListElement{ coords: "1,1"; data: "21.3/11.5/3.03"; }
+ ListElement{ coords: "2,1"; data: "22.6/11.7/3.46"; }
+ ListElement{ coords: "3,1"; data: "23.4/11.5/4.12"; }
+ ListElement{ coords: "0,2"; data: "20.2/12.3/3.37"; }
+ ListElement{ coords: "1,2"; data: "21.1/12.4/2.98"; }
+ ListElement{ coords: "2,2"; data: "22.5/12.1/3.33"; }
+ ListElement{ coords: "3,2"; data: "23.3/12.7/3.23"; }
+ ListElement{ coords: "0,3"; data: "20.7/13.3/5.34"; }
+ ListElement{ coords: "1,3"; data: "21.5/13.2/4.54"; }
+ ListElement{ coords: "2,3"; data: "22.4/13.6/4.65"; }
+ ListElement{ coords: "3,3"; data: "23.2/13.4/6.67"; }
+ ListElement{ coords: "0,4"; data: "20.6/15.0/6.01"; }
+ ListElement{ coords: "1,4"; data: "21.3/14.6/5.83"; }
+ ListElement{ coords: "2,4"; data: "22.5/14.8/7.32"; }
+ ListElement{ coords: "3,4"; data: "23.7/14.3/6.90"; }
+ }
+}
+
diff --git a/tests/qmlmultitest/qml/qmlmultitest/NewButton.qml b/tests/qmlmultitest/qml/qmlmultitest/NewButton.qml
new file mode 100644
index 00000000..e4fb99d2
--- /dev/null
+++ b/tests/qmlmultitest/qml/qmlmultitest/NewButton.qml
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** 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
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import QtQuick.Controls 1.0
+import QtQuick.Controls.Styles 1.0
+
+Item {
+ id: newbutton
+
+ property alias text: buttonText.text
+
+ signal clicked
+
+ implicitWidth: buttonText.implicitWidth + 5
+ implicitHeight: buttonText.implicitHeight + 10
+
+ Button {
+ id: buttonText
+ width: parent.width
+ height: parent.height
+
+ style: ButtonStyle {
+ label: Component {
+ Text {
+ text: buttonText.text
+ clip: true
+ wrapMode: Text.WordWrap
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ anchors.fill: parent
+ }
+ }
+ }
+ onClicked: newbutton.clicked()
+ }
+}
diff --git a/tests/qmlmultitest/qml/qmlmultitest/main.qml b/tests/qmlmultitest/qml/qmlmultitest/main.qml
new file mode 100644
index 00000000..da34c0bf
--- /dev/null
+++ b/tests/qmlmultitest/qml/qmlmultitest/main.qml
@@ -0,0 +1,231 @@
+/****************************************************************************
+**
+** 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
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import QtQuick.Layouts 1.0
+import QtDataVisualization 1.1
+import "."
+
+Rectangle {
+ id: mainView
+ width: 800
+ height: 600
+
+ Data {
+ id: data
+ }
+
+ GridLayout {
+ id: gridLayout
+ columns: 2
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ anchors.top: mainView.top
+ anchors.bottom: mainView.bottom
+ anchors.left: mainView.left
+ anchors.right: mainView.right
+
+ Rectangle {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ border.color: surfaceGraph.theme.gridLineColor
+ border.width: 2
+
+ Surface3D {
+ id: surfaceGraph
+ anchors.fill: parent
+ anchors.margins: parent.border.width
+ theme: Theme3D {
+ type: Theme3D.ThemePrimaryColors
+ font.pointSize: 60
+ }
+ scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh
+
+ Surface3DSeries {
+ itemLabelFormat: "Pop density at (@xLabel N, @zLabel E): @yLabel"
+ ItemModelSurfaceDataProxy {
+ itemModel: data.sharedData
+ // The surface data points are not neatly lined up in rows and columns,
+ // so we define explicit row and column roles.
+ rowRole: "coords"
+ columnRole: "coords"
+ xPosRole: "data"
+ zPosRole: "data"
+ yPosRole: "data"
+ rowRolePattern: /(\d),\d/
+ columnRolePattern: /(\d),(\d)/
+ xPosRolePattern: /^([asd]*)([fgh]*)([jkl]*)[^\/]*\/([^\/]*)\/.*$/
+ yPosRolePattern: /^([^\/]*)\/([^\/]*)\/(.*)$/
+ zPosRolePattern: /^([asd]*)([qwe]*)([tyu]*)([fgj]*)([^\/]*)\/[^\/]*\/.*$/
+ rowRoleReplace: "\\1"
+ columnRoleReplace: "\\2"
+ xPosRoleReplace: "\\4"
+ yPosRoleReplace: "\\3"
+ zPosRoleReplace: "\\5"
+ }
+ }
+ }
+ }
+
+ // We'll use one grid cell for buttons
+ Rectangle {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+
+ GridLayout {
+ anchors.right: parent.right
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ columns: 2
+
+ NewButton {
+ Layout.minimumWidth: parent.width / 2
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ text: "Clear Selections"
+ onClicked: clearSelections() // call a helper function to keep button itself simpler
+ }
+
+ NewButton {
+ Layout.minimumWidth: parent.width / 2
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ text: "Quit"
+ onClicked: Qt.quit(0);
+ }
+
+ NewButton {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ text: "Reset Cameras"
+ onClicked: resetCameras() // call a helper function to keep button itself simpler
+ }
+
+ NewButton {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ text: "Toggle Mesh Styles"
+ onClicked: toggleMeshStyle() // call a helper function to keep button itself simpler
+ }
+ }
+ }
+
+ Rectangle {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ border.color: scatterGraph.theme.gridLineColor
+ border.width: 2
+
+ Scatter3D {
+ id: scatterGraph
+ anchors.fill: parent
+ anchors.margins: parent.border.width
+ theme: Theme3D {
+ type: Theme3D.ThemeDigia
+ font.pointSize: 60
+ }
+ scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh
+
+ Scatter3DSeries {
+ itemLabelFormat: "Pop density at (@xLabel N, @zLabel E): @yLabel"
+ ItemModelScatterDataProxy {
+ itemModel: data.sharedData
+ // Mapping model roles to scatter series item coordinates.
+ xPosRole: "data"
+ zPosRole: "data"
+ yPosRole: "data"
+ // TODO scatter test
+// xPosRolePattern: /^([asd]*)([fgh]*)([jkl]*)[^\/]*\/([^\/]*)\/.*$/
+// yPosRolePattern: /^([^\/]*)\/([^\/]*)\/(.*)$/
+// zPosRolePattern: /^([asd]*)([qwe]*)([tyu]*)([fgj]*)([^\/]*)\/[^\/]*\/.*$/
+// xPosRoleReplace: "\\4"
+// yPosRoleReplace: "\\3"
+// zPosRoleReplace: "\\5"
+ }
+ }
+ }
+ }
+
+ Rectangle {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ border.color: barGraph.theme.gridLineColor
+ border.width: 2
+
+ Bars3D {
+ id: barGraph
+ anchors.fill: parent
+ anchors.margins: parent.border.width
+ theme: Theme3D {
+ type: Theme3D.ThemeQt
+ font.pointSize: 60
+ }
+ selectionMode: AbstractGraph3D.SelectionItemAndRow | AbstractGraph3D.SelectionSlice
+ scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh
+
+ Bar3DSeries {
+ itemLabelFormat: "@seriesName: @valueLabel"
+ name: "Population density"
+
+ ItemModelBarDataProxy {
+ itemModel: data.sharedData
+ // Mapping model roles to bar series rows, columns, and values.
+ rowRole: "coords"
+ columnRole: "coords"
+ valueRole: "data"
+ rowRolePattern: /(\d),\d/
+ columnRolePattern: /(\d),(\d)/
+ valueRolePattern: /^([^\/]*)\/([^\/]*)\/(.*)$/
+ rowRoleReplace: "\\1"
+ columnRoleReplace: "\\2"
+ valueRoleReplace: "\\3"
+ }
+ }
+ }
+ }
+ }
+
+ function clearSelections() {
+ barGraph.clearSelection()
+ scatterGraph.clearSelection()
+ surfaceGraph.clearSelection()
+ }
+
+ function resetCameras() {
+ surfaceGraph.scene.activeCamera.cameraPreset = Camera3D.CameraPresetIsometricLeftHigh
+ scatterGraph.scene.activeCamera.cameraPreset = Camera3D.CameraPresetIsometricLeftHigh
+ barGraph.scene.activeCamera.cameraPreset = Camera3D.CameraPresetIsometricLeftHigh
+ surfaceGraph.scene.activeCamera.zoomLevel = 100.0
+ scatterGraph.scene.activeCamera.zoomLevel = 100.0
+ barGraph.scene.activeCamera.zoomLevel = 100.0
+ }
+
+ function toggleMeshStyle() {
+ if (barGraph.seriesList[0].meshSmooth === true) {
+ barGraph.seriesList[0].meshSmooth = false
+ if (surfaceGraph.seriesList[0].flatShadingSupported)
+ surfaceGraph.seriesList[0].flatShadingEnabled = true
+ scatterGraph.seriesList[0].meshSmooth = false
+ } else {
+ barGraph.seriesList[0].meshSmooth = true
+ surfaceGraph.seriesList[0].flatShadingEnabled = false
+ scatterGraph.seriesList[0].meshSmooth = true
+ }
+ }
+}
diff --git a/tests/qmlmultitest/qmlmultitest.pro b/tests/qmlmultitest/qmlmultitest.pro
new file mode 100644
index 00000000..6e5e1b98
--- /dev/null
+++ b/tests/qmlmultitest/qmlmultitest.pro
@@ -0,0 +1,12 @@
+!include( ../tests.pri ) {
+ error( "Couldn't find the tests.pri file!" )
+}
+
+# The .cpp file which was generated for your project. Feel free to hack it.
+SOURCES += main.cpp
+
+RESOURCES += qmlmultitest.qrc
+
+OTHER_FILES += doc/src/* \
+ doc/images/* \
+ qml/qmlmultitest/*
diff --git a/tests/qmlmultitest/qmlmultitest.qrc b/tests/qmlmultitest/qmlmultitest.qrc
new file mode 100644
index 00000000..7fc9ade2
--- /dev/null
+++ b/tests/qmlmultitest/qmlmultitest.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/">
+ <file>qml/qmlmultitest/Data.qml</file>
+ <file>qml/qmlmultitest/main.qml</file>
+ <file>qml/qmlmultitest/NewButton.qml</file>
+ </qresource>
+</RCC>
diff --git a/tests/tests.pro b/tests/tests.pro
index 7b690c7d..8bbdc3f2 100644
--- a/tests/tests.pro
+++ b/tests/tests.pro
@@ -15,7 +15,8 @@ SUBDIRS += barstest \
multigraphs \
directional \
qmlmultiwindow \
- itemmodeltest
+ itemmodeltest \
+ qmlmultitest
#SUBDIRS += kinectsurface