summaryrefslogtreecommitdiff
path: root/src/location/maps
diff options
context:
space:
mode:
authorPaolo Angelelli <paolo.angelelli@qt.io>2018-01-19 18:52:14 +0100
committerPaolo Angelelli <paolo.angelelli@qt.io>2018-04-17 11:16:59 +0000
commit6909660b73b40681211493a039e72a701d5b4462 (patch)
tree85d3d59e8e2123f3b26c0dbe5cd23785ae7539ef /src/location/maps
parent6c6a9e787c2e1443fc4318482504e672a6ca386e (diff)
downloadqtlocation-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.cpp42
-rw-r--r--src/location/maps/qnavigationmanager_p.h27
-rw-r--r--src/location/maps/qnavigationmanagerengine.cpp8
-rw-r--r--src/location/maps/qnavigationmanagerengine_p.h14
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 *> &parameters)
+{
+ 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 *> &parameters);
+ 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;
};