summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaolo Angelelli <paolo.angelelli@qt.io>2019-02-05 19:42:22 +0100
committerPaolo Angelelli <paolo.angelelli@qt.io>2019-02-06 11:54:12 +0000
commitad7bcebc575922fc7c5654c118794e5758d347d2 (patch)
tree022f156d3e3859b1d488e3ec8cbdfb7b89a1a699
parent7a65e5f2b9d5ecda418e76f98acd90506025186a (diff)
Add departure time attribute to route queriesv5.13.0-alpha1
So that it can be used to improve the route calculation based on traffic information or other time-based information (ferries etc.) Change-Id: I8bdc81046484cc4f0ebfaffbdf6f034c555d7781 Fixes: QTBUG-70503 Reviewed-by: BogDan Vatra <bogdan@kdab.com>
-rw-r--r--src/imports/location/location.cpp3
-rw-r--r--src/location/declarativemaps/qdeclarativegeoroutemodel.cpp25
-rw-r--r--src/location/declarativemaps/qdeclarativegeoroutemodel_p.h5
-rw-r--r--src/location/maps/qgeorouterequest.cpp24
-rw-r--r--src/location/maps/qgeorouterequest.h4
-rw-r--r--src/location/maps/qgeorouterequest_p.h1
-rw-r--r--tests/auto/declarative_core/tst_routing.qml13
-rw-r--r--tests/auto/geotestplugin/qgeoroutingmanagerengine_test.h6
-rw-r--r--tests/auto/qgeorouterequest/tst_qgeorouterequest.cpp16
-rw-r--r--tests/auto/qgeorouterequest/tst_qgeorouterequest.h2
10 files changed, 99 insertions, 0 deletions
diff --git a/src/imports/location/location.cpp b/src/imports/location/location.cpp
index dbedd1de..049d52c0 100644
--- a/src/imports/location/location.cpp
+++ b/src/imports/location/location.cpp
@@ -194,6 +194,9 @@ public:
qmlRegisterType<QDeclarativeGeoRoute, 12>(uri, major, minor, "Route");
qmlRegisterType<QDeclarativeGeoRouteLeg, 12>(uri, major, minor, "RouteLeg");
+ minor = 13;
+ qmlRegisterType<QDeclarativeGeoRouteQuery, 13>(uri, major, minor, "RouteQuery");
+
// Register the latest Qt version as QML type version
qmlRegisterModule(uri, QT_VERSION_MAJOR, QT_VERSION_MINOR);
diff --git a/src/location/declarativemaps/qdeclarativegeoroutemodel.cpp b/src/location/declarativemaps/qdeclarativegeoroutemodel.cpp
index 499f1c51..06a03791 100644
--- a/src/location/declarativemaps/qdeclarativegeoroutemodel.cpp
+++ b/src/location/declarativemaps/qdeclarativegeoroutemodel.cpp
@@ -1446,6 +1446,31 @@ QDeclarativeGeoRouteQuery::RouteOptimizations QDeclarativeGeoRouteQuery::routeOp
return optimization;
}
+/*!
+ \qmlproperty date RouteQuery::departureTime
+
+ The departure time to be used when querying for the route.
+ The default value is an invalid date, meaning no departure time will be used in the query.
+
+ \since 5.13
+*/
+void QDeclarativeGeoRouteQuery::setDepartureTime(const QDateTime &departureTime)
+{
+ if (departureTime == request_.departureTime())
+ return;
+
+ request_.setDepartureTime(departureTime);
+ if (complete_) {
+ emit departureTimeChanged();
+ emit queryDetailsChanged();
+ }
+}
+
+QDateTime QDeclarativeGeoRouteQuery::departureTime() const
+{
+ return request_.departureTime();
+}
+
void QDeclarativeGeoRouteQuery::setRouteOptimizations(QDeclarativeGeoRouteQuery::RouteOptimizations optimization)
{
QGeoRouteRequest::RouteOptimizations reqOptimizations;
diff --git a/src/location/declarativemaps/qdeclarativegeoroutemodel_p.h b/src/location/declarativemaps/qdeclarativegeoroutemodel_p.h
index afffc21a..39fd84d6 100644
--- a/src/location/declarativemaps/qdeclarativegeoroutemodel_p.h
+++ b/src/location/declarativemaps/qdeclarativegeoroutemodel_p.h
@@ -296,6 +296,7 @@ class Q_LOCATION_PRIVATE_EXPORT QDeclarativeGeoRouteQuery : public QObject, publ
Q_PROPERTY(QJSValue excludedAreas READ excludedAreas WRITE setExcludedAreas NOTIFY excludedAreasChanged)
Q_PROPERTY(QList<int> featureTypes READ featureTypes NOTIFY featureTypesChanged)
Q_PROPERTY(QVariantMap extraParameters READ extraParameters REVISION 11)
+ Q_PROPERTY(QDateTime departureTime READ departureTime WRITE setDepartureTime NOTIFY departureTimeChanged REVISION 13)
Q_PROPERTY(QQmlListProperty<QObject> quickChildren READ declarativeChildren DESIGNABLE false)
Q_CLASSINFO("DefaultProperty", "quickChildren")
Q_INTERFACES(QQmlParserStatus)
@@ -409,6 +410,9 @@ public:
void setRouteOptimizations(RouteOptimizations optimization);
RouteOptimizations routeOptimizations() const;
+ void setDepartureTime(const QDateTime &departureTime);
+ QDateTime departureTime() const;
+
template <typename T = QObject>
QList<T*> quickChildren() const
{
@@ -435,6 +439,7 @@ Q_SIGNALS:
void queryDetailsChanged();
Q_REVISION(11) void extraParametersChanged();
+ void departureTimeChanged();
private Q_SLOTS:
void excludedAreaCoordinateChanged();
diff --git a/src/location/maps/qgeorouterequest.cpp b/src/location/maps/qgeorouterequest.cpp
index 57fbe207..412dc598 100644
--- a/src/location/maps/qgeorouterequest.cpp
+++ b/src/location/maps/qgeorouterequest.cpp
@@ -469,6 +469,30 @@ QGeoRouteRequest::ManeuverDetail QGeoRouteRequest::maneuverDetail() const
}
/*!
+ Sets the departure time for the route calculation. This information can be used by
+ the backend to calculate a faster route, for example by avoiding blockages present at
+ given points in time.
+
+ The default value is an invalid \l QDateTime
+
+ \since 5.13
+*/
+void QGeoRouteRequest::setDepartureTime(const QDateTime &departureTime)
+{
+ d_ptr->departureTime = departureTime;
+}
+
+/*!
+ Returns the departure time in the request.
+
+ \since 5.13
+*/
+QDateTime QGeoRouteRequest::departureTime() const
+{
+ return d_ptr->departureTime;
+}
+
+/*!
Sets the extra parameters \a extraParameters for the route request.
The format of the extra parameters is plugin specific, and documented per plugin.
diff --git a/src/location/maps/qgeorouterequest.h b/src/location/maps/qgeorouterequest.h
index 5a4bc61e..52057ce0 100644
--- a/src/location/maps/qgeorouterequest.h
+++ b/src/location/maps/qgeorouterequest.h
@@ -149,6 +149,10 @@ public:
void setManeuverDetail(ManeuverDetail maneuverDetail);
ManeuverDetail maneuverDetail() const;
+ // defaults to invalid datetime
+ void setDepartureTime(const QDateTime &departureTime);
+ QDateTime departureTime() const;
+
void setExtraParameters(const QVariantMap &extraParameters);
QVariantMap extraParameters() const;
diff --git a/src/location/maps/qgeorouterequest_p.h b/src/location/maps/qgeorouterequest_p.h
index df0cd62c..71c8b58b 100644
--- a/src/location/maps/qgeorouterequest_p.h
+++ b/src/location/maps/qgeorouterequest_p.h
@@ -77,6 +77,7 @@ public:
QGeoRouteRequest::RouteOptimizations routeOptimization;
QGeoRouteRequest::SegmentDetail segmentDetail;
QGeoRouteRequest::ManeuverDetail maneuverDetail;
+ QDateTime departureTime;
QVariantMap extraParameters;
};
diff --git a/tests/auto/declarative_core/tst_routing.qml b/tests/auto/declarative_core/tst_routing.qml
index f5204f26..1d7c1e37 100644
--- a/tests/auto/declarative_core/tst_routing.qml
+++ b/tests/auto/declarative_core/tst_routing.qml
@@ -929,6 +929,19 @@ Item {
compare (spy.count, 21)
compare(model.get(0).path.length, 3);
+ // departure time
+ verify(!model.get(0).extendedAttributes["tst_departureTime"])
+ var invalidDate = new Date("abc"); // to create an invalid date
+ var validDate = new Date("2011-02-07T11:05:00");
+
+ filledRouteQuery2.departureTime = validDate
+ tryCompare(spy, "count", 22)
+ compare(model.get(0).extendedAttributes["tst_departureTime"], validDate)
+
+ filledRouteQuery2.departureTime = invalidDate
+ tryCompare (spy, "count", 23)
+ verify(!model.get(0).extendedAttributes["tst_departureTime"])
+
// ReSetting
filledRouteQuery.numberAlternativeRoutes = 0
filledRouteQuery2.numberAlternativeRoutes = 0
diff --git a/tests/auto/geotestplugin/qgeoroutingmanagerengine_test.h b/tests/auto/geotestplugin/qgeoroutingmanagerengine_test.h
index 7a6d6cec..daf7a87d 100644
--- a/tests/auto/geotestplugin/qgeoroutingmanagerengine_test.h
+++ b/tests/auto/geotestplugin/qgeoroutingmanagerengine_test.h
@@ -187,6 +187,12 @@ public:
}
}
+ if (request.departureTime().isValid()) {
+ QVariantMap extendedAttributes = route.extendedAttributes();
+ extendedAttributes["tst_departureTime"] = request.departureTime();
+ route.setExtendedAttributes(extendedAttributes);
+ }
+
routes.append(route);
}
reply->callSetRoutes(routes);
diff --git a/tests/auto/qgeorouterequest/tst_qgeorouterequest.cpp b/tests/auto/qgeorouterequest/tst_qgeorouterequest.cpp
index d29e3d49..7f56689c 100644
--- a/tests/auto/qgeorouterequest/tst_qgeorouterequest.cpp
+++ b/tests/auto/qgeorouterequest/tst_qgeorouterequest.cpp
@@ -348,4 +348,20 @@ void tst_QGeoRouteRequest::extraParameters()
QCOMPARE(qgeorouterequest->extraParameters(), emptyParams);
}
+void tst_QGeoRouteRequest::departureTime_data()
+{
+ QTest::addColumn<QDateTime>("departureTime");
+
+ QTest::newRow("Invalid") << QDateTime();
+ QTest::newRow("date1") << QDateTime(QDate(2012, 7, 6), QTime(23, 55, 0));
+ QTest::newRow("date2") << QDateTime(QDate(2012, 7, 7), QTime(0, 5, 0));
+}
+
+void tst_QGeoRouteRequest::departureTime()
+{
+ QFETCH(QDateTime , departureTime);
+ qgeorouterequest->setDepartureTime(departureTime);
+ QCOMPARE(qgeorouterequest->departureTime(), departureTime);
+}
+
QTEST_APPLESS_MAIN(tst_QGeoRouteRequest);
diff --git a/tests/auto/qgeorouterequest/tst_qgeorouterequest.h b/tests/auto/qgeorouterequest/tst_qgeorouterequest.h
index 12506cf6..ee10233d 100644
--- a/tests/auto/qgeorouterequest/tst_qgeorouterequest.h
+++ b/tests/auto/qgeorouterequest/tst_qgeorouterequest.h
@@ -74,6 +74,8 @@ private Q_SLOTS:
void featureWeight_data();
void extraParameters();
void extraParameters_data();
+ void departureTime();
+ void departureTime_data();
//End Unit Test for QGeoRouteRequest
private: