diff options
Diffstat (limited to 'tests/manual/planets-qml/PlanetsMain.qml')
-rw-r--r-- | tests/manual/planets-qml/PlanetsMain.qml | 522 |
1 files changed, 522 insertions, 0 deletions
diff --git a/tests/manual/planets-qml/PlanetsMain.qml b/tests/manual/planets-qml/PlanetsMain.qml new file mode 100644 index 000000000..4a3ec2545 --- /dev/null +++ b/tests/manual/planets-qml/PlanetsMain.qml @@ -0,0 +1,522 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +import QtQuick 2.0 +import QtQuick.Window 2.2 +import QtQuick.Scene3D 2.0 +import "planets.js" as Planets + +Item { + id: mainview + width: 1280 + height: 768 + visible: true + property int focusedPlanet: 100 + property int oldPlanet: 0 + property int frames: 0 + property int sliderLength: (width < height) ? width / 2 : height / 2 + property real textSize: sliderLength / 20 + property real planetButtonSize: (height < 2200) ? (height / 13) : 200 + + Connections { + target: networkController + + function onCommandAccepted() { + var focusedItem = mainview.Window.window.activeFocusItem + if (focusedItem && focusedItem.panningEnabled) { + focusedItem.panningEnabled = false + } + + switch (command) { + case "selectPlanet": + mainview.focusedPlanet = Planets.planetId(decodeURIComponent(value)) + planetButtonView.forceActiveFocus() + planetButtonView.currentIndex = Planets.planetIndex(value) + break + case "setRotationSpeed": + rotationSpeedSlider.forceActiveFocus() + rotationSpeedSlider.value = rotationSpeedSlider.from + + ((rotationSpeedSlider.to - rotationSpeedSlider.from) * value) + break + case "setViewingDistance": + viewingDistanceSlider.forceActiveFocus() + viewingDistanceSlider.value = viewingDistanceSlider.from + + ((viewingDistanceSlider.to - viewingDistanceSlider.from) * value) + break + case "setPlanetSize": + planetSizeSlider.forceActiveFocus() + planetSizeSlider.value = planetSizeSlider.from + + ((planetSizeSlider.to - planetSizeSlider.from) * value) + break + } + } + } + + //! [0] + Scene3D { + anchors.fill: parent + aspects: ["render", "logic", "input"] + + SolarSystem { id: solarsystem } + } + //! [0] + + MouseArea { + anchors.fill: parent + acceptedButtons: Qt.LeftButton + onClicked: + focusedPlanet = 100 + } + + //! [1] + onFocusedPlanetChanged: { + if (focusedPlanet == 100) { + info.opacity = 0 + updatePlanetInfo() + } else { + updatePlanetInfo() + info.opacity = 1 + } + + solarsystem.changePlanetFocus(oldPlanet, focusedPlanet) + oldPlanet = focusedPlanet + } + //! [1] + + ListModel { + id: planetModel + + ListElement { + name: "Sun" + radius: "109 x Earth" + temperature: "5 778 K" + orbitalPeriod: "" + distance: "" + planetImageSource: "qrc:/images/sun.png" + planetNumber: 0 + } + ListElement { + name: "Mercury" + radius: "0.3829 x Earth" + temperature: "80-700 K" + orbitalPeriod: "87.969 d" + distance: "0.387 098 AU" + planetImageSource: "qrc:/images/mercury.png" + planetNumber: 1 + } + ListElement { + name: "Venus" + radius: "0.9499 x Earth" + temperature: "737 K" + orbitalPeriod: "224.701 d" + distance: "0.723 327 AU" + planetImageSource: "qrc:/images/venus.png" + planetNumber: 2 + } + ListElement { + name: "Earth" + radius: "6 378.1 km" + temperature: "184-330 K" + orbitalPeriod: "365.256 d" + distance: "149598261 km (1 AU)" + planetImageSource: "qrc:/images/earth.png" + planetNumber: 3 + } + ListElement { + name: "Mars" + radius: "0.533 x Earth" + temperature: "130-308 K" + orbitalPeriod: "686.971 d" + distance: "1.523679 AU" + planetImageSource: "qrc:/images/mars.png" + planetNumber: 4 + } + ListElement { + name: "Jupiter" + radius: "11.209 x Earth" + temperature: "112-165 K" + orbitalPeriod: "4332.59 d" + distance: "5.204267 AU" + planetImageSource: "qrc:/images/jupiter.png" + planetNumber: 5 + } + ListElement { + name: "Saturn" + radius: "9.4492 x Earth" + temperature: "84-134 K" + orbitalPeriod: "10759.22 d" + distance: "9.5820172 AU" + planetImageSource: "qrc:/images/saturn.png" + planetNumber: 6 + } + ListElement { + name: "Uranus" + radius: "4.007 x Earth" + temperature: "49-76 K" + orbitalPeriod: "30687.15 d" + distance: "19.189253 AU" + planetImageSource: "qrc:/images/uranus.png" + planetNumber: 7 + } + ListElement { + name: "Neptune" + radius: "3.883 x Earth" + temperature: "55-72 K" + orbitalPeriod: "60190.03 d" + distance: "30.070900 AU" + planetImageSource: "qrc:/images/neptune.png" + planetNumber: 8 + } + ListElement { + name: "Solar System" + planetImageSource: "" + planetNumber: 100 // Defaults to solar system + } + } + + Component { + id: planetButtonDelegate + PlanetButton { + source: model.planetImageSource + text: model.name + focusPlanet: model.planetNumber + planetSelector: mainview + buttonSize: planetButtonSize + fontSize: textSize + + scale: activeFocus ? 1.4 : 1.0 + + Behavior on scale { + PropertyAnimation { + duration: 200 + } + } + + signal swipeUp() + signal swipeDown() + signal swipeLeft() + + onSwipeUp: { + if (planetButtonView.currentIndex > 0) { + planetButtonView.currentIndex-- + } else { + rotationSpeedSlider.forceActiveFocus() + } + } + + onSwipeDown: { + if (planetButtonView.currentIndex < planetButtonView.count - 1) { + planetButtonView.currentIndex++ + } else { + planetSizeSlider.forceActiveFocus() + } + } + + onSwipeLeft: { + if (index <= planetButtonView.count / 2) { + rotationSpeedSlider.forceActiveFocus() + } else { + planetSizeSlider.forceActiveFocus() + } + } + + Keys.onPressed: { + if (event.key === Qt.Key_Select) { + planetSelector.focusedPlanet = focusPlanet + } + } + } + } + + ListView { + id: planetButtonView + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: planetButtonSize / 2 + height: childrenRect.height + spacing: planetButtonSize / 6 + width: planetButtonSize * 1.4 + interactive: false + model: planetModel + delegate: planetButtonDelegate + } + + InfoSheet { + id: info + width: 400 + anchors.right: planetButtonView.left + anchors.rightMargin: 40 + opacity: 1 + + // Set initial information for Solar System + planet: "Solar System" + exampleDetails: "This example shows a 3D model of the Solar</p>" + + "<p>System comprised of the Sun and the eight</p>" + + "<p>planets orbiting the Sun.</p></br>" + + "<p>The example is implemented using Qt3D.</p>" + + "<p>The textures and images used in the example</p>" + + "<p>are Copyright (c) by James Hastings-Trew,</p>" + + "<a href=\"http://planetpixelemporium.com/planets.html\">" + + "http://planetpixelemporium.com/planets.html</a>" + } + + function updatePlanetInfo() { + info.width = 200 + + if (focusedPlanet !== 100) { + info.planet = planetModel.get(focusedPlanet).name + info.radius = planetModel.get(focusedPlanet).radius + info.temperature = planetModel.get(focusedPlanet).temperature + info.orbitalPeriod = planetModel.get(focusedPlanet).orbitalPeriod + info.distance = planetModel.get(focusedPlanet).distance + } + } + + Row { + anchors.top: parent.top + anchors.topMargin: 10 + anchors.horizontalCenter: parent.horizontalCenter + + spacing: 10 + scale: rotationSpeedSlider.activeFocus ? 1.4 : 1.0 + opacity: rotationSpeedSlider.activeFocus ? 1.0 : 0.5 + + Behavior on scale { + PropertyAnimation { + duration: 200 + } + } + + Text { + anchors.verticalCenter: parent.verticalCenter + + font.family: "Helvetica" + font.pixelSize: textSize + font.weight: Font.Light + color: rotationSpeedSlider.panningEnabled ? "#80c342" : "#ffffff" + text: "Rotation Speed" + } + + StyledSlider { + id: rotationSpeedSlider + anchors.verticalCenter: parent.verticalCenter + width: sliderLength + value: 0.2 + from: 0 + to: 1 + onValueChanged: solarsystem.changeSpeed(value) + + focus: Qt.platform.os === "tvos" ? true : false + + property bool panningEnabled: false + signal swipeDown() + signal swipeLeft() + signal swipeRight() + signal pannedHorizontally(real p) + signal pannedVertically(real p) + + onSwipeDown: { + planetSizeSlider.forceActiveFocus() + } + + onSwipeLeft: { + viewingDistanceSlider.forceActiveFocus() + } + + onSwipeRight: { + planetButtonView.currentIndex = 0 + planetButtonView.forceActiveFocus() + } + + onPannedHorizontally: { + var step = (to - from) / 30 + + if (p > 0) { + value += step + } else { + value -= step + } + } + + Keys.onPressed: { + if (event.key === Qt.Key_Select) { + panningEnabled = !panningEnabled + } + } + } + } + + Column { + anchors.left: parent.left + anchors.leftMargin: 30 + anchors.verticalCenter: parent.verticalCenter + + spacing: 10 + scale: viewingDistanceSlider.activeFocus ? 1.4 : 1.0 + opacity: viewingDistanceSlider.activeFocus ? 1.0 : 0.5 + + Behavior on scale { + PropertyAnimation { + duration: 200 + } + } + + StyledSlider { + id: viewingDistanceSlider + + anchors.horizontalCenter: parent.horizontalCenter + orientation: Qt.Vertical + height: sliderLength + value: 1 + from: 1 + to: 2 + //! [2] + onValueChanged: solarsystem.changeCameraDistance(value) + //! [2] + + property bool panningEnabled: false + signal swipeUp() + signal swipeDown() + signal swipeRight() + signal pannedHorizontally(real p) + signal pannedVertically(real p) + + onSwipeUp: { + rotationSpeedSlider.forceActiveFocus() + } + + onSwipeDown: { + planetSizeSlider.forceActiveFocus() + } + + onSwipeRight: { + planetButtonView.currentIndex = 0 + planetButtonView.forceActiveFocus() + } + + onPannedVertically: { + var step = (to - from) / 30 + + if (p > 0) { + value += step + } else { + value -= step + } + } + + Keys.onPressed: { + if (event.key === Qt.Key_Select) { + panningEnabled = !panningEnabled + } + } + } + + Text { + anchors.horizontalCenter: parent.horizontalCenter + + font.family: "Helvetica" + font.pixelSize: textSize + font.weight: Font.Light + color: viewingDistanceSlider.panningEnabled ? "#80c342" : "#ffffff" + text: "Viewing\nDistance" + } + } + + Row { + anchors.bottom: parent.bottom + anchors.bottomMargin: 10 + anchors.horizontalCenter: parent.horizontalCenter + + spacing: 10 + scale: planetSizeSlider.activeFocus ? 1.4 : 1.0 + opacity: planetSizeSlider.activeFocus ? 1.0 : 0.5 + + Behavior on scale { + PropertyAnimation { + duration: 200 + } + } + + Text { + anchors.verticalCenter: parent.verticalCenter + font.family: "Helvetica" + font.pixelSize: textSize + font.weight: Font.Light + color: planetSizeSlider.panningEnabled ? "#80c342" : "#ffffff" + text: "Planet Size" + } + + StyledSlider { + id: planetSizeSlider + anchors.verticalCenter: parent.verticalCenter + width: sliderLength + value: 1200 + from: 1 + to: 2000 + onValueChanged: solarsystem.changeScale(value, false) + + property bool panningEnabled: false + signal swipeUp() + signal swipeLeft() + signal swipeRight() + signal pannedHorizontally(real p) + signal pannedVertically(real p) + + onSwipeUp: { + rotationSpeedSlider.forceActiveFocus() + } + + onSwipeLeft: { + viewingDistanceSlider.forceActiveFocus() + } + + onSwipeRight: { + planetButtonView.currentIndex = planetButtonView.count - 1 + planetButtonView.forceActiveFocus() + } + + onPannedHorizontally: { + var step = (to - from) / 30 + + if (p > 0) { + value += step + } else { + value -= step + } + } + + Keys.onPressed: { + if (event.key === Qt.Key_Select) { + panningEnabled = !panningEnabled + } + } + } + } + + // FPS display, initially hidden, clicking will show it + FpsDisplay { + id: fpsDisplay + anchors.left: parent.left + anchors.bottom: parent.bottom + width: 32 + height: 64 + hidden: true + } + + Timer { + interval: 1000 + repeat: true + running: !fpsDisplay.hidden + onTriggered: { + fpsDisplay.fps = frames + frames = 0 + } + onRunningChanged: frames = 0 + } + + Loader { + anchors.fill: parent + + source: Qt.platform.os === "tvos" ? "AppleTVInput.qml" : "" + } +} |