diff options
author | Paolo Angelelli <paolo.angelelli@qt.io> | 2018-01-19 18:52:14 +0100 |
---|---|---|
committer | Paolo Angelelli <paolo.angelelli@qt.io> | 2018-04-17 11:16:59 +0000 |
commit | 6909660b73b40681211493a039e72a701d5b4462 (patch) | |
tree | 85d3d59e8e2123f3b26c0dbe5cd23785ae7539ef /src/location/maps | |
parent | 6c6a9e787c2e1443fc4318482504e672a6ca386e (diff) | |
download | qtlocation-6909660b73b40681211493a039e72a701d5b4462.tar.gz |
Introduce Navigator QML type
A new QML type, Navigator, is introduced in Qt.labs.location
Its intended purpose is to be a front-end for the
functionalities offered by NavigationManagerEngines.
Change-Id: Ic93bed0bfaaf32453e759b12a348fa6ef1ae2c93
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src/location/maps')
-rw-r--r-- | src/location/maps/qnavigationmanager.cpp | 42 | ||||
-rw-r--r-- | src/location/maps/qnavigationmanager_p.h | 27 | ||||
-rw-r--r-- | src/location/maps/qnavigationmanagerengine.cpp | 8 | ||||
-rw-r--r-- | src/location/maps/qnavigationmanagerengine_p.h | 14 |
4 files changed, 78 insertions, 13 deletions
diff --git a/src/location/maps/qnavigationmanager.cpp b/src/location/maps/qnavigationmanager.cpp index 1e83b2c9..5372e3a5 100644 --- a/src/location/maps/qnavigationmanager.cpp +++ b/src/location/maps/qnavigationmanager.cpp @@ -46,6 +46,8 @@ public: ~QNavigationManagerPrivate(); QNavigationManagerEngine *engine = nullptr; + QDeclarativeNavigatorPrivate *navigator = nullptr; + QList<QGeoMapParameter *> parameters; private: Q_DISABLE_COPY(QNavigationManagerPrivate) @@ -87,6 +89,16 @@ bool QNavigationManager::isInitialized() const return d_ptr->engine->isInitialized(); } +void QNavigationManager::setNavigator(QDeclarativeNavigatorPrivate *navigator) +{ + d_ptr->navigator = navigator; +} + +QDeclarativeNavigatorPrivate *QNavigationManager::declarativeNavigator() const +{ + return d_ptr->navigator; +} + void QNavigationManager::setLocale(const QLocale &locale) { d_ptr->engine->setLocale(locale); @@ -97,6 +109,36 @@ QLocale QNavigationManager::locale() const return d_ptr->engine->locale(); } +void QNavigationManager::setParameters(const QList<QGeoMapParameter *> ¶meters) +{ + d_ptr->parameters = parameters; +} + +QList<QGeoMapParameter *> QNavigationManager::parameters() const +{ + return d_ptr->parameters; +} + +bool QNavigationManager::ready() const +{ + return d_ptr->engine->ready(*d_ptr->navigator, d_ptr->parameters); +} + +bool QNavigationManager::start() +{ + return d_ptr->engine->start(*d_ptr->navigator, d_ptr->parameters); +} + +bool QNavigationManager::stop() +{ + return d_ptr->engine->stop(*d_ptr->navigator); +} + +bool QNavigationManager::active() const +{ + return d_ptr->engine->active(*d_ptr->navigator); +} + QNavigationManager::QNavigationManager(QNavigationManagerEngine *engine, QObject *parent) : QObject(parent), d_ptr(new QNavigationManagerPrivate) { diff --git a/src/location/maps/qnavigationmanager_p.h b/src/location/maps/qnavigationmanager_p.h index e461bcf1..1d8c1722 100644 --- a/src/location/maps/qnavigationmanager_p.h +++ b/src/location/maps/qnavigationmanager_p.h @@ -52,11 +52,17 @@ #include <QSize> #include <QPair> #include <QtLocation/private/qlocationglobal_p.h> +#include <QtLocation/private/qgeomapparameter_p.h> QT_BEGIN_NAMESPACE class QNavigationManagerEngine; class QNavigationManagerPrivate; +class QDeclarativeNavigatorPrivate; +class QDeclarativeGeoWaypoint; +class QGeoRoute; +class QGeoRouteSegment; + class Q_LOCATION_PRIVATE_EXPORT QNavigationManager : public QObject { Q_OBJECT @@ -66,16 +72,33 @@ public: QString managerName() const; int managerVersion() const; - QNavigationManagerEngine *engine(); - bool isInitialized() const; + + void setNavigator(QDeclarativeNavigatorPrivate *navigator); + QDeclarativeNavigatorPrivate *declarativeNavigator() const; + void setLocale(const QLocale &locale); QLocale locale() const; + void setParameters(const QList<QGeoMapParameter *> ¶meters); + QList<QGeoMapParameter *> parameters() const; + + bool ready() const; + bool start(); + bool stop(); + bool active() const; + Q_SIGNALS: void initialized(); + // These must be emitted by the engine + void activeChanged(bool active); + void waypointReached(const QDeclarativeGeoWaypoint *pos); + void destinationReached(); + void currentRouteChanged(const QGeoRoute &route); + void currentSegmentChanged(int segment); + protected: QNavigationManager(QNavigationManagerEngine *engine, QObject *parent = 0); diff --git a/src/location/maps/qnavigationmanagerengine.cpp b/src/location/maps/qnavigationmanagerengine.cpp index 265237ee..b9191e74 100644 --- a/src/location/maps/qnavigationmanagerengine.cpp +++ b/src/location/maps/qnavigationmanagerengine.cpp @@ -105,14 +105,14 @@ bool QNavigationManagerEngine::isInitialized() const return d_ptr->initialized; } -bool QNavigationManagerEngine::start(const QList<QGeoMapParameter*> &navigationParams, const QMapRouteObject &route) +// Subclasses are supposed to emit activeChanged from here. +bool QNavigationManagerEngine::start(QDeclarativeNavigatorPrivate & /*navigator*/, const QList<QGeoMapParameter*> & /*navigationParams*/) { - Q_UNUSED(navigationParams); - Q_UNUSED(route); + return false; } -bool QNavigationManagerEngine::stop() +bool QNavigationManagerEngine::stop(QDeclarativeNavigatorPrivate & /*navigator*/) // navigator needed to find the right navi session to stop. { return false; } diff --git a/src/location/maps/qnavigationmanagerengine_p.h b/src/location/maps/qnavigationmanagerengine_p.h index 0aa5509e..803050c5 100644 --- a/src/location/maps/qnavigationmanagerengine_p.h +++ b/src/location/maps/qnavigationmanagerengine_p.h @@ -59,6 +59,7 @@ class QGeoMap; class QGeoMapParameter; class QMapRouteObject; class QNavigationManagerEnginePrivate; +class QDeclarativeNavigatorPrivate; class Q_LOCATION_PRIVATE_EXPORT QNavigationManagerEngine : public QObject { @@ -76,17 +77,16 @@ public: virtual QLocale locale() const; virtual void setMeasurementSystem(QLocale::MeasurementSystem system); virtual QLocale::MeasurementSystem measurementSystem() const; - bool isInitialized() const; + virtual bool isInitialized() const; + virtual bool ready(const QDeclarativeNavigatorPrivate &navigator, const QList<QGeoMapParameter*> &navigationParams) = 0; + virtual bool active(const QDeclarativeNavigatorPrivate &navigator) = 0; signals: - void activeChanged(bool active); - void waypointReached(const QGeoCoordinate &pos); - void destinationReached(); void initialized(); public slots: - virtual bool start(const QList<QGeoMapParameter*> &navigationParams, const QMapRouteObject &route); - virtual bool stop(); + virtual bool start(QDeclarativeNavigatorPrivate &navigator, const QList<QGeoMapParameter*> &navigationParams); + virtual bool stop(QDeclarativeNavigatorPrivate &navigator); protected: /*! @@ -94,7 +94,7 @@ protected: call this method after performing implementation-specific initialization within the constructor. */ - void engineInitialized(); + virtual void engineInitialized(); QScopedPointer<QNavigationManagerEnginePrivate> d_ptr; }; |