From 5d224030a5295cd2f60a57887689c428dcfc2267 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 28 Feb 2014 13:08:51 +0200 Subject: New multi-window test app MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Iff97d020ef6104d266dbc53931e44d494b415800 Reviewed-by: Tomi Korpipää --- tests/qmlmultiwindow/main.cpp | 47 ++++ tests/qmlmultiwindow/qml/qmlmultiwindow/Data.qml | 48 ++++ .../qml/qmlmultiwindow/NewButton.qml | 52 +++++ tests/qmlmultiwindow/qml/qmlmultiwindow/main.qml | 258 +++++++++++++++++++++ tests/qmlmultiwindow/qmlmultiwindow.pro | 12 + tests/qmlmultiwindow/qmlmultiwindow.qrc | 7 + tests/tests.pro | 3 +- 7 files changed, 426 insertions(+), 1 deletion(-) create mode 100644 tests/qmlmultiwindow/main.cpp create mode 100644 tests/qmlmultiwindow/qml/qmlmultiwindow/Data.qml create mode 100644 tests/qmlmultiwindow/qml/qmlmultiwindow/NewButton.qml create mode 100644 tests/qmlmultiwindow/qml/qmlmultiwindow/main.qml create mode 100644 tests/qmlmultiwindow/qmlmultiwindow.pro create mode 100644 tests/qmlmultiwindow/qmlmultiwindow.qrc (limited to 'tests') diff --git a/tests/qmlmultiwindow/main.cpp b/tests/qmlmultiwindow/main.cpp new file mode 100644 index 00000000..33122641 --- /dev/null +++ b/tests/qmlmultiwindow/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 +#include +#include +#include + +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 multiwindow example")); + viewer.setSource(QUrl("qrc:/qml/qmlmultiwindow/main.qml")); + viewer.setResizeMode(QQuickView::SizeRootObjectToView); + viewer.show(); + + return app.exec(); +} diff --git a/tests/qmlmultiwindow/qml/qmlmultiwindow/Data.qml b/tests/qmlmultiwindow/qml/qmlmultiwindow/Data.qml new file mode 100644 index 00000000..43152e50 --- /dev/null +++ b/tests/qmlmultiwindow/qml/qmlmultiwindow/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 data: dataModel + + ListModel { + id: dataModel + ListElement{ row: "0"; col: "0"; longitude: "20.0"; latitude: "10.0"; pop_density: "4.75"; } + ListElement{ row: "1"; col: "0"; longitude: "21.1"; latitude: "10.3"; pop_density: "3.00"; } + ListElement{ row: "2"; col: "0"; longitude: "22.5"; latitude: "10.7"; pop_density: "1.24"; } + ListElement{ row: "3"; col: "0"; longitude: "24.0"; latitude: "10.5"; pop_density: "2.53"; } + ListElement{ row: "0"; col: "1"; longitude: "20.2"; latitude: "11.2"; pop_density: "3.55"; } + ListElement{ row: "1"; col: "1"; longitude: "21.3"; latitude: "11.5"; pop_density: "3.03"; } + ListElement{ row: "2"; col: "1"; longitude: "22.6"; latitude: "11.7"; pop_density: "3.46"; } + ListElement{ row: "3"; col: "1"; longitude: "23.4"; latitude: "11.5"; pop_density: "4.12"; } + ListElement{ row: "0"; col: "2"; longitude: "20.2"; latitude: "12.3"; pop_density: "3.37"; } + ListElement{ row: "1"; col: "2"; longitude: "21.1"; latitude: "12.4"; pop_density: "2.98"; } + ListElement{ row: "2"; col: "2"; longitude: "22.5"; latitude: "12.1"; pop_density: "3.33"; } + ListElement{ row: "3"; col: "2"; longitude: "23.3"; latitude: "12.7"; pop_density: "3.23"; } + ListElement{ row: "0"; col: "3"; longitude: "20.7"; latitude: "13.3"; pop_density: "5.34"; } + ListElement{ row: "1"; col: "3"; longitude: "21.5"; latitude: "13.2"; pop_density: "4.54"; } + ListElement{ row: "2"; col: "3"; longitude: "22.4"; latitude: "13.6"; pop_density: "4.65"; } + ListElement{ row: "3"; col: "3"; longitude: "23.2"; latitude: "13.4"; pop_density: "6.67"; } + ListElement{ row: "0"; col: "4"; longitude: "20.6"; latitude: "15.0"; pop_density: "6.01"; } + ListElement{ row: "1"; col: "4"; longitude: "21.3"; latitude: "14.6"; pop_density: "5.83"; } + ListElement{ row: "2"; col: "4"; longitude: "22.5"; latitude: "14.8"; pop_density: "7.32"; } + ListElement{ row: "3"; col: "4"; longitude: "23.7"; latitude: "14.3"; pop_density: "6.90"; } + } +} + diff --git a/tests/qmlmultiwindow/qml/qmlmultiwindow/NewButton.qml b/tests/qmlmultiwindow/qml/qmlmultiwindow/NewButton.qml new file mode 100644 index 00000000..e4fb99d2 --- /dev/null +++ b/tests/qmlmultiwindow/qml/qmlmultiwindow/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/qmlmultiwindow/qml/qmlmultiwindow/main.qml b/tests/qmlmultiwindow/qml/qmlmultiwindow/main.qml new file mode 100644 index 00000000..fc7626b3 --- /dev/null +++ b/tests/qmlmultiwindow/qml/qmlmultiwindow/main.qml @@ -0,0 +1,258 @@ +/**************************************************************************** +** +** 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.Window 2.1 +import QtQuick.Layouts 1.0 +import QtDataVisualization 1.0 +import "." + +Rectangle { + id: mainView + width: 800 + height: 600 + + Data { + id: data + } + + Window { + id: firstWindow + x: 100 + y: 100 + width: 500 + height: 500 + visible: true + Rectangle { + id: firstRect + color: "red" + anchors.fill: parent + } + } + + Window { + id: secondWindow + x: 100 + y: 700 + width: 500 + height: 500 + visible: true + Rectangle { + id: secondRect + color: "blue" + anchors.fill: parent + } + } + + states: [ + State { + name: "firstWindow" + ParentChange { target: surfaceGraph; parent: firstRect; x: 0; y: 0 } + }, + State { + name: "secondWindow" + ParentChange { target: surfaceGraph; parent: secondRect; x: 0; y: 0 } + } + ] + + state: "firstWindow" + + //! [0] + 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.data + // The surface data points are not neatly lined up in rows and columns, + // so we define explicit row and column roles. + rowRole: "row" + columnRole: "col" + xPosRole: "latitude" + zPosRole: "longitude" + yPosRole: "pop_density" + } + } + } + } + + // 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: "Move graph between windows" + onClicked: { + if (mainView.state === "firstWindow") { + mainView.state = "secondWindow" + } else { + mainView.state = "firstWindow" + } + } + } + + 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.data + // Mapping model roles to scatter series item coordinates. + xPosRole: "latitude" + zPosRole: "longitude" + yPosRole: "pop_density" + } + } + } + } + + 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.data + // Mapping model roles to bar series rows, columns, and values. + rowRole: "row" + columnRole: "col" + valueRole: "pop_density" + } + } + } + } + } + //! [0] + + 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/qmlmultiwindow/qmlmultiwindow.pro b/tests/qmlmultiwindow/qmlmultiwindow.pro new file mode 100644 index 00000000..c3e7d1bd --- /dev/null +++ b/tests/qmlmultiwindow/qmlmultiwindow.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 += qmlmultiwindow.qrc + +OTHER_FILES += doc/src/* \ + doc/images/* \ + qml/qmlmultiwindow/* diff --git a/tests/qmlmultiwindow/qmlmultiwindow.qrc b/tests/qmlmultiwindow/qmlmultiwindow.qrc new file mode 100644 index 00000000..31a92b25 --- /dev/null +++ b/tests/qmlmultiwindow/qmlmultiwindow.qrc @@ -0,0 +1,7 @@ + + + qml/qmlmultiwindow/Data.qml + qml/qmlmultiwindow/main.qml + qml/qmlmultiwindow/NewButton.qml + + diff --git a/tests/tests.pro b/tests/tests.pro index ec28d997..613534e9 100644 --- a/tests/tests.pro +++ b/tests/tests.pro @@ -13,7 +13,8 @@ SUBDIRS += barstest \ qmlcamera \ qmldynamicdata \ multigraphs \ - directional + directional \ + qmlmultiwindow #SUBDIRS += kinectsurface -- cgit v1.2.3