/**************************************************************************** ** ** 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 } }