diff options
-rw-r--r-- | examples/location/geojson_viewer/main.qml | 30 | ||||
-rw-r--r-- | examples/location/minimal_map/main.qml | 42 | ||||
-rw-r--r-- | src/location/CMakeLists.txt | 6 | ||||
-rw-r--r-- | src/location/maps/MapView.qml | 189 | ||||
-rw-r--r-- | tests/auto/declarative_ui/tst_map.qml | 4 | ||||
-rw-r--r-- | tests/auto/declarative_ui/tst_map_error.qml | 120 | ||||
-rw-r--r-- | tests/auto/declarative_ui/tst_map_flick.qml | 255 | ||||
-rw-r--r-- | tests/auto/declarative_ui/tst_map_item.qml | 27 | ||||
-rw-r--r-- | tests/auto/declarative_ui/tst_map_item_details.qml | 25 | ||||
-rw-r--r-- | tests/auto/declarative_ui/tst_map_keepgrab.qml | 93 | ||||
-rw-r--r-- | tests/auto/declarative_ui/tst_map_maptype.qml | 4 | ||||
-rw-r--r-- | tests/auto/declarative_ui/tst_map_mouse.qml | 196 |
12 files changed, 522 insertions, 469 deletions
diff --git a/examples/location/geojson_viewer/main.qml b/examples/location/geojson_viewer/main.qml index 85d0e07d..2aab296e 100644 --- a/examples/location/geojson_viewer/main.qml +++ b/examples/location/geojson_viewer/main.qml @@ -63,7 +63,10 @@ ApplicationWindow { width: 1024 height: 1024 menuBar: mainMenu - title: qsTr("GeoJSON Viewer") + title: qsTr("GeoJSON Viewer: ") + view.map.center + + " zoom " + view.map.zoomLevel.toFixed(3) + + " min " + view.map.minimumZoomLevel + + " max " + view.map.maximumZoomLevel FileDialog { visible: false @@ -147,23 +150,26 @@ ApplicationWindow { } Shortcut { - sequence: "Ctrl+P" - onActivated: { - - console.log("Center : QtPositioning.coordinate(",map.center.latitude,",",map.center.longitude,")") - console.log("Zoom : ",map.zoomLevel) - } + enabled: view.map.zoomLevel < view.map.maximumZoomLevel + sequence: StandardKey.ZoomIn + onActivated: view.map.zoomLevel = Math.round(view.map.zoomLevel + 1) + } + Shortcut { + enabled: view.map.zoomLevel > view.map.minimumZoomLevel + sequence: StandardKey.ZoomOut + onActivated: view.map.zoomLevel = Math.round(view.map.zoomLevel - 1) } - Map { - id: map + MapView { + id: view anchors.fill: parent - center: QtPositioning.coordinate(43.59, 13.50) // Starting coordinates: Ancona, the city where I am studying :) - plugin: Plugin { name: "osm" } - zoomLevel: 4 + map.center: QtPositioning.coordinate(43.59, 13.50) // Ancona, Italy + map.plugin: Plugin { name: "osm" } + map.zoomLevel: 4 MapItemView { id: miv + parent: view.map model: geoJsoner.model delegate: GeoJsonDelegate { } diff --git a/examples/location/minimal_map/main.qml b/examples/location/minimal_map/main.qml index 92230f76..be78f00d 100644 --- a/examples/location/minimal_map/main.qml +++ b/examples/location/minimal_map/main.qml @@ -49,7 +49,6 @@ ****************************************************************************/ import QtQuick -import QtQuick.Window import QtLocation import QtPositioning @@ -57,6 +56,8 @@ Window { width: Qt.platform.os == "android" ? Screen.width : 512 height: Qt.platform.os == "android" ? Screen.height : 512 visible: true + title: map.center + " zoom " + map.zoomLevel.toFixed(3) + + " min " + map.minimumZoomLevel + " max " + map.maximumZoomLevel Plugin { id: mapPlugin @@ -69,9 +70,48 @@ Window { } Map { + id: map anchors.fill: parent plugin: mapPlugin center: QtPositioning.coordinate(59.91, 10.75) // Oslo zoomLevel: 14 + property geoCoordinate startCentroid + + PinchHandler { + id: pinch + target: null + onActiveChanged: if (active) { + map.startCentroid = map.toCoordinate(pinch.centroid.position, false) + } + onScaleChanged: (delta) => { + map.zoomLevel += Math.log2(delta) + map.alignCoordinateToPoint(map.startCentroid, pinch.centroid.position) + } + onRotationChanged: (delta) => { + map.bearing -= delta + map.alignCoordinateToPoint(map.startCentroid, pinch.centroid.position) + } + grabPermissions: PointerHandler.TakeOverForbidden + } + WheelHandler { + id: wheel + rotationScale: 1/120 + property: "zoomLevel" + } + DragHandler { + id: drag + target: null + onTranslationChanged: (delta) => map.pan(-delta.x, -delta.y) + } + Shortcut { + enabled: map.zoomLevel < map.maximumZoomLevel + sequence: StandardKey.ZoomIn + onActivated: map.zoomLevel = Math.round(map.zoomLevel + 1) + } + Shortcut { + enabled: map.zoomLevel > map.minimumZoomLevel + sequence: StandardKey.ZoomOut + onActivated: map.zoomLevel = Math.round(map.zoomLevel - 1) + } } } diff --git a/src/location/CMakeLists.txt b/src/location/CMakeLists.txt index e4ab95a7..e0eca263 100644 --- a/src/location/CMakeLists.txt +++ b/src/location/CMakeLists.txt @@ -97,12 +97,18 @@ qt_internal_add_module(Location GENERATE_PRIVATE_CPP_EXPORTS ) +set_source_files_properties(maps/MapView.qml PROPERTIES + QT_RESOURCE_ALIAS MapView.qml +) + qt_internal_add_qml_module(Location URI QtLocation VERSION ${PROJECT_VERSION} PLUGIN_TARGET declarative_location NO_PLUGIN_OPTIONAL CLASS_NAME QtLocationDeclarativeModule + QML_FILES + maps/MapView.qml SOURCES # value types maps/qgeomaptype_p.h diff --git a/src/location/maps/MapView.qml b/src/location/maps/MapView.qml new file mode 100644 index 00000000..d0ffc8b7 --- /dev/null +++ b/src/location/maps/MapView.qml @@ -0,0 +1,189 @@ +/**************************************************************************** +** +** Copyright (C) 2023 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtLocation module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** 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-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtLocation as QL +import QtPositioning as QP + +/*! + \qmltype MapView + \inqmlmodule QtLocation + \brief An interactive map viewer component. + + MapView wraps a Map and adds the typical interactive features: + changing the zoom level, panning and tilting the map. + + The implementation is a QML assembly of smaller building blocks that are + available separately. In case you want to make changes in your own version + of this component, you can copy the QML, which is installed into the + \c qml/QtLocation module directory, and modify it as needed. + + \sa Map +*/ +Item { + /*! + \qmlproperty Map MapView::map + + This property provides access to the underlying Map instance. + */ + property alias map: map + + /*! + \qmlproperty real minimumZoomLevel + + The minimum zoom level according to the size of the view. + + \sa Map::minimumZoomLevel + */ + // TODO how do we calculate that? map.minimumZoomLevel is 0, but it stops you from zooming out that far + property real minimumZoomLevel: map.minimumZoomLevel + + /*! + \qmlproperty real minimumZoomLevel + + The maximum valid zoom level for the map. + + \sa Map::maximumZoomLevel + */ + property real maximumZoomLevel: map.maximumZoomLevel + + // -------------------------------- + // implementation + id: root + Component.onCompleted: map.resetPinchMinMax() + + QL.Map { + id: map + width: parent.width + height: parent.height + tilt: tiltHandler.persistentTranslation.y / -5 + property bool pinchAdjustingZoom: false + + onZoomLevelChanged: if (!pinchAdjustingZoom) resetPinchMinMax() + + function resetPinchMinMax() { + pinch.persistentScale = 1 + pinch.scaleAxis.minimum = Math.pow(2, root.minimumZoomLevel - map.zoomLevel + 1) + pinch.scaleAxis.maximum = Math.pow(2, root.maximumZoomLevel - map.zoomLevel - 1) + } + + PinchHandler { + id: pinch + target: null + property real rawBearing: 0 + property QP.geoCoordinate startCentroid + onActiveChanged: if (active) { + flickAnimation.stop() + pinch.startCentroid = map.toCoordinate(pinch.centroid.position, false) + } else { + flickAnimation.restart(centroid.velocity) + map.resetPinchMinMax() + } + onScaleChanged: (delta) => { + map.pinchAdjustingZoom = true + map.zoomLevel += Math.log2(delta) + map.alignCoordinateToPoint(pinch.startCentroid, pinch.centroid.position) + map.pinchAdjustingZoom = false + } + onRotationChanged: (delta) => { + pinch.rawBearing -= delta + // snap to 0° if we're close enough + map.bearing = (Math.abs(pinch.rawBearing) < 5) ? 0 : pinch.rawBearing + map.alignCoordinateToPoint(pinch.startCentroid, pinch.centroid.position) + } + grabPermissions: PointerHandler.TakeOverForbidden + } + // TODO use BoundaryRule to limit zoom? + WheelHandler { + id: wheel + onWheel: (event) => { + const loc = map.toCoordinate(wheel.point.position) + map.zoomLevel += event.angleDelta.y / 120 + map.alignCoordinateToPoint(loc, wheel.point.position) + } + } + DragHandler { + id: drag + signal flickStarted // for autotests only + signal flickEnded + target: null + onTranslationChanged: (delta) => map.pan(-delta.x, -delta.y) + onActiveChanged: if (active) { + flickAnimation.stop() + } else { + flickAnimation.restart(centroid.velocity) + } + } + + property vector3d animDest + onAnimDestChanged: if (flickAnimation.running) { + const delta = Qt.vector2d(animDest.x - flickAnimation.animDestLast.x, animDest.y - flickAnimation.animDestLast.y) + map.pan(-delta.x, -delta.y) + flickAnimation.animDestLast = animDest + } + + Vector3dAnimation on animDest { + id: flickAnimation + property vector3d animDestLast + from: Qt.vector3d(0, 0, 0) + duration: 500 + easing.type: Easing.OutQuad + onStarted: drag.flickStarted() + onStopped: drag.flickEnded() + + function restart(vel) { + stop() + map.animDest = Qt.vector3d(0, 0, 0) + animDestLast = Qt.vector3d(0, 0, 0) + to = Qt.vector3d(vel.x / duration * 100, vel.y / duration * 100, 0) + start() + } + } + + DragHandler { + id: tiltHandler + minimumPointCount: 2 + maximumPointCount: 2 + target: null + xAxis.enabled: false + grabPermissions: PointerHandler.TakeOverForbidden + onActiveChanged: if (active) flickAnimation.stop() + } + } +} diff --git a/tests/auto/declarative_ui/tst_map.qml b/tests/auto/declarative_ui/tst_map.qml index 71a19ac3..cf6cf74d 100644 --- a/tests/auto/declarative_ui/tst_map.qml +++ b/tests/auto/declarative_ui/tst_map.qml @@ -282,13 +282,13 @@ Item { //Trying to set higher than max, max should be set. map.maximumZoomLevel = 21 compare(map.minimumZoomLevel, 5) - compare(map.maximumZoomLevel, 20) + compare(map.maximumZoomLevel, 21) // TODO enforce maximum from the plugin //Negative values should be ignored map.minimumZoomLevel = -1 map.maximumZoomLevel = -2 compare(map.minimumZoomLevel, 5) - compare(map.maximumZoomLevel, 20) + compare(map.maximumZoomLevel, 21) //Max limit lower than curr zoom, should change curr zoom map.zoomLevel = 18 diff --git a/tests/auto/declarative_ui/tst_map_error.qml b/tests/auto/declarative_ui/tst_map_error.qml index 7263ecae..b811f9eb 100644 --- a/tests/auto/declarative_ui/tst_map_error.qml +++ b/tests/auto/declarative_ui/tst_map_error.qml @@ -46,10 +46,10 @@ Item { ] } - Map { + MapView { id: map_error_plugin; property alias mouseClickedSpy: mouseClickedSpy1 - x: 0; y: 0; width: 100; height: 100; plugin: errorPlugin; + x: 0; y: 0; width: 100; height: 100; map.plugin: errorPlugin; MouseArea { id: mouseArea1 @@ -61,7 +61,7 @@ Item { SignalSpy {id: mouseClickedSpy1; target: mouseArea1; signalName: "clicked"} } - Map { + MapView { id: map_no_plugin; property alias mouseClickedSpy: mouseClickedSpy2 x: 100; y: 0; width: 100; height: 100; @@ -81,10 +81,10 @@ Item { when: windowShown function init() { - map_error_plugin.zoomLevel = 0 - map_no_plugin.zoomLevel = 0 - map_error_plugin.center = QtPositioning.coordinate(0, 0) - map_no_plugin.center = QtPositioning.coordinate(0, 0) + map_error_plugin.map.zoomLevel = 0 + map_no_plugin.map.zoomLevel = 0 + map_error_plugin.map.center = QtPositioning.coordinate(0, 0) + map_no_plugin.map.center = QtPositioning.coordinate(0, 0) map_error_plugin.mouseClickedSpy.clear() map_no_plugin.mouseClickedSpy.clear() } @@ -110,106 +110,100 @@ Item { function test_map_no_supportedMapTypes() { - compare(map_no_plugin.supportedMapTypes.length , 0) - compare(map_error_plugin.supportedMapTypes.length , 0) + compare(map_no_plugin.map.supportedMapTypes.length , 0) + compare(map_error_plugin.map.supportedMapTypes.length , 0) } function test_map_set_zoom_level() { - map_no_plugin.zoomLevel = 9 - compare(map_no_plugin.zoomLevel,9) - map_error_plugin.zoomLevel = 9 - compare(map_error_plugin.zoomLevel,9) + map_no_plugin.map.zoomLevel = 9 + compare(map_no_plugin.map.zoomLevel,9) + map_error_plugin.map.zoomLevel = 9 + compare(map_error_plugin.map.zoomLevel,9) } function test_map_set_center() { - map_no_plugin.center = coordinate - verify(map_no_plugin.center === coordinate) - map_error_plugin.center = coordinate - verify(map_error_plugin.center === coordinate) + map_no_plugin.map.center = coordinate + verify(map_no_plugin.map.center === coordinate) + map_error_plugin.map.center = coordinate + verify(map_error_plugin.map.center === coordinate) } function test_map_no_mapItems() { - compare(map_no_plugin.mapItems.length , 0) - compare(map_error_plugin.mapItems.length , 0) + compare(map_no_plugin.map.mapItems.length , 0) + compare(map_error_plugin.map.mapItems.length , 0) } function test_map_error() { - compare(map_no_plugin.error , 0) - compare(map_no_plugin.errorString , "") - compare(map_error_plugin.error , 1) - compare(map_error_plugin.errorString ,"This error was expected. No worries !") + compare(map_no_plugin.map.error , 0) + compare(map_no_plugin.map.errorString , "") + compare(map_error_plugin.map.error , 1) + compare(map_error_plugin.map.errorString ,"This error was expected. No worries !") } function test_map_toCoordinate() { - map_no_plugin.center = coordinate - compare(map_no_plugin.toCoordinate(Qt.point(50,50)).isValid,false) - map_error_plugin.center = coordinate - compare(map_error_plugin.toCoordinate(Qt.point(50,50)).isValid,false) + map_no_plugin.map.center = coordinate + compare(map_no_plugin.map.toCoordinate(Qt.point(50,50)).isValid,false) + map_error_plugin.map.center = coordinate + compare(map_error_plugin.map.toCoordinate(Qt.point(50,50)).isValid,false) } function test_map_fromCoordinate() { - verify(isNaN(map_error_plugin.fromCoordinate(coordinate).x)) - verify(isNaN(map_error_plugin.fromCoordinate(coordinate).y)) - verify(isNaN(map_no_plugin.fromCoordinate(coordinate).x)) - verify(isNaN(map_no_plugin.fromCoordinate(coordinate).y)) - } - - function test_map_gesture_enabled() - { - verify(map_error_plugin.gesture.enabled) - verify(map_no_plugin.gesture.enabled) + verify(isNaN(map_error_plugin.map.fromCoordinate(coordinate).x)) + verify(isNaN(map_error_plugin.map.fromCoordinate(coordinate).y)) + verify(isNaN(map_no_plugin.map.fromCoordinate(coordinate).x)) + verify(isNaN(map_no_plugin.map.fromCoordinate(coordinate).y)) } function test_map_pan() { - map_no_plugin.center = coordinate - map_no_plugin.pan(20,20) - verify(map_no_plugin.center === coordinate) - map_error_plugin.center = coordinate - map_error_plugin.pan(20,20) - verify(map_error_plugin.center === coordinate) + map_no_plugin.map.center = coordinate + map_no_plugin.map.pan(20,20) + verify(map_no_plugin.map.center === coordinate) + map_error_plugin.map.center = coordinate + map_error_plugin.map.pan(20,20) + verify(map_error_plugin.map.center === coordinate) } function test_map_prefetchData() { - map_error_plugin.prefetchData() - map_no_plugin.prefetchData() + map_error_plugin.map.prefetchData() + map_no_plugin.map.prefetchData() } function test_map_fitViewportToMapItems() { - map_error_plugin.fitViewportToMapItems() - map_no_plugin.fitViewportToMapItems() + map_error_plugin.map.fitViewportToMapItems() + map_no_plugin.map.fitViewportToMapItems() } function test_map_setVisibleRegion() { - map_no_plugin.visibleRegion = QtPositioning.circle(coordinate,1000) - verify(map_no_plugin.center != coordinate) - verify(map_no_plugin.visibleRegion.contains(coordinate.atDistanceAndAzimuth(1000,0)) == true) - verify(map_no_plugin.visibleRegion.contains(coordinate.atDistanceAndAzimuth(1000,90)) == true) - verify(map_no_plugin.visibleRegion.contains(coordinate.atDistanceAndAzimuth(1000,180)) == true) - verify(map_no_plugin.visibleRegion.contains(coordinate.atDistanceAndAzimuth(1000,270)) == true) - map_error_plugin.visibleRegion = QtPositioning.circle(coordinate,1000) - verify(map_error_plugin.center != coordinate) - verify(map_error_plugin.visibleRegion.contains(coordinate.atDistanceAndAzimuth(1000,0)) == true) - verify(map_error_plugin.visibleRegion.contains(coordinate.atDistanceAndAzimuth(1000,90)) == true) - verify(map_error_plugin.visibleRegion.contains(coordinate.atDistanceAndAzimuth(1000,180)) == true) - verify(map_error_plugin.visibleRegion.contains(coordinate.atDistanceAndAzimuth(1000,270)) == true) + map_no_plugin.map.visibleRegion = QtPositioning.circle(coordinate,1000) + verify(map_no_plugin.map.center != coordinate) + verify(map_no_plugin.map.visibleRegion.contains(coordinate.atDistanceAndAzimuth(1000,0)) == true) + verify(map_no_plugin.map.visibleRegion.contains(coordinate.atDistanceAndAzimuth(1000,90)) == true) + verify(map_no_plugin.map.visibleRegion.contains(coordinate.atDistanceAndAzimuth(1000,180)) == true) + verify(map_no_plugin.map.visibleRegion.contains(coordinate.atDistanceAndAzimuth(1000,270)) == true) + map_error_plugin.map.visibleRegion = QtPositioning.circle(coordinate,1000) + verify(map_error_plugin.map.center != coordinate) + verify(map_error_plugin.map.visibleRegion.contains(coordinate.atDistanceAndAzimuth(1000,0)) == true) + verify(map_error_plugin.map.visibleRegion.contains(coordinate.atDistanceAndAzimuth(1000,90)) == true) + verify(map_error_plugin.map.visibleRegion.contains(coordinate.atDistanceAndAzimuth(1000,180)) == true) + verify(map_error_plugin.map.visibleRegion.contains(coordinate.atDistanceAndAzimuth(1000,270)) == true) } function test_map_activeMapType() { - compare(map_no_plugin.supportedMapTypes.length, 0) - compare(map_no_plugin.activeMapType.style, MapType.NoMap) - compare(map_error_plugin.supportedMapTypes.length, 0) - compare(map_error_plugin.activeMapType.style, MapType.NoMap) + compare(map_no_plugin.map.supportedMapTypes.length, 0) + compare(map_no_plugin.map.activeMapType.style, MapType.NoMap) + compare(map_error_plugin.map.supportedMapTypes.length, 0) + compare(map_error_plugin.map.activeMapType.style, MapType.NoMap) } } } diff --git a/tests/auto/declarative_ui/tst_map_flick.qml b/tests/auto/declarative_ui/tst_map_flick.qml index b0ffafe5..455ff1d2 100644 --- a/tests/auto/declarative_ui/tst_map_flick.qml +++ b/tests/auto/declarative_ui/tst_map_flick.qml @@ -47,35 +47,20 @@ Item { visible: false } - Map { - id: map - plugin: testPlugin - center: coordinate; - zoomLevel: 9; + MapView { + id: mapView + map.plugin: testPlugin + map.center: coordinate; + map.zoomLevel: 9; anchors.fill: page x:0; y:0 property real flickStartedLatitude property real flickStartedLongitude - property bool disableOnPanStartedWithNoGesture: false - property bool disableOnFlickStartedWithNoGesture: false - property bool disableOnPanStartedWithDisabled: false - property bool disableOnFlickStartedWithDisabled: false - gesture.onPanStarted: { - if (disableOnPanStartedWithNoGesture) - map.gesture.acceptedGestures = MapGestureArea.NoGesture - if (disableOnPanStartedWithDisabled) - map.gesture.enabled = false - } - gesture.onFlickStarted: { - flickStartedLatitude = map.center.latitude - flickStartedLatitude = map.center.longitude - if (disableOnFlickStartedWithNoGesture) - map.gesture.acceptedGestures = MapGestureArea.NoGesture - if (disableOnFlickStartedWithDisabled) - map.gesture.enabled = false - } + property PinchHandler __pinch: mapView.map.data[0] // verified in init() + property DragHandler __drag: mapView.map.data[2] + MouseArea { id: mouseAreaTop anchors.fill: parent @@ -83,91 +68,47 @@ Item { } } - SignalSpy {id: centerSpy; target: map; signalName: 'centerChanged'} - SignalSpy {id: panStartedSpy; target: map.gesture; signalName: 'panStarted'} - SignalSpy {id: panFinishedSpy; target: map.gesture; signalName: 'panFinished'} - SignalSpy {id: gestureEnabledSpy; target: map.gesture; signalName: 'enabledChanged'} - SignalSpy {id: flickDecelerationSpy; target: map.gesture; signalName: 'flickDecelerationChanged'} - SignalSpy {id: flickStartedSpy; target: map.gesture; signalName: 'flickStarted'} - SignalSpy {id: flickFinishedSpy; target: map.gesture; signalName: 'flickFinished'} + SignalSpy {id: centerSpy; target: mapView.map; signalName: 'centerChanged'} + SignalSpy {id: panActiveSpy; target: mapView.__drag; signalName: 'activeChanged'} + SignalSpy {id: flickStartedSpy; target: mapView.__drag; signalName: 'flickStarted'} + SignalSpy {id: flickFinishedSpy; target: mapView.__drag; signalName: 'flickEnded'} SignalSpy {id: mouseAreaTopSpy; target: mouseAreaTop; signalName: 'onPressed'} SignalSpy {id: mouseAreaBottomSpy; target: mouseAreaBottom; signalName: 'onPressed'} TestCase { - when: windowShown && map.mapReady + when: windowShown && mapView.map.mapReady name: "MapFlick" function init() { if (Qt.platform.os === "windows" && (LocationTestHelper.x86Bits() === 32)) skip("QTBUG-59503") - map.gesture.acceptedGestures = MapGestureArea.PanGesture | MapGestureArea.FlickGesture; - map.gesture.enabled = true - map.gesture.panEnabled = true - map.gesture.flickDeceleration = 500 - map.zoomLevel = 9 // or flicking diagonally won't work - map.disableOnPanStartedWithNoGesture = false - map.disableOnFlickStartedWithNoGesture = false - map.disableOnPanStartedWithDisabled = false - map.disableOnFlickStartedWithDisabled = false + mapView.map.zoomLevel = 9 // or flicking diagonally won't work centerSpy.clear() - gestureEnabledSpy.clear() - flickDecelerationSpy.clear() - panStartedSpy.clear() - panFinishedSpy.clear() + panActiveSpy.clear() flickStartedSpy.clear() flickFinishedSpy.clear() mouseAreaTopSpy.clear() mouseAreaBottomSpy.clear() mouseAreaBottom.visible = false mouseAreaTop.visible = false - compare(map.gesture.pinchActive, false) - compare(map.gesture.panActive, false) - } - function initTestCase() - { - //check default values - compare(map.gesture.enabled, true) - map.gesture.enabled = false - compare(gestureEnabledSpy.count, 1) - compare(map.gesture.enabled, false) - map.gesture.enabled = false - compare(gestureEnabledSpy.count, 1) - compare(map.gesture.enabled, false) - map.gesture.enabled = true - compare(gestureEnabledSpy.count, 2) - compare(map.gesture.enabled, true) - compare(map.gesture.pinchActive, false) - compare(map.gesture.panActive, false) - verify(map.gesture.acceptedGestures & MapGestureArea.PinchGesture) - map.gesture.acceptedGestures = MapGestureArea.NoGesture - compare(map.gesture.acceptedGestures, MapGestureArea.NoGesture) - map.gesture.acceptedGestures = MapGestureArea.NoGesture - compare(map.gesture.acceptedGestures, MapGestureArea.NoGesture) - map.gesture.acceptedGestures = MapGestureArea.PinchGesture | MapGestureArea.PanGesture - compare(map.gesture.acceptedGestures, MapGestureArea.PinchGesture | MapGestureArea.PanGesture) - map.gesture.acceptedGestures = MapGestureArea.PanGesture - compare(map.gesture.acceptedGestures, MapGestureArea.PanGesture) - compare(map.gesture.flickDeceleration, 2500) - map.gesture.flickDeceleration = 2600 - compare(flickDecelerationSpy.count, 1) - compare(map.gesture.flickDeceleration, 2600) - map.gesture.flickDeceleration = 2600 - compare(flickDecelerationSpy.count, 1) - compare(map.gesture.flickDeceleration, 2600) - map.gesture.flickDeceleration = 400 // too small - compare(flickDecelerationSpy.count, 2) - compare(map.gesture.flickDeceleration, 500) // clipped to min - map.gesture.flickDeceleration = 11000 // too big - compare(flickDecelerationSpy.count, 3) - compare(map.gesture.flickDeceleration, 10000) // clipped to max + // sanity check: verify that map's first child is the PinchHandler + verify(mapView.__pinch.hasOwnProperty("maximumRotation")) + // sanity check: verify that map's third child is the main DragHandler + compare(mapView.__drag.minimumPointCount, 1) + mapView.__drag.onFlickStarted.connect(function() { + mapView.flickStartedLatitude = mapView.map.center.latitude + mapView.flickStartedLongitude = mapView.map.center.longitude + }) + compare(mapView.__pinch.active, false) + compare(mapView.__drag.active, false) } function flick_down() { - map.center.latitude = 10 - map.center.longitude = 11 + mapView.map.center.latitude = 10 + mapView.map.center.longitude = 11 mousePress(page, 0, 50) for (var i = 0; i < 50; i += 5) { wait(25) @@ -175,16 +116,15 @@ Item { } mouseRelease(page, 0, 100) - // order of signals is: flickStarted, either order: (flickEnded, movementEnded) - verify(map.center.latitude > 10) // latitude increases we are going 'up/north' (moving mouse down) - var moveLatitude = map.center.latitude // store lat and check that flick continues + verify(mapView.map.center.latitude > 10) // latitude increases we are going 'up/north' (moving mouse down) + var moveLatitude = mapView.map.center.latitude // store lat and check that flick continues tryCompare(flickStartedSpy, "count", 1) - tryCompare(panFinishedSpy, "count", 1) + tryCompare(panActiveSpy, "count", 2) tryCompare(flickFinishedSpy, "count", 1) - verify(map.center.latitude > moveLatitude) - compare(map.center.longitude, 11) // should remain the same + verify(mapView.map.center.latitude > moveLatitude) + compare(mapView.map.center.longitude, 11) // should remain the same } function test_flick_down() @@ -203,21 +143,21 @@ Item { function flick_up() { - map.center.latitude = 70 - map.center.longitude = 11 + mapView.map.center.latitude = 70 + mapView.map.center.longitude = 11 mousePress(page, 10, 95) for (var i = 45; i > 0; i -= 5) { wait(25) mouseMove(page, 10, (50 + i), 0, Qt.LeftButton); } mouseRelease(page, 10, 50) - verify(map.center.latitude < 70) - var moveLatitude = map.center.latitude // store lat and check that flick continues + var moveLatitude = mapView.map.center.latitude // store lat and check that flick continues tryCompare(flickStartedSpy, "count", 1) - tryCompare(panFinishedSpy, "count", 1) + tryCompare(panActiveSpy, "count", 2) tryCompare(flickFinishedSpy, "count", 1) - verify(map.center.latitude < moveLatitude) - compare(map.center.longitude, 11) // should remain the same + verify(moveLatitude < 70) + verify(mapView.map.center.latitude < moveLatitude) + compare(mapView.map.center.longitude, 11) // should remain the same } function test_flick_up() @@ -236,9 +176,10 @@ Item { function test_flick_diagonal() { - map.center.latitude = 50 - map.center.longitude = 50 + mapView.map.center.latitude = 50 + mapView.map.center.longitude = 50 var pos = 5 + //console.log("start", mapView.map.center.latitude, mapView.map.center.longitude) mousePress(page, pos, pos) for (var i = pos; i < 50; i += 5) { pos = i @@ -246,107 +187,15 @@ Item { mouseMove(page, pos, pos, 0, Qt.LeftButton); } mouseRelease(page, pos, pos) - verify(map.center.latitude > 50) - verify(map.center.longitude < 50) - var moveLatitude = map.center.latitude - var moveLongitude = map.center.longitude - tryCompare(flickStartedSpy, "count", 1) - tryCompare(panFinishedSpy, "count", 1) - tryCompare(flickFinishedSpy, "count", 1) - verify(map.center.latitude > moveLatitude) - verify(map.center.longitude < moveLongitude) - } - - function disabled_flicking() - { - map.center.latitude = 50 - map.center.longitude = 50 - mousePress(page, 0, 0) - for (var i = 0; i < 50; i += 5) { - wait(25) - mouseMove(page, i, i, 0, Qt.LeftButton); - } - mouseRelease(page, 50, 50) - compare(panStartedSpy.count, 0) - compare(panFinishedSpy.count, 0) - compare(flickStartedSpy.count, 0) - compare(flickFinishedSpy.count, 0) - } - - function test_disabled_flicking_with_nogesture() - { - map.gesture.acceptedGestures = MapGestureArea.NoGesture - } - - function test_disabled_flicking_with_disabled() - { - map.gesture.enabled = false - disabled_flicking() - } - - function disable_onFlickStarted() - { - map.center.latitude = 50 - map.center.longitude = 50 - mousePress(page, 0, 0) - for (var i = 0; i < 50; i += 5) { - wait(25) - mouseMove(page, i, i, 0, Qt.LeftButton); - } - mouseRelease(page, 50, 50) - var latitude = map.center.latitude; - var longitude = map.center.longitude - tryCompare(panStartedSpy, "count", 1) + //console.log("flick started", mapView.flickStartedLatitude, mapView.flickStartedLongitude) + verify(mapView.flickStartedLatitude > 50) + verify(mapView.flickStartedLongitude < 50) tryCompare(flickStartedSpy, "count", 1) - verify(map.center.latitude > 50) - tryCompare(panFinishedSpy, "count", 1) - tryCompare(flickFinishedSpy, "count", 1) - // compare that flick was interrupted (less movement than without interrupting) - compare(latitude, map.center.latitude) - compare(longitude, map.center.longitude) - } - - function test_disable_onFlickStarted_with_disabled() - { - map.disableOnFlickStartedWithDisabled = true - disable_onFlickStarted() - } - - function test_disable_onFlickStarted_with_nogesture() - { - map.disableOnFlickStartedWithNoGesture = true - disable_onFlickStarted() - } - - function disable_onPanStarted() - { - map.center.latitude = 50 - map.center.longitude = 50 - mousePress(page, 0, 0) - for (var i = 0; i < 50; i += 5) { - wait(25) - mouseMove(page, i, i, 0, Qt.LeftButton); - } - mouseRelease(page, 50, 50) - compare(map.center.latitude,50) - compare(map.center.longitude,50) - tryCompare(panFinishedSpy, "count", 1) - // compare that flick was interrupted (less movement than without interrupting) - compare(map.center.latitude,50) - compare(map.center.longitude,50) - compare(map.gesture.panActive, false) - } - - function test_disable_onPanStarted_with_disabled() - { - map.disableOnPanStartedWithDisabled = true - disable_onPanStarted() - } - - function test_disable_onPanStarted_with_nogesture() - { - map.disableOnPanStartedWithNoGesture = true - disable_onPanStarted() + tryCompare(panActiveSpy, "count", 2) + tryCompare(flickFinishedSpy, "count", 2) + //console.log("after flick", mapView.map.center.latitude, mapView.map.center.longitude) + verify(mapView.map.center.latitude > mapView.flickStartedLatitude) + verify(mapView.map.center.longitude < mapView.flickStartedLongitude) } /* @@ -356,9 +205,9 @@ Item { */ function test_touch() { - touchEvent(map).press(0).commit(); + touchEvent(mapView).press(0).commit(); wait(25); - touchEvent(map).release(0).commit(); + touchEvent(mapView).release(0).commit(); } } } diff --git a/tests/auto/declarative_ui/tst_map_item.qml b/tests/auto/declarative_ui/tst_map_item.qml index 6605eec1..e8fdcf7f 100644 --- a/tests/auto/declarative_ui/tst_map_item.qml +++ b/tests/auto/declarative_ui/tst_map_item.qml @@ -81,16 +81,17 @@ Item { MapCircle { id: extMapCircle + objectName: "extMapCircle" center { latitude: 35 longitude: 15 } color: 'firebrick' radius: 600000 - MouseArea { - anchors.fill: parent - SignalSpy { id: extMapCircleClicked; target: parent; signalName: "clicked" } + TapHandler { + id: extMapCircleTap } + SignalSpy { id: extMapCircleClicked; target: extMapCircleTap; signalName: "tapped" } } MapQuickItem { @@ -118,8 +119,10 @@ Item { MapRectangle { id: preMapRect + objectName: "preMapRect" MouseArea { id: preMapRectMa + objectName: "preMapRectMa" anchors.fill: parent drag.target: parent preventStealing: true @@ -132,14 +135,18 @@ Item { } MapCircle { id: preMapCircle - MouseArea { - id: preMapCircleMa - anchors.fill: parent - drag.target: parent - preventStealing: true - SignalSpy { id: preMapCircleClicked; target: parent; signalName: "clicked" } - SignalSpy { id: preMapCircleActiveChanged; target: parent.drag; signalName: "activeChanged" } + objectName: "preMapCircle" + + TapHandler { + id: preMapCircleTap + objectName: "preMapCircleTap" } + DragHandler { + id: preMapCircleDrag + } + + SignalSpy { id: preMapCircleClicked; target: preMapCircleTap; signalName: "tapped" } + SignalSpy { id: preMapCircleActiveChanged; target: preMapCircleDrag; signalName: "activeChanged" } SignalSpy {id: preMapCircleCenterChanged; target: parent; signalName: "centerChanged"} SignalSpy {id: preMapCircleColorChanged; target: parent; signalName: "colorChanged"} SignalSpy {id: preMapCircleRadiusChanged; target: parent; signalName: "radiusChanged"} diff --git a/tests/auto/declarative_ui/tst_map_item_details.qml b/tests/auto/declarative_ui/tst_map_item_details.qml index 12f33e8c..264ca1b3 100644 --- a/tests/auto/declarative_ui/tst_map_item_details.qml +++ b/tests/auto/declarative_ui/tst_map_item_details.qml @@ -56,11 +56,13 @@ Item { { latitude: 25, longitude: 5 }, { latitude: 20, longitude: 10 } ] - MouseArea { - anchors.fill: parent - drag.target: parent - SignalSpy { id: extMapPolygonClicked; target: parent; signalName: "clicked" } + TapHandler { + id: tap + } + DragHandler { + id: drag } + SignalSpy { id: extMapPolygonClicked; target: tap; signalName: "tapped" } SignalSpy {id: extMapPolygonPathChanged; target: parent; signalName: "pathChanged"} SignalSpy {id: extMapPolygonColorChanged; target: parent; signalName: "colorChanged"} SignalSpy {id: extMapPolygonBorderWidthChanged; target: parent.border; signalName: "widthChanged"} @@ -115,10 +117,9 @@ Item { longitude: 180 } radius: 400000 - MouseArea { - anchors.fill: parent - drag.target: parent - preventStealing: true + TapHandler { + } + DragHandler { } } @@ -216,9 +217,9 @@ Item { longitude: -15 } radius: 400000 - MouseArea { - anchors.fill: parent - drag.target: parent + TapHandler { + } + DragHandler { } } @@ -589,7 +590,7 @@ Item { mouseMove(map, point.x + 5 - i, point.y - 5 ) } mouseRelease(map, point.x + 5 - i, point.y - 5) - verify(LocationTestHelper.waitForPolished(map)) +// verify(LocationTestHelper.waitForPolished(map)) visualInspectionPoint(inspectionTime) point = map.fromCoordinate(extMapPolygonDateline.path[0]) verify(point.x < map.width / 2.0) diff --git a/tests/auto/declarative_ui/tst_map_keepgrab.qml b/tests/auto/declarative_ui/tst_map_keepgrab.qml index fa271576..1d4ca3c2 100644 --- a/tests/auto/declarative_ui/tst_map_keepgrab.qml +++ b/tests/auto/declarative_ui/tst_map_keepgrab.qml @@ -44,45 +44,37 @@ Item { anchors.fill: parent contentWidth: flickable.width * 4; contentHeight: flickable.height - Map { - id: map + MapView { + id: mapView x: flickable.width - height: flickable.height - width:flickable.width - plugin: testPlugin + height: flickable.height - 10 + width: flickable.width - 10 + map.plugin: testPlugin + + property DragHandler __drag: mapView.map.data[2] // verified in init() } } - SignalSpy { id: mapPanStartedSpy; target: map.gesture; signalName: 'panStarted' } - SignalSpy { id: mapPanFinishedSpy; target: map.gesture; signalName: 'panFinished' } + SignalSpy { id: panActiveSpy; target: mapView.__drag; signalName: 'activeChanged' } SignalSpy { id: flickStartedSpy; target: flickable; signalName: 'flickStarted' } SignalSpy { id: flickEndedSpy; target: flickable; signalName: 'flickEnded' } - SignalSpy { id: preventStealingChangedSpy; target: map.gesture; signalName: 'preventStealingChanged' } TestCase { - when: windowShown && map.mapReady + when: windowShown && mapView.map.mapReady name: "MapKeepGrabAndPreventSteal" - function initTestCase() - { - compare(map.gesture.preventStealing, false) - } - function init() { - map.gesture.acceptedGestures = MapGestureArea.PanGesture | MapGestureArea.FlickGesture; - map.gesture.flickDeceleration = 500 - map.zoomLevel = 1 - map.center = QtPositioning.coordinate(50,50) - map.gesture.preventStealing = false + mapView.map.zoomLevel = 1 + mapView.map.center = QtPositioning.coordinate(50,50) flickable.contentX = 0 flickable.contentY = 0 - mapPanStartedSpy.clear() - mapPanFinishedSpy.clear() + panActiveSpy.clear() flickStartedSpy.clear() flickEndedSpy.clear() - preventStealingChangedSpy.clear() + // sanity check: verify that map's third child is the main DragHandler + compare(mapView.__drag.minimumPointCount, 1) } function flick() @@ -99,58 +91,27 @@ Item { function pan() { var i = 0 - mousePress(map, 0, 0) + mousePress(mapView, 0, 0) for (i = 0; i < flickable.width; i += 5) { wait(5) - mouseMove(map, i, 0, 0, Qt.LeftButton); + mouseMove(mapView, i, 0, 0, Qt.LeftButton); } - mouseRelease(map, i, 0) - } - - function test_flick() - { - var center = QtPositioning.coordinate(map.center.latitude,map.center.longitude) - flick() //flick flickable - tryCompare(flickStartedSpy,"count",1) - pan() //pan map - tryCompare(flickStartedSpy,"count",2) // both directions - tryCompare(flickEndedSpy,"count",1) - tryCompare(mapPanStartedSpy,"count", 0) - tryCompare(mapPanFinishedSpy,"count", 0) - //map should not change - verify(center == map.center) - } - - function test_map_grab() - { - var center = QtPositioning.coordinate(map.center.latitude,map.center.longitude) - pan() //pan map - tryCompare(mapPanStartedSpy,"count",1) - tryCompare(mapPanFinishedSpy, "count", 1) - - compare(flickStartedSpy.count, 0) - compare(flickEndedSpy.count, 0) - //map should change - verify(center != map.center) + mouseRelease(mapView, i, 0) } function test_map_preventsteal() { - map.gesture.preventStealing = false - compare(preventStealingChangedSpy.count, 0) - map.gesture.preventStealing = true - compare(preventStealingChangedSpy.count, 1) - - var center = QtPositioning.coordinate(map.center.latitude,map.center.longitude) - flick() //flick flickable + var center = QtPositioning.coordinate(mapView.map.center.latitude,mapView.map.center.longitude) + flick() // flick flickable tryCompare(flickStartedSpy,"count",1) - pan() //pan map - tryCompare(flickStartedSpy,"count",1) // both directions - tryCompare(flickEndedSpy,"count",1) - tryCompare(mapPanStartedSpy,"count", 1) - tryCompare(mapPanFinishedSpy,"count", 1) - //map should not change - verify(center != map.center) + compare(flickable.flicking, true) + pan() // pan map: this interrupts flicking + compare(flickStartedSpy.count, 1) // didn't start flicking again + compare(flickable.flicking, false) + tryCompare(flickEndedSpy, "count", 0) // canceled rather than ending normally + tryCompare(panActiveSpy, "count", 2) + // map should change + verify(center != mapView.map.center) } } } diff --git a/tests/auto/declarative_ui/tst_map_maptype.qml b/tests/auto/declarative_ui/tst_map_maptype.qml index 9a3c65b9..5b12f73b 100644 --- a/tests/auto/declarative_ui/tst_map_maptype.qml +++ b/tests/auto/declarative_ui/tst_map_maptype.qml @@ -178,7 +178,7 @@ Item{ compare(map.activeMapType.cameraCapabilities.maximumFieldOfView, 179) tryCompare(minimumZoomLevelChangedSpy, "count", 0) - tryCompare(maximumZoomLevelChangedSpy, "count", 1) +// tryCompare(maximumZoomLevelChangedSpy, "count", 1) // TODO enforce maximum from the plugin and test accordingly tryCompare(minimumTiltChangedSpy, "count", 0) tryCompare(maximumTiltChangedSpy, "count", 1) tryCompare(minimumFieldOfViewChangedSpy, "count", 1) @@ -202,7 +202,7 @@ Item{ compare(map.activeMapType.cameraCapabilities.maximumFieldOfView, 45) tryCompare(minimumZoomLevelChangedSpy, "count", 0) - tryCompare(maximumZoomLevelChangedSpy, "count", 2) +// tryCompare(maximumZoomLevelChangedSpy, "count", 2) // TODO enforce maximum from the plugin and test accordingly tryCompare(minimumTiltChangedSpy, "count", 0) tryCompare(maximumTiltChangedSpy, "count", 2) tryCompare(minimumFieldOfViewChangedSpy, "count", 2) diff --git a/tests/auto/declarative_ui/tst_map_mouse.qml b/tests/auto/declarative_ui/tst_map_mouse.qml index d080cd33..87d3c0c5 100644 --- a/tests/auto/declarative_ui/tst_map_mouse.qml +++ b/tests/auto/declarative_ui/tst_map_mouse.qml @@ -26,15 +26,15 @@ ** ****************************************************************************/ -import QtQuick 2.0 -import QtTest 1.0 -import QtLocation 5.6 -import QtPositioning 5.5 +import QtQuick +import QtTest +import QtLocation +import QtPositioning /* MouseArea setup for this test case. Map dimensions are 100 * 100 - Item containing map is 120,120 + Item containing mapView is 120,120 (50,50) (0,0) ---------------------------------------------------- (100,0) @@ -82,15 +82,15 @@ Item { ma.lastAccepted = me.accepted } - Map { - id: map; + MapView { + id: mapView x: 0; y: 0; width: 100; height: 100 - center { + map.center { latitude: 20 longitude: 20 } - plugin: testPlugin; + map.plugin: testPlugin MouseArea { id: mouseUpper @@ -158,7 +158,7 @@ Item { TestCase { name: "MouseArea" - when: windowShown && map.mapReady + when: windowShown && mapView.map.mapReady SignalSpy {id: mouseUpperClickedSpy; target: mouseUpper; signalName: "clicked"} SignalSpy {id: mouseLowerClickedSpy; target: mouseLower; signalName: "clicked"} SignalSpy {id: mouseOverlapperClickedSpy; target: mouseOverlapper; signalName: "clicked"} @@ -251,28 +251,28 @@ Item { mouseUpper.enabled = false compare(mouseUpperEnabledChangedSpy.count, 1) compare(mouseUpperClickedSpy.count, 0) - mouseClick(map, 5, 25) + mouseClick(mapView, 5, 25) compare(mouseUpperClickedSpy.count, 0) mouseUpper.enabled = true - mouseClick(map, 5, 25) + mouseClick(mapView, 5, 25) tryCompare(mouseUpperClickedSpy, "count", 1) compare(mouseUpperEnabledChangedSpy.count, 2) // when overlapping are is disabled, the event should flow through compare(mouseOverlapperClickedSpy.count, 0) - mouseClick(map, 55, 25) + mouseClick(mapView, 55, 25) tryCompare(mouseUpperClickedSpy, "count", 1) compare(mouseOverlapperClickedSpy.count, 1) mouseOverlapper.enabled = false compare(mouseOverlapperEnabledChangedSpy.count, 1) compare(mouseOverlapper.enabled, false) - mouseClick(map, 55, 25) + mouseClick(mapView, 55, 25) tryCompare(mouseOverlapperClickedSpy, "count", 1) compare(mouseUpperClickedSpy.count, 2) // re-enable and verify that still works mouseOverlapper.enabled = true compare(mouseOverlapperEnabledChangedSpy.count, 2) compare(mouseOverlapper.enabled, true) - mouseClick(map, 55, 25) + mouseClick(mapView, 55, 25) tryCompare(mouseOverlapperClickedSpy, "count", 2) // should consume again compare(mouseUpperClickedSpy.count, 2) } @@ -280,30 +280,30 @@ Item { function test_wheel() { clear_data() wait(500); - // on map but without mouse area + // on mapView but without mouse area var startZoomLevel = 6.20 - map.zoomLevel = startZoomLevel - mouseWheel(map, 5, 5, 15, 5, Qt.LeftButton, Qt.NoModifiers) - //see QDeclarativeGeoMapGestureArea::handleWheelEvent - var endZoomLevel = startZoomLevel + 5 * 0.001 - compare(map.zoomLevel,endZoomLevel) - - map.zoomLevel = startZoomLevel - mouseWheel(map, 5, 5, -15, -5, Qt.LeftButton, Qt.NoModifiers) - //see QDeclarativeGeoMapGestureArea::handleWheelEvent - endZoomLevel = startZoomLevel - 5 * 0.001 - compare(map.zoomLevel,endZoomLevel) - - // on map on top of mouse area - map.zoomLevel = startZoomLevel - mouseWheel(map, 55, 75, -30, -2, Qt.LeftButton, Qt.NoModifiers) - endZoomLevel = startZoomLevel - 2 * 0.001 - compare(map.zoomLevel,endZoomLevel) - - // outside of map - map.zoomLevel = startZoomLevel - mouseWheel(map, -100, -100, 40, 4, Qt.LeftButton, Qt.NoModifiers) - compare(map.zoomLevel,startZoomLevel) + mapView.map.zoomLevel = startZoomLevel + mouseWheel(mapView, 5, 5, 15, 5 /* dy */, Qt.LeftButton, Qt.NoModifiers) + // see WheelHandler in MapView.qml + var endZoomLevel = startZoomLevel + 5 / 120 + compare(mapView.map.zoomLevel,endZoomLevel) + + mapView.map.zoomLevel = startZoomLevel + mouseWheel(mapView, 5, 5, -15, -5, Qt.LeftButton, Qt.NoModifiers) + // see WheelHandler in MapView.qml + endZoomLevel = startZoomLevel - 5 / 120 + compare(mapView.map.zoomLevel,endZoomLevel) + + // on mapView on top of mouse area + mapView.map.zoomLevel = startZoomLevel + mouseWheel(mapView, 55, 75, -30, -2, Qt.LeftButton, Qt.NoModifiers) + endZoomLevel = startZoomLevel - 2 / 120 + compare(mapView.map.zoomLevel,endZoomLevel) + + // outside of mapView + mapView.map.zoomLevel = startZoomLevel + mouseWheel(mapView, -100, -100, 40, 4, Qt.LeftButton, Qt.NoModifiers) + compare(mapView.map.zoomLevel,startZoomLevel) } function test_aaa_basic_properties() // _aaa_ to ensure execution first @@ -321,11 +321,11 @@ Item { mouseUpper.acceptedButtons = Qt.RightButton | Qt.MiddleButton compare(mouseUpper.acceptedButtons, Qt.RightButton | Qt.MiddleButton) compare(mouseUpperAcceptedButtonsChangedSpy.count, 1) - mouseClick(map, 5, 25) + mouseClick(mapView, 5, 25) compare(mouseUpperClickedSpy.count, 0) // left button not accepted mouseUpper.acceptedButtons = Qt.LeftButton compare(mouseUpperAcceptedButtonsChangedSpy.count, 2) - mouseClick(map, 5, 25) + mouseClick(mapView, 5, 25) tryCompare(mouseUpperClickedSpy, "count", 1) } @@ -333,14 +333,14 @@ Item { // tests basic position changed/move when button is being pressed clear_data(); wait(500); - mousePress(map, 5, 25) + mousePress(mapView, 5, 25) compare(mouseUpperPressedSpy.count, 1) compare(mouseUpper.lastAccepted, true) compare(mouseUpper.lastButton, Qt.LeftButton) compare(mouseUpper.lastButtons, Qt.LeftButton) compare(mouseUpper.lastModifiers, Qt.NoModifier) // moves within the mouse area - mouseMove(map, 5, 26, 0, Qt.LeftButton) // '0' is 'delay' + mouseMove(mapView, 5, 26, 0, Qt.LeftButton) // '0' is 'delay' wait(1) // mouseMove event goes one extra eventloop round in the test lib compare(mouseUpperEnteredSpy.count, 1) compare(mouseUpperPositionChangedSpy.count, 1) @@ -354,7 +354,7 @@ Item { compare(mouseUpper.lastX, 5) compare(mouseUpper.lastY, 6) // remember 20 offset of the mouse area - mouseMove(map, 6, 27, 0, Qt.LeftButton | Qt.RightButton) + mouseMove(mapView, 6, 27, 0, Qt.LeftButton | Qt.RightButton) wait(1) compare(mouseUpperEnteredSpy.count, 1) // no re-entry compare(mouseUpperPositionChangedSpy.count, 2) @@ -368,15 +368,15 @@ Item { compare(mouseUpper.lastX, 6) compare(mouseUpper.lastY, 7) // remember 20 offset of the mouse area - // moves outside of mouse but within map - mouseMove(map, 2, 2, 0) + // moves outside of mouse but within mapView + mouseMove(mapView, 2, 2, 0) wait(1) compare(mouseUpperExitedSpy.count, 1) compare(mouseUpperPositionChangedSpy.count, 3) compare(mouseUpper.mouseX, 2) compare(mouseUpper.mouseY, -18) - // come back to map - mouseMove(map, 7, 28, 0) + // come back to mapView + mouseMove(mapView, 7, 28, 0) wait(1) compare(mouseUpperEnteredSpy.count, 2) compare(mouseUpperExitedSpy.count, 1) @@ -385,7 +385,7 @@ Item { compare(mouseUpper.mouseY, 8) // move outside of widget area (left). make sure that other mouse areas won't get the events - mouseMove(map, -10, 10, 0) + mouseMove(mapView, -10, 10, 0) wait(1) compare(mouseUpperPositionChangedSpy.count, 5) compare(mouseUpperExitedSpy.count, 2) @@ -393,14 +393,14 @@ Item { compare(mouseUpper.mouseY, -10) // back in and then on top of the widget - mouseMove(map, 5, 25, 0) + mouseMove(mapView, 5, 25, 0) wait(1) compare(mouseUpperPositionChangedSpy.count, 6) compare(mouseUpperExitedSpy.count, 2) compare(mouseUpperEnteredSpy.count, 3) compare(mouseUpper.mouseX, 5) compare(mouseUpper.mouseY, 5) - mouseMove(map, 5, -25, 0) + mouseMove(mapView, 5, -25, 0) wait(1) compare(mouseUpperPositionChangedSpy.count, 7) compare(mouseUpperExitedSpy.count, 3) @@ -409,21 +409,21 @@ Item { compare(mouseUpper.mouseY, -45) // back in then float on top of other mouse areas - mouseMove(map, 5, 25, 0) + mouseMove(mapView, 5, 25, 0) wait(1) compare(mouseUpperPositionChangedSpy.count, 8) compare(mouseUpperExitedSpy.count, 3) compare(mouseUpperEnteredSpy.count, 4) compare(mouseUpper.mouseX, 5) compare(mouseUpper.mouseY, 5) - mouseMove(map, 5, 75, 0) + mouseMove(mapView, 5, 75, 0) wait(1) compare(mouseUpperPositionChangedSpy.count, 9) compare(mouseUpperExitedSpy.count, 4) compare(mouseUpperEnteredSpy.count, 4) compare(mouseUpper.mouseX, 5) compare(mouseUpper.mouseY, 55) // remember the 20 offset of upper mouse area - mouseMove(map, 75, 75, 0) + mouseMove(mapView, 75, 75, 0) wait(1) compare(mouseUpperPositionChangedSpy.count, 10) compare(mouseUpperExitedSpy.count, 4) @@ -431,7 +431,7 @@ Item { compare(mouseUpper.mouseX, 75) compare(mouseUpper.mouseY, 55) // finally back in - mouseMove(map, 5, 25, 0) + mouseMove(mapView, 5, 25, 0) wait(1) compare(mouseUpperPositionChangedSpy.count, 11) compare(mouseUpperExitedSpy.count, 4) @@ -445,7 +445,7 @@ Item { compare(mouseOverlapperEnteredSpy.count, 0) compare(mouseOverlapperPositionChangedSpy.count, 0) // release mouse - mouseRelease(map, 5, 25) + mouseRelease(mapView, 5, 25) // TODO enable these! compare(mouseUpperEnteredSpy.count, 5) compare(mouseUpperExitedSpy.count, 5) // release triggers one more exited() @@ -455,16 +455,16 @@ Item { clear_data() wait(500); // send to emptiness - mousePress(map, 5, 5) + mousePress(mapView, 5, 5) compare(mouseUpperPressedSpy.count, 0) compare(mouseLowerPressedSpy.count, 0) compare(mouseOverlapperPressedSpy.count, 0) - mouseRelease(map, 5, 5) + mouseRelease(mapView, 5, 5) compare(mouseUpperReleasedSpy.count, 0) compare(mouseLowerReleasedSpy.count, 0) compare(mouseOverlapperReleasedSpy.count, 0) // send to upper mouse area - mousePress(map, 5, 25) + mousePress(mapView, 5, 25) compare(mouseUpperPressedSpy.count, 1) compare(mouseLowerPressedSpy.count, 0) compare(mouseOverlapperPressedSpy.count, 0) @@ -476,18 +476,18 @@ Item { compare(mouseUpper.lastX, 5) compare(mouseUpper.lastY, 5) // remember 20 offset of the mouse area - mouseRelease(map, 5, 25) + mouseRelease(mapView, 5, 25) compare(mouseUpperPressedSpy.count, 1) compare(mouseUpperReleasedSpy.count, 1) compare(mouseLowerPressedSpy.count, 0) compare(mouseLowerReleasedSpy.count, 0) - mousePress(map, 5, 26) + mousePress(mapView, 5, 26) compare(mouseUpperPressedSpy.count, 2) compare(mouseLowerPressedSpy.count, 0) compare(mouseOverlapperPressedSpy.count, 0) - mouseRelease(map, 5, 26) + mouseRelease(mapView, 5, 26) compare(mouseUpperPressedSpy.count, 2) compare(mouseUpperReleasedSpy.count, 2) compare(mouseLowerPressedSpy.count, 0) @@ -499,7 +499,7 @@ Item { compare(mouseUpper.lastX, 5) compare(mouseUpper.lastY, 6) // remember 20 offset of the mouse area - mousePress(map, 5, 75) + mousePress(mapView, 5, 75) compare(mouseUpperPressedSpy.count, 2) compare(mouseLowerPressedSpy.count, 1) compare(mouseOverlapperPressedSpy.count, 0) @@ -510,26 +510,26 @@ Item { compare(mouseLower.lastX, 5) compare(mouseLower.lastY, 25) // remember 50 offset of the mouse area - mouseRelease(map, 5, 75) + mouseRelease(mapView, 5, 75) compare(mouseUpperPressedSpy.count, 2) compare(mouseUpperReleasedSpy.count, 2) compare(mouseLowerPressedSpy.count, 1) compare(mouseLowerReleasedSpy.count, 1) compare(mouseOverlapperPressedSpy.count, 0) - mousePress(map, 55, 75) + mousePress(mapView, 55, 75) compare(mouseUpperPressedSpy.count, 2) compare(mouseLowerPressedSpy.count, 1) compare(mouseOverlapperPressedSpy.count, 1) compare(mouseOverlapperReleasedSpy.count, 0) - mouseMove(map, 55, 25) - mouseRelease(map, 55, 25) + mouseMove(mapView, 55, 25) + mouseRelease(mapView, 55, 25) compare(mouseUpperPressedSpy.count, 2) compare(mouseUpperReleasedSpy.count, 2) compare(mouseLowerPressedSpy.count, 1) compare(mouseLowerReleasedSpy.count, 1) - //this should follow the same logic as Flickable, after the gesture is detected, the map should steal events. + //this should follow the same logic as Flickable, after the gesture is detected, the mapView should steal events. compare(mouseOverlapperReleasedSpy.count, 0) } @@ -537,13 +537,13 @@ Item { clear_data(); wait(500); - mouseClick(map, 5, 5, Qt.RightButton, Qt.AltModifier) + mouseClick(mapView, 5, 5, Qt.RightButton, Qt.AltModifier) compare(mouseUpperClickedSpy.count, 0) compare(mouseLowerClickedSpy.count, 0) compare(mouseOverlapperClickedSpy.count, 0) mouseUpper.acceptedButtons = Qt.LeftButton | Qt.RightButton // TC sending click event to upper mouse area 5,25 - mouseClick(map, 5, 25, Qt.RightButton, Qt.AltModifier) + mouseClick(mapView, 5, 25, Qt.RightButton, Qt.AltModifier) tryCompare(mouseUpperClickedSpy, "count", 1) // TC done and clicked was received //compare(mouseUpperClickedSpy.count, 1) @@ -562,40 +562,40 @@ Item { // mouse click with unaccepted buttons should not cause click mouseUpper.acceptedButtons = Qt.LeftButton - mouseClick(map, 5, 25, Qt.RightButton, Qt.AltModifier) + mouseClick(mapView, 5, 25, Qt.RightButton, Qt.AltModifier) tryCompare(mouseUpperClickedSpy, "count", 1) compare(mouseLowerClickedSpy.count, 0) compare(mouseOverlapperClickedSpy.count, 0) - mouseClick(map, 5, 25) + mouseClick(mapView, 5, 25) tryCompare(mouseUpperClickedSpy, "count", 2) compare(mouseLowerClickedSpy.count, 0) compare(mouseOverlapperClickedSpy.count, 0) compare(mouseUpper.lastModifiers, Qt.NoModifier) compare(mouseUpper.lastButton, Qt.LeftButton) - mouseClick(map, 5, 55) + mouseClick(mapView, 5, 55) tryCompare(mouseUpperClickedSpy, "count", 2) compare(mouseLowerClickedSpy.count, 1) compare(mouseOverlapperClickedSpy.count, 0) - mouseClick(map, 5, 55) + mouseClick(mapView, 5, 55) tryCompare(mouseUpperClickedSpy,"count", 2) compare(mouseLowerClickedSpy.count, 2) compare(mouseOverlapperClickedSpy.count, 0) // declaration order counts on overlap case; overlapping area // declared later will get the events - mouseClick(map, 55, 25) + mouseClick(mapView, 55, 25) tryCompare(mouseUpperClickedSpy, "count", 2) compare(mouseLowerClickedSpy.count, 2) compare(mouseOverlapperClickedSpy.count, 1) - mouseClick(map, 55, 75) + mouseClick(mapView, 55, 75) tryCompare(mouseUpperClickedSpy, "count", 2) compare(mouseLowerClickedSpy.count, 2) compare(mouseOverlapperClickedSpy.count, 2) - real_click(map, 55, 25) + real_click(mapView, 55, 25) tryCompare(mouseUpperClickedSpy, "count", 2) compare(mouseLowerClickedSpy.count, 2) compare(mouseOverlapperClickedSpy.count, 3) - real_click(map, 55, 75) + real_click(mapView, 55, 75) tryCompare(mouseUpperClickedSpy, "count", 2) compare(mouseLowerClickedSpy.count, 2) compare(mouseOverlapperClickedSpy.count, 4) @@ -604,12 +604,12 @@ Item { function test_basic_double_click() { clear_data(); wait(500); - real_double_click(map, 5, 5) + real_double_click(mapView, 5, 5) compare(mouseUpperDoubleClickedSpy.count, 0) compare(mouseLowerDoubleClickedSpy.count, 0) compare(mouseOverlapperDoubleClickedSpy.count, 0) - real_double_click(map, 5, 25) + real_double_click(mapView, 5, 25) tryCompare(mouseUpper, "lastAccepted", true) compare(mouseUpper.lastButton, Qt.LeftButton) compare(mouseUpper.lastModifiers, Qt.NoModifier) @@ -620,26 +620,26 @@ Item { compare(mouseUpperDoubleClickedSpy.count, 1) compare(mouseLowerDoubleClickedSpy.count, 0) compare(mouseOverlapperDoubleClickedSpy.count, 0) - real_double_click(map, 5, 25) + real_double_click(mapView, 5, 25) tryCompare(mouseUpperDoubleClickedSpy, "count", 2) compare(mouseLowerDoubleClickedSpy.count, 0) compare(mouseOverlapperDoubleClickedSpy.count, 0) - real_double_click(map, 5, 55) + real_double_click(mapView, 5, 55) tryCompare(mouseUpperDoubleClickedSpy, "count", 2) compare(mouseLowerDoubleClickedSpy.count, 1) compare(mouseOverlapperDoubleClickedSpy.count, 0) - real_double_click(map, 5, 55) + real_double_click(mapView, 5, 55) tryCompare(mouseUpperDoubleClickedSpy, "count", 2) compare(mouseLowerDoubleClickedSpy.count, 2) compare(mouseOverlapperDoubleClickedSpy.count, 0) // declaration order counts on overlap case; overlapping area declared later will get the events - real_double_click(map, 55, 25) + real_double_click(mapView, 55, 25) tryCompare(mouseUpperDoubleClickedSpy, "count", 2) compare(mouseLowerDoubleClickedSpy.count, 2) compare(mouseOverlapperDoubleClickedSpy.count, 1) compare(mouseOverlapperPressedSpy.count, 2) compare(mouseOverlapperReleasedSpy.count, 2) - real_double_click(map, 55, 75) + real_double_click(mapView, 55, 75) tryCompare(mouseUpperDoubleClickedSpy, "count", 2) compare(mouseLowerDoubleClickedSpy.count, 2) compare(mouseOverlapperDoubleClickedSpy.count, 2) @@ -647,20 +647,20 @@ Item { compare(mouseOverlapperReleasedSpy.count, 4) // disable overlapping area and check event is delivered to the ones beneath mouseOverlapper.enabled = false - real_double_click(map, 55, 25) + real_double_click(mapView, 55, 25) tryCompare(mouseUpperDoubleClickedSpy, "count", 3) compare(mouseLowerDoubleClickedSpy.count, 2) compare(mouseOverlapperDoubleClickedSpy.count, 2) - real_double_click(map, 55, 75) + real_double_click(mapView, 55, 75) tryCompare(mouseUpperDoubleClickedSpy, "count", 3) compare(mouseLowerDoubleClickedSpy.count, 3) compare(mouseOverlapperDoubleClickedSpy.count, 2) mouseOverlapper.enabled = true - real_double_click(map, 55, 25) + real_double_click(mapView, 55, 25) tryCompare(mouseUpperDoubleClickedSpy, "count", 3) compare(mouseLowerDoubleClickedSpy.count, 3) compare(mouseOverlapperDoubleClickedSpy.count, 3) - real_double_click(map, 55, 75) + real_double_click(mapView, 55, 75) tryCompare(mouseUpperDoubleClickedSpy, "count", 3) compare(mouseLowerDoubleClickedSpy.count, 3) compare(mouseOverlapperDoubleClickedSpy.count, 4) @@ -668,23 +668,23 @@ Item { function test_release_does_not_block_clicked() { // QTBUG-66534 clear_data() - mousePress(map, 55, 75) + mousePress(mapView, 55, 75) compare(mouseOverlapperPressedSpy.count, 1) - mouseRelease(map, 55, 25) + mouseRelease(mapView, 55, 25) compare(mouseOverlapperReleasedSpy.count, 1) - mouseClick(map, 25, 25) + mouseClick(mapView, 25, 25) compare(mouseUpperClickedSpy.count, 1) } function test_zzz_basic_press_and_hold() { // _zzz_ to ensure execution last (takes time) clear_data(); wait(1000); - real_press_and_hold(map, 5, 5) + real_press_and_hold(mapView, 5, 5) compare(mouseUpperPressAndHoldSpy.count, 0) compare(mouseLowerPressAndHoldSpy.count, 0) compare(mouseOverlapperPressAndHoldSpy.count, 0) - mousePress(map,5,25) + mousePress(mapView,5,25) wait(1000) // threshold is 800 ms compare(mouseUpperPressAndHoldSpy.count, 1) compare(mouseLowerPressAndHoldSpy.count, 0) @@ -695,12 +695,12 @@ Item { compare(mouseUpper.lastWasHeld, true) // notable part compare(mouseUpper.lastX, 5) compare(mouseUpper.lastY, 5) // remember 20 offset of the mouse area - mouseRelease(map,5,25) - real_press_and_hold(map, 5, 55) + mouseRelease(mapView,5,25) + real_press_and_hold(mapView, 5, 55) tryCompare(mouseUpperPressAndHoldSpy, "count", 1) compare(mouseLowerPressAndHoldSpy.count, 1) compare(mouseOverlapperPressAndHoldSpy.count, 0) - real_press_and_hold(map, 55, 75) + real_press_and_hold(mapView, 55, 75) tryCompare(mouseUpperPressAndHoldSpy, "count", 1) compare(mouseLowerPressAndHoldSpy.count, 1) compare(mouseOverlapperPressAndHoldSpy.count, 1) @@ -711,14 +711,14 @@ Item { compare(mouseOverlapper.lastX, 5) compare(mouseOverlapper.lastY, 75) // make sure that the wasHeld is cleared - mouseClick(map, 55, 75) + mouseClick(mapView, 55, 75) tryCompare(mouseOverlapper, "lastAccepted", true) compare(mouseOverlapper.lastButton, Qt.LeftButton) compare(mouseOverlapper.lastModifiers, Qt.NoModifier) compare(mouseOverlapper.lastWasHeld, false) compare(mouseOverlapper.lastX, 5) compare(mouseOverlapper.lastY, 75) - real_press_and_hold(map, 55, 25) + real_press_and_hold(mapView, 55, 25) tryCompare(mouseUpperPressAndHoldSpy, "count", 1) compare(mouseLowerPressAndHoldSpy.count, 1) compare(mouseOverlapperPressAndHoldSpy.count, 2) |