summaryrefslogtreecommitdiff
path: root/tests/manual/mappolyline_tester/main.qml
diff options
context:
space:
mode:
Diffstat (limited to 'tests/manual/mappolyline_tester/main.qml')
-rw-r--r--tests/manual/mappolyline_tester/main.qml327
1 files changed, 327 insertions, 0 deletions
diff --git a/tests/manual/mappolyline_tester/main.qml b/tests/manual/mappolyline_tester/main.qml
new file mode 100644
index 00000000..82e67a21
--- /dev/null
+++ b/tests/manual/mappolyline_tester/main.qml
@@ -0,0 +1,327 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.7
+import QtQuick.Window 2.2
+import QtQuick.Controls 2.13 as C2
+import QtPositioning 5.6
+import QtLocation 5.15
+
+Window {
+ id: win
+ visible: true
+ width: 1600
+ height: 800
+ title: qsTr("MapPolyline tester")
+
+ property real initialZL: 4
+ property var initialCenter: QtPositioning.coordinate(55, -160)
+ property real rotation : 0
+
+ Shortcut {
+ sequence: "Ctrl+R"
+ onActivated: {
+ rotation = rotation + 36
+ }
+ }
+
+ function syncMaps(mFrom, mTo, propName)
+ {
+ if (mTo[propName] !== mFrom[propName]) {
+ mTo[propName] = mFrom[propName]
+ }
+ }
+
+ Plugin {
+ id: osm // use only one plugin, to avoid messing up the cache
+ name: "osm"
+ }
+ Rectangle {
+ id: mapContainer
+ rotation: win.rotation
+ anchors.fill: parent
+ color: "lightsteelblue"
+
+ Map {
+ id: map
+ rotation: win.rotation
+ gesture.enabled: true
+ objectName: "map1"
+ anchors {
+ bottom: parent.bottom
+ top: parent.top
+ left: parent.left
+ right: (leftSwitch.checked) ? parent.right : parent.horizontalCenter
+ }
+
+ onCenterChanged: syncMaps(map, map2, "center")
+ onTiltChanged: syncMaps(map, map2, "tilt")
+ onBearingChanged: syncMaps(map, map2, "bearing")
+ onZoomLevelChanged: syncMaps(map, map2, "zoomLevel")
+ onFieldOfViewChanged: syncMaps(map, map2, "fieldOfView")
+
+ opacity: 1.0
+ color: 'transparent'
+ plugin: osm
+ center: initialCenter
+ activeMapType: map.supportedMapTypes[2]
+ zoomLevel: initialZL
+ z : parent.z + 1
+ copyrightsVisible: false
+
+ Component.onCompleted: {
+ var o = migComponent.createObject(map)
+ o.glPolylines = Qt.binding(function() {return switchPolylines1.currentText})
+ map.addMapItemGroup(o);
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ mouse.accepted = false
+ var crd = map.toCoordinate(Qt.point(mouse.x, mouse.y))
+ var s = crd.toString(0)
+ console.log("Clicked the map (not an Item) on ",s)
+ }
+ }
+
+ C2.ComboBox {
+ model: ['Software','OpenGL LineStrip','OpenGL Triangles']
+ id: switchPolylines1
+ anchors {
+ top: parent.top
+ right: parent.right
+ topMargin: 12
+ rightMargin: 12
+ }
+ }
+ }
+ Map {
+ id: map2
+ rotation: win.rotation
+ gesture.enabled: true
+ objectName: "map2"
+ visible: !leftSwitch.checked
+ anchors {
+ bottom: parent.bottom
+ top: parent.top
+ left: parent.horizontalCenter
+ right: parent.right
+ }
+
+ onCenterChanged: syncMaps(map2, map, "center")
+ onTiltChanged: syncMaps(map2, map, "tilt")
+ onBearingChanged: syncMaps(map2, map, "bearing")
+ onZoomLevelChanged: syncMaps(map2, map, "zoomLevel")
+ onFieldOfViewChanged: syncMaps(map2, map, "fieldOfView")
+
+ color: 'transparent'
+ plugin: osm
+ activeMapType: map.supportedMapTypes[2]
+ center: initialCenter
+ zoomLevel: initialZL
+ copyrightsVisible: false
+
+ Component.onCompleted: {
+ var o = migComponent.createObject(map2)
+ o.glPolylines = Qt.binding(function() {return switchPolylines2.currentText})
+ map2.addMapItemGroup(o);
+ }
+
+ C2.ComboBox {
+ model: ['Software','OpenGL LineStrip','OpenGL Triangles']
+ id: switchPolylines2
+ anchors {
+ top: parent.top
+ right: parent.right
+ topMargin: 12
+ rightMargin: 12
+ }
+ onCurrentTextChanged: console.log("CURRENT TEXT CHANGED ",currentText)
+ }
+ }
+ }
+
+ Component {
+ id: migComponent
+ MapItemGroup {
+ id: polyGroup
+ property bool glPolygons : true
+ property string glPolylines : "Software"
+ property bool glCircles : true
+ property bool glRectangles : true
+ objectName: parent.objectName + "_MIG_"
+
+ function polylineBackend()
+ {
+ return (polyGroup.glPolylines === "OpenGL LineStrip")
+ ? MapPolyline.OpenGLLineStrip
+ : ((polyGroup.glPolylines === "Software")
+ ? MapPolyline.Software : MapPolyline.OpenGLExtruded)
+ }
+
+ function polygonBackend()
+ {
+ return (polyGroup.glPolylines === "Software")
+ ? MapPolygon.Software : MapPolygon.OpenGL
+ }
+
+ function miterValue()
+ {
+ return (miterSwitch.checked) ? Qt.RoundCap : Qt.FlatCap
+ }
+
+ MapPolyline {
+ id: tstPolyLine // to verify the polygon stays where it's supposed to
+ line.color: 'black'
+ objectName: parent.objectName + "black"
+ line.width: 1
+ opacity: 1.0
+ backend: polylineBackend()
+ path: [
+ { latitude: 76.9965, longitude: -175.012 },
+ { latitude: 26.9965, longitude: -175.012 }
+ ]
+ }
+
+ MapPolyline {
+ id: timeline
+ line.color: "red"
+ objectName: parent.objectName + "timeline"
+ line.width: 4
+ backend: polylineBackend()
+ path: [
+ { latitude: 90, longitude: 180 },
+ { latitude: -90, longitude: -180 }
+ ]
+ }
+
+ MapPolyline {
+ id: poly1
+ line.color: "pink"
+ line.width: sliWidth.value
+ objectName: parent.objectName + "red"
+ backend: polylineBackend()
+
+ path: [
+ { latitude: 55, longitude: 170 },
+ { latitude: 66.9965, longitude: 170 },
+ { latitude: 66.9965, longitude: -175.012 },
+ { latitude: 55, longitude: -160 },
+ { latitude: 40, longitude: -165 },
+ { latitude: 45, longitude: 174 },
+ { latitude: 43, longitude: -168 }
+ ]
+ DynamicParameter {
+ type: "lineStyle"
+ property var lineCap: miterValue()
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: console.log("poly1 in "+parent.parent.objectName + "clicked")
+
+ Rectangle { // this is technically unsupported, but practically works.
+ color: "transparent"
+ border.color: "red"
+ anchors.fill: parent
+ }
+ }
+ }
+
+ MapPolygon {
+ id: poly2
+ color: "green"
+ border.color: "black"
+ border.width: 12
+ objectName: parent.objectName + "green"
+ backend: polygonBackend()
+ path: [
+ { latitude: -45, longitude: -170 },
+ { latitude: -55, longitude: -155 },
+ { latitude: -45, longitude: -130 },
+ { latitude: -35, longitude: -155 }
+ ]
+ MouseArea{
+ anchors.fill: parent
+ drag.target: parent
+ Rectangle { // this is technically unsupported, but practically works.
+ color: "transparent"
+ border.color: "red"
+ anchors.fill: parent
+ }
+ }
+ }
+
+// LongPolyline {
+// id: longPolyline
+// line.width: 10
+// line.color: 'firebrick'
+// backend: polylineBackend()
+// }
+ }
+ }
+
+
+ C2.Switch {
+ text: qsTr("Left")
+ id: leftSwitch
+ anchors {
+ top: parent.top
+ left: parent.left
+ leftMargin: 12
+ rightMargin: 12
+ }
+ checked: false
+ }
+ C2.Switch {
+ text: qsTr("Miter")
+ id: miterSwitch
+ anchors {
+ top: leftSwitch.bottom
+ left: parent.left
+ leftMargin: 12
+ rightMargin: 12
+ }
+ checked: false
+ }
+ C2.Slider {
+ id: sliWidth
+ orientation: Qt.Vertical
+ anchors {
+ left: parent.left
+ top: miterSwitch.bottom
+ bottom: parent.bottom
+ topMargin: 10
+ leftMargin: 10
+ bottomMargin: 10
+ }
+ from: 1
+ to: 50
+ value: 50
+ }
+}