diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-05-12 11:10:46 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-05-12 12:26:20 +0300 |
commit | 4dcef4be656aedb7c6c9e222f291a1a508641007 (patch) | |
tree | 1fe53e7b4ddba8c8ac719f95c04eac298cb22dc3 /tests/qmlmultitest/qml/qmlmultitest/main.qml | |
parent | 8e97d823208ed314278a22a924f0da10c9328839 (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/qmlmultitest/qml/qmlmultitest/main.qml')
-rw-r--r-- | tests/qmlmultitest/qml/qmlmultitest/main.qml | 231 |
1 files changed, 231 insertions, 0 deletions
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 + } + } +} |