diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-02-12 16:46:14 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-12 16:46:14 +0100 |
commit | 4c0599e2537a439f59ee91e1561c1c3ecf0b34e0 (patch) | |
tree | 93256959b9b9a1b57cd4908a6ebb421ef6afd3b2 | |
parent | 77d1b56b136595b898432ec4de982e3eaa9533f3 (diff) | |
parent | c0a9f3da16960fa6ab4d240aa7fbe72b74a841ba (diff) | |
download | qtlocation-4c0599e2537a439f59ee91e1561c1c3ecf0b34e0.tar.gz |
Merge "Merge remote-tracking branch 'origin/stable' into dev" into refs/staging/dev
13 files changed, 159 insertions, 48 deletions
@@ -43,11 +43,11 @@ qrc_*.cpp doc/src/snippets/cpp/cppsnippet doc/src/snippets/places/placescppsnippet -examples/declarative/places_list/places_list -examples/declarative/flickr/qml_position_flickr -examples/declarative/places_map/places_map -examples/logfilepositionsource/logfilepositionsource -examples/weatherinfo/weatherinfo +examples/location/places_list/places_list +examples/positioning/flickr/qml_position_flickr +examples/location/places_map/places_map +examples/positioning/logfilepositionsource/logfilepositionsource +examples/positioning/weatherinfo/weatherinfo config.tests/geoclue/geoclue config.tests/gypsy/gypsy diff --git a/dist/changes-5.2.1 b/dist/changes-5.2.1 index a3e7058c..37a1f553 100644 --- a/dist/changes-5.2.1 +++ b/dist/changes-5.2.1 @@ -4,7 +4,10 @@ compatibility (source and binary) with Qt 5.2.0. For more details, refer to the online documentation included in this distribution. The documentation is also available online: - http://qt-project.org/doc/qt-5.2/ + http://qt-project.org/doc/qt-5.2 + +The Qt version 5.2 series is binary compatible with the 5.1.x series. +Applications compiled for 5.1 will continue to run with 5.2. Some of the changes listed in this file include issue tracking numbers corresponding to tasks in the Qt Bug Tracker: @@ -14,7 +17,6 @@ corresponding to tasks in the Qt Bug Tracker: Each of these identifiers can be entered in the bug tracker to obtain more information about a particular change. - **************************************************************************** * General * **************************************************************************** @@ -22,44 +24,28 @@ information about a particular change. General Improvements -------------------- - - [QTBUG-34910] - * Fix too long weather status string in weatherinfo example (UI change). - - - [QTBUG-36187] - * Byte order marker removed from positionpoll plugin which caused compile - errors on some older compilers. - - - Fix make install rules for all examples. - + - [QTBUG-34910] Fixed too long weather status string in weatherinfo + example (UI change). + - [QTBUG-36187] Byte order marker removed from positionpoll plugin + which caused compile errors on some older compilers. + - Fixed make install rules for all examples. - declarative_core unit test was fixed and re-enabled. -Third party components ----------------------- - -**************************************************************************** -* Important Behavior Changes * -**************************************************************************** - **************************************************************************** * Library * **************************************************************************** QtPositioning ------- +------------- - - [QTBUG-33220] - * Removes QtQml dependency from QtPositioning. - -**************************************************************************** -* Platform Specific Changes * -**************************************************************************** + - [QTBUG-33220] Removed QtQml dependency from QtPositioning. **************************************************************************** * Plugin Specific Changes * **************************************************************************** GeoClue ------- +------- - Delay satellite provider until requested. - Sets the default preferred positioning method to AllPositioningMethods. diff --git a/src/imports/location/qdeclarativegeomapitemview.cpp b/src/imports/location/qdeclarativegeomapitemview.cpp index b737f9da..ccfc4537 100644 --- a/src/imports/location/qdeclarativegeomapitemview.cpp +++ b/src/imports/location/qdeclarativegeomapitemview.cpp @@ -323,6 +323,7 @@ QDeclarativeGeoMapItemBase *QDeclarativeGeoMapItemView::createItemFromItemModel( modelMetaObject->setValue(iterator.value(), modelData); } itemContext->setContextProperty(QLatin1String("model"), model); + itemContext->setContextProperty(QLatin1String("index"), modelRow); QObject *obj = delegate_->create(itemContext); diff --git a/src/imports/positioning/qdeclarativegeoshape.cpp b/src/imports/positioning/qdeclarativegeoshape.cpp index 4c4d32cc..dbde1c09 100644 --- a/src/imports/positioning/qdeclarativegeoshape.cpp +++ b/src/imports/positioning/qdeclarativegeoshape.cpp @@ -64,7 +64,7 @@ QT_BEGIN_NAMESPACE The \l isEmpty attribute can be used to test if the geoshape represents a region with a geomatrical area of 0. - The \l contains() method can be used to test if a \l {coordinate} is + The \l {contains}{contains()} method can be used to test if a \l {coordinate} is within the geoshape. \section2 Example Usage diff --git a/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp b/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp index 8401f187..259dde6d 100644 --- a/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp +++ b/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster.cpp @@ -90,14 +90,15 @@ static void velocity_changed (GeoclueVelocity *velocity, gpointer userdata) // Ptr to this { Q_UNUSED(velocity) - Q_UNUSED(timestamp) - Q_UNUSED(direction) - Q_UNUSED(climb) - if (!(fields & GEOCLUE_VELOCITY_FIELDS_SPEED)) { - static_cast<QGeoPositionInfoSourceGeoclueMaster *>(userdata)->velocityUpdateFailed(); + + QGeoPositionInfoSourceGeoclueMaster *master = + static_cast<QGeoPositionInfoSourceGeoclueMaster *>(userdata); + + if (fields == GEOCLUE_VELOCITY_FIELDS_NONE) { + master->velocityUpdateFailed(); return; } - static_cast<QGeoPositionInfoSourceGeoclueMaster *>(userdata)->velocityUpdateSucceeded(speed); + master->velocityUpdateSucceeded(fields, timestamp, speed, direction, climb); } // Callback for single async update @@ -117,10 +118,16 @@ static void position_callback (GeocluePosition *pos, GeocluePositionFields field } } +static double knotsToMetersPerSecond(double knots) +{ + return knots * 1852.0 / 3600.0; +} + QGeoPositionInfoSourceGeoclueMaster::QGeoPositionInfoSourceGeoclueMaster(QObject *parent) : QGeoPositionInfoSource(parent), QGeoclueMaster(this), m_updateInterval(0), m_pos(0), m_vel(0), - m_lastPositionIsFresh(false), m_lastVelocityIsFresh(false), m_lastVelocity(0), - m_lastPositionFromSatellite(false), m_methods(AllPositioningMethods), m_running(false) + m_lastPositionIsFresh(false), m_lastVelocityIsFresh(false), m_lastVelocity(qQNaN()), + m_lastDirection(qQNaN()), m_lastClimb(qQNaN()), m_lastPositionFromSatellite(false), + m_methods(AllPositioningMethods), m_running(false) { #ifndef QT_NO_DATASTREAM // Load the last known location @@ -169,13 +176,31 @@ void QGeoPositionInfoSourceGeoclueMaster::velocityUpdateFailed() m_lastVelocityIsFresh = false; } -void QGeoPositionInfoSourceGeoclueMaster::velocityUpdateSucceeded(double speed) +void QGeoPositionInfoSourceGeoclueMaster::velocityUpdateSucceeded(GeoclueVelocityFields fields, + int timestamp, double speed, + double direction, double climb) { + Q_UNUSED(timestamp); + #ifdef Q_LOCATION_GEOCLUE_DEBUG qDebug() << "QGeoPositionInfoSourceGeoclueMaster velocity update succeeded, speed: " << speed; #endif // Store the velocity and mark it as fresh. Simple but hopefully adequate. - m_lastVelocity = speed * 0.514444; // convert knots to m/s + if (fields & GEOCLUE_VELOCITY_FIELDS_SPEED) + m_lastVelocity = knotsToMetersPerSecond(speed); + else + m_lastVelocity = qQNaN(); + + if (fields & GEOCLUE_VELOCITY_FIELDS_DIRECTION) + m_lastDirection = direction; + else + m_lastDirection = qQNaN(); + + if (fields & GEOCLUE_VELOCITY_FIELDS_CLIMB) + m_lastClimb = climb; + else + m_lastClimb = qQNaN(); + m_lastVelocityIsFresh = true; } @@ -190,8 +215,14 @@ void QGeoPositionInfoSourceGeoclueMaster::singleUpdateSucceeded(GeocluePositionF m_lastPosition = info; if (m_requestTimer.isActive()) m_requestTimer.stop(); - if (m_lastVelocityIsFresh) - info.setAttribute(QGeoPositionInfo::GroundSpeed, m_lastVelocity); // assume groundspeed + if (m_lastVelocityIsFresh) { + if (!qIsNaN(m_lastVelocity)) + info.setAttribute(QGeoPositionInfo::GroundSpeed, m_lastVelocity); + if (!qIsNaN(m_lastDirection)) + info.setAttribute(QGeoPositionInfo::Direction, m_lastDirection); + if (!qIsNaN(m_lastClimb)) + info.setAttribute(QGeoPositionInfo::VerticalSpeed, m_lastClimb); + } #ifdef Q_LOCATION_GEOCLUE_DEBUG qDebug() << "QGeoPositionInfoSourceGeoclueMaster single update succeeded: "; qDebug() << "Lat, lon, alt, speed:" << info.coordinate().latitude() << info.coordinate().longitude() << info.coordinate().altitude() << info.attribute(QGeoPositionInfo::GroundSpeed); @@ -230,7 +261,12 @@ void QGeoPositionInfoSourceGeoclueMaster::regularUpdateSucceeded(GeocluePosition m_lastPosition = geoclueToPositionInfo(fields, timestamp, latitude, longitude, altitude, accuracy); m_lastPositionIsFresh = true; if (m_lastVelocityIsFresh) { - m_lastPosition.setAttribute(QGeoPositionInfo::GroundSpeed, m_lastVelocity); // assume groundspeed + if (!qIsNaN(m_lastVelocity)) + m_lastPosition.setAttribute(QGeoPositionInfo::GroundSpeed, m_lastVelocity); + if (!qIsNaN(m_lastDirection)) + m_lastPosition.setAttribute(QGeoPositionInfo::Direction, m_lastDirection); + if (!qIsNaN(m_lastClimb)) + m_lastPosition.setAttribute(QGeoPositionInfo::VerticalSpeed, m_lastClimb); m_lastVelocityIsFresh = false; } // If a non-intervalled startUpdates has been issued, send an update. diff --git a/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster_p.h b/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster_p.h index 912f32c1..7e980317 100644 --- a/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster_p.h +++ b/src/plugins/position/geoclue/qgeopositioninfosource_geocluemaster_p.h @@ -93,7 +93,8 @@ public: double altitude, GeoclueAccuracy *accuracy); void velocityUpdateFailed(); - void velocityUpdateSucceeded(double speed); + void velocityUpdateSucceeded(GeoclueVelocityFields fields, int timestamp, double speed, + double direction, double climb); Error error() const; @@ -125,6 +126,8 @@ private: bool m_lastPositionIsFresh; bool m_lastVelocityIsFresh; double m_lastVelocity; + double m_lastDirection; + double m_lastClimb; bool m_lastPositionFromSatellite; QGeoPositionInfo m_lastPosition; PositioningMethods m_methods; diff --git a/tests/auto/declarative_core/tst_coordinate.qml b/tests/auto/declarative_core/tst_coordinate.qml index 1541be39..19bdd572 100644 --- a/tests/auto/declarative_core/tst_coordinate.qml +++ b/tests/auto/declarative_core/tst_coordinate.qml @@ -138,6 +138,26 @@ Item { compare(coordSpy.count, 3) } + function test_comparison_data() { + return [ + { tag: "empty", coord1: empty, coord2: QtPositioning.coordinate(), result: true }, + { tag: "zero", coord1: zero, coord2: QtPositioning.coordinate(0, 0), result: true }, + { tag: "plusone", coord1: plusone, coord2: QtPositioning.coordinate(0, 1), result: true }, + { tag: "minusone", coord1: minusone, coord2: QtPositioning.coordinate(0, -1), result: true }, + { tag: "north", coord1: north, coord2: QtPositioning.coordinate(3, 0), result: true }, + { tag: "lat,long.alt", coord1: QtPositioning.coordinate(1.1, 2.2, 3.3), coord2: QtPositioning.coordinate(1.1, 2.2, 3.3), result: true }, + { tag: "not equal1", coord1: plusone, coord2: minusone, result: false }, + { tag: "not equal2", coord1: plusone, coord2: north, result: false } + ] + } + + function test_comparison(data) { + compare(data.coord1 === data.coord2, data.result) + compare(data.coord1 !== data.coord2, !data.result) + compare(data.coord1 == data.coord2, data.result) + compare(data.coord1 != data.coord2, !data.result) + } + function test_distance() { compare(zero.distanceTo(plusone), zero.distanceTo(minusone)) compare(2*plusone.distanceTo(zero), plusone.distanceTo(minusone)) @@ -178,8 +198,6 @@ Item { var coord_30d2 = coord_30d.atDistanceAndAzimuth(200, 30) compare(zero.distanceTo(coord_30d2), 20200) - } - } } diff --git a/tests/auto/declarative_geoshape/tst_locationsingleton.qml b/tests/auto/declarative_geoshape/tst_locationsingleton.qml index 37210cb1..b12fc710 100644 --- a/tests/auto/declarative_geoshape/tst_locationsingleton.qml +++ b/tests/auto/declarative_geoshape/tst_locationsingleton.qml @@ -134,4 +134,31 @@ Item { compare (widthBox.contains(outside), false) } } + + TestCase { + name: "Shape" + + function test_shape_comparison_data() { + return [ + { tag: "invalid shape", shape1: QtPositioning.shape(), shape2: QtPositioning.shape(), result: true }, + { tag: "box equal", shape1: box, shape2: QtPositioning.rectangle(tl, br), result: true }, + { tag: "box not equal", shape1: box, shape2: QtPositioning.rectangle([inside, outside]), result: false }, + { tag: "box invalid shape", rect1: box, shape2: QtPositioning.shape(), result: false }, + { tag: "invalid rectangle", shape1: QtPositioning.rectangle(), shape2: QtPositioning.rectangle(), result: true }, + { tag: "invalid rectangle2", shape1: QtPositioning.rectangle(), shape2: QtPositioning.shape(), result: false }, + { tag: "circle1 equal", shape1: circle1, shape2: QtPositioning.circle(coordinate1, 200000), result: true }, + { tag: "circle1 not equal", shape1: circle1, shape2: QtPositioning.circle(coordinate2, 2000), result: false }, + { tag: "circle1 invalid shape", shape1: circle1, shape2: QtPositioning.shape(), result: false }, + { tag: "invalid circle", shape1: QtPositioning.circle(), shape2: QtPositioning.circle(), result: true }, + { tag: "invalid circle2", shape1: QtPositioning.circle(), shape2: QtPositioning.shape(), result: false } + ] + } + + function test_shape_comparison(data) { + compare(data.shape1 === data.shape2, data.result) + compare(data.shape1 !== data.shape2, !data.result) + compare(data.shape1 == data.shape2, data.result) + compare(data.shape1 != data.shape2, !data.result) + } + } } diff --git a/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/dummynmeapositioninfosource.pro b/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/dummynmeapositioninfosource.pro index b8338f90..f2645820 100644 --- a/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/dummynmeapositioninfosource.pro +++ b/tests/auto/qnmeapositioninfosource/dummynmeapositioninfosource/dummynmeapositioninfosource.pro @@ -14,3 +14,11 @@ SOURCES += ../../utils/qlocationtestutils.cpp \ ../qnmeapositioninfosourceproxyfactory.cpp \ tst_dummynmeapositioninfosource.cpp DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 + +# This test relies on a working local QTcpSocket(Server). When the CI is under +# heavy load the socket code cannot establish a connection which leads to flaky +# test results. We make this test insiginficant as there is currently no known +# solution to this problem. On the positive side QNmeaPositionInfoSource +# does not have a platform specific implementation. Other platforms should provide +# a close enough test approximation. +win32:CONFIG+=insignificant_test diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/qnmeapositioninfosource_realtime.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/qnmeapositioninfosource_realtime.pro index 83e6bf16..cb721b29 100644 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/qnmeapositioninfosource_realtime.pro +++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime/qnmeapositioninfosource_realtime.pro @@ -16,3 +16,11 @@ SOURCES += ../../utils/qlocationtestutils.cpp \ ../tst_qnmeapositioninfosource.cpp \ tst_qnmeapositioninfosource_realtime.cpp DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 + +# This test relies on a working local QTcpSocket(Server). When the CI is under +# heavy load the socket code cannot establish a connection which leads to flaky +# test results. We make this test insiginficant as there is currently no known +# solution to this problem. On the positive side QNmeaPositionInfoSource +# does not have a platform specific implementation. Other platforms should provide +# a close enough test approximation. +win32:CONFIG+=insignificant_test diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/qnmeapositioninfosource_realtime_generic.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/qnmeapositioninfosource_realtime_generic.pro index ca1c258f..c6105d82 100644 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/qnmeapositioninfosource_realtime_generic.pro +++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_realtime_generic/qnmeapositioninfosource_realtime_generic.pro @@ -17,3 +17,11 @@ SOURCES += ../../utils/qlocationtestutils.cpp \ ../tst_qnmeapositioninfosource.cpp \ tst_qnmeapositioninfosource_realtime_generic.cpp DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 + +# This test relies on a working local QTcpSocket(Server). When the CI is under +# heavy load the socket code cannot establish a connection which leads to flaky +# test results. We make this test insiginficant as there is currently no known +# solution to this problem. On the positive side QNmeaPositionInfoSource +# does not have a platform specific implementation. Other platforms should provide +# a close enough test approximation. +win32:CONFIG+=insignificant_test diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/qnmeapositioninfosource_simulation.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/qnmeapositioninfosource_simulation.pro index 655a5f10..d1f8941d 100644 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/qnmeapositioninfosource_simulation.pro +++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation/qnmeapositioninfosource_simulation.pro @@ -16,3 +16,11 @@ SOURCES += ../../utils/qlocationtestutils.cpp \ ../tst_qnmeapositioninfosource.cpp \ tst_qnmeapositioninfosource_simulation.cpp DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 + +# This test relies on a working local QTcpSocket(Server). When the CI is under +# heavy load the socket code cannot establish a connection which leads to flaky +# test results. We make this test insiginficant as there is currently no known +# solution to this problem. On the positive side QNmeaPositionInfoSource +# does not have a platform specific implementation. Other platforms should provide +# a close enough test approximation. +win32:CONFIG+=insignificant_test diff --git a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/qnmeapositioninfosource_simulation_generic.pro b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/qnmeapositioninfosource_simulation_generic.pro index cf94e7f8..f3bd50a0 100644 --- a/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/qnmeapositioninfosource_simulation_generic.pro +++ b/tests/auto/qnmeapositioninfosource/qnmeapositioninfosource_simulation_generic/qnmeapositioninfosource_simulation_generic.pro @@ -17,3 +17,11 @@ SOURCES += ../../utils/qlocationtestutils.cpp \ ../tst_qnmeapositioninfosource.cpp \ tst_qnmeapositioninfosource_simulation_generic.cpp DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 + +# This test relies on a working local QTcpSocket(Server). When the CI is under +# heavy load the socket code cannot establish a connection which leads to flaky +# test results. We make this test insiginficant as there is currently no known +# solution to this problem. On the positive side QNmeaPositionInfoSource +# does not have a platform specific implementation. Other platforms should provide +# a close enough test approximation. +win32:CONFIG+=insignificant_test |