blob: 82e67a21eb824791ffcfb9857d901d4afd1e7917 [file] [log] [blame]
/****************************************************************************
**
** 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
}
}