summaryrefslogtreecommitdiffstats
path: root/src/location
diff options
context:
space:
mode:
authorPaolo Angelelli <paolo.angelelli@qt.io>2016-09-13 19:17:16 +0200
committerPaolo Angelelli <paolo.angelelli@qt.io>2016-12-01 13:45:44 +0000
commit5e4bc1fe908896e9b90e8ad9c3896f35b5ec37be (patch)
tree8f63f0c53943326b5243d422b95112ebf07f307f /src/location
parente568470c6409febdb5187e3f53af32164c63169f (diff)
MapParameters for accessing specific features of custom QGeoMaps
This patch adds a new MapParameter object to give users access to specific features of a custom QGeoMap otherwise not accessible through the standard API. A MapParameter is implemented by a QDeclarativeGeoMapParameter, which, in turns, inherits from QGeoMapParameter in the location module. In this way QGeoMap & subclasses won't depend on declarative, from this side, still allowing a QMapWidget someday. The implementation is based, on both sides, on the dynamic properties of QObjects for defining the MapProperty data. This allows high flexibility in defining various types of MapParameters (essentially by duck typing them), and therefore each plugin which makes use of them must document each of them. Change-Id: I5f3a8c18e996f290beb8e4ff37d3c2c655eefc6c Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src/location')
-rw-r--r--src/location/maps/maps.pri5
-rw-r--r--src/location/maps/qgeomap.cpp36
-rw-r--r--src/location/maps/qgeomap_p.h5
-rw-r--r--src/location/maps/qgeomap_p_p.h6
-rw-r--r--src/location/maps/qgeomapparameter.cpp74
-rw-r--r--src/location/maps/qgeomapparameter_p.h84
-rw-r--r--src/location/maps/qgeotiledmap.cpp11
-rw-r--r--src/location/maps/qgeotiledmap_p.h12
-rw-r--r--src/location/maps/qgeotiledmap_p_p.h12
9 files changed, 230 insertions, 15 deletions
diff --git a/src/location/maps/maps.pri b/src/location/maps/maps.pri
index 97b28b69..3f76f737 100644
--- a/src/location/maps/maps.pri
+++ b/src/location/maps/maps.pri
@@ -18,6 +18,7 @@ PUBLIC_HEADERS += \
maps/qgeoserviceprovider.h
PRIVATE_HEADERS += \
+ maps/qgeomapparameter_p.h \
maps/qgeocameracapabilities_p.h \
maps/qgeocameradata_p.h \
maps/qgeocameratiles_p.h \
@@ -91,5 +92,5 @@ SOURCES += \
maps/qgeotiledmapscene.cpp \
maps/qgeorouteparser.cpp \
maps/qgeorouteparserosrmv5.cpp \
- maps/qgeorouteparserosrmv4.cpp
-
+ maps/qgeorouteparserosrmv4.cpp \
+ maps/qgeomapparameter.cpp
diff --git a/src/location/maps/qgeomap.cpp b/src/location/maps/qgeomap.cpp
index c3b01a3e..f8361ee3 100644
--- a/src/location/maps/qgeomap.cpp
+++ b/src/location/maps/qgeomap.cpp
@@ -130,6 +130,32 @@ void QGeoMap::clearData()
}
+void QGeoMap::addParameter(QGeoMapParameter *param)
+{
+ Q_D(QGeoMap);
+ if (param && !d->m_mapParameters.contains(param)) {
+ d->m_mapParameters.insert(param);
+ d->addParameter(param);
+ }
+}
+
+void QGeoMap::removeParameter(QGeoMapParameter *param)
+{
+ Q_D(QGeoMap);
+ if (param && d->m_mapParameters.contains(param)) {
+ d->removeParameter(param);
+ d->m_mapParameters.remove(param);
+ }
+}
+
+void QGeoMap::clearParameters()
+{
+ Q_D(QGeoMap);
+ for (QGeoMapParameter *p : d->m_mapParameters)
+ d->removeParameter(p);
+ d->m_mapParameters.clear();
+}
+
QGeoMapPrivate::QGeoMapPrivate(QGeoMappingManagerEngine *engine)
: QObjectPrivate(),
m_engine(engine),
@@ -141,4 +167,14 @@ QGeoMapPrivate::~QGeoMapPrivate()
{
}
+void QGeoMapPrivate::addParameter(QGeoMapParameter *param)
+{
+ Q_UNUSED(param)
+}
+
+void QGeoMapPrivate::removeParameter(QGeoMapParameter *param)
+{
+ Q_UNUSED(param)
+}
+
QT_END_NAMESPACE
diff --git a/src/location/maps/qgeomap_p.h b/src/location/maps/qgeomap_p.h
index c16d35af..6a482e4f 100644
--- a/src/location/maps/qgeomap_p.h
+++ b/src/location/maps/qgeomap_p.h
@@ -61,6 +61,7 @@ class QGeoCameraCapabilities;
class QGeoCoordinate;
class QSGNode;
class QQuickWindow;
+class QGeoMapParameter;
class Q_LOCATION_EXPORT QGeoMap : public QObject
{
@@ -93,6 +94,10 @@ public:
virtual void prefetchData();
virtual void clearData();
+ void addParameter(QGeoMapParameter *param);
+ void removeParameter(QGeoMapParameter *param);
+ void clearParameters();
+
protected:
QGeoMap(QGeoMapPrivate &dd, QObject *parent = 0);
void setCameraData(const QGeoCameraData &cameraData);
diff --git a/src/location/maps/qgeomap_p_p.h b/src/location/maps/qgeomap_p_p.h
index 311a3eb1..6347d0f7 100644
--- a/src/location/maps/qgeomap_p_p.h
+++ b/src/location/maps/qgeomap_p_p.h
@@ -52,6 +52,7 @@
#include <QtLocation/private/qgeomaptype_p.h>
#include <QtCore/private/qobject_p.h>
#include <QtCore/QSize>
+#include <QtCore/QSet>
QT_BEGIN_NAMESPACE
@@ -59,6 +60,7 @@ QT_BEGIN_NAMESPACE
class QGeoMappingManagerEngine;
class QGeoMap;
class QGeoMapController;
+class QGeoMapParameter;
class Q_LOCATION_PRIVATE_EXPORT QGeoMapPrivate : public QObjectPrivate
{
@@ -72,12 +74,14 @@ protected:
virtual void changeMapSize(const QSize &size) = 0; // called by QGeoMap::setSize()
virtual void changeCameraData(const QGeoCameraData &oldCameraData) = 0; // called by QGeoMap::setCameraData()
virtual void changeActiveMapType(const QGeoMapType mapType) = 0; // called by QGeoMap::setActiveMapType()
+ virtual void addParameter(QGeoMapParameter *param);
+ virtual void removeParameter(QGeoMapParameter *param);
-protected:
QSize m_size;
QPointer<QGeoMappingManagerEngine> m_engine;
QGeoCameraData m_cameraData;
QGeoMapType m_activeMapType;
+ QSet<QGeoMapParameter *> m_mapParameters;
};
QT_END_NAMESPACE
diff --git a/src/location/maps/qgeomapparameter.cpp b/src/location/maps/qgeomapparameter.cpp
new file mode 100644
index 00000000..b8f9561f
--- /dev/null
+++ b/src/location/maps/qgeomapparameter.cpp
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtLocation module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** 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 http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include "qgeomapparameter_p.h"
+#include <QtCore/QVariant>
+
+QT_BEGIN_NAMESPACE
+
+QGeoMapParameter::QGeoMapParameter(QObject *parent) : QObject(parent)
+{
+
+}
+
+QGeoMapParameter::~QGeoMapParameter()
+{
+}
+
+QString QGeoMapParameter::type() const
+{
+ return m_type;
+}
+
+void QGeoMapParameter::setType(const QString &type)
+{
+ if (m_type.isEmpty())
+ m_type = type;
+}
+
+// DO NOT USE to set "type"
+void QGeoMapParameter::updateProperty(const char *propertyName, QVariant value)
+{
+ setProperty(propertyName, value);
+ // This should technically be emitted only for dynamically added properties.
+ // Since this object has only type defined as Q_PROPERTY() which is a set-once
+ // no check is really needed here.
+ emit propertyUpdated(this, propertyName);
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/location/maps/qgeomapparameter_p.h b/src/location/maps/qgeomapparameter_p.h
new file mode 100644
index 00000000..c3bef4d8
--- /dev/null
+++ b/src/location/maps/qgeomapparameter_p.h
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtLocation module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL3$
+** 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 http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://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.LGPLv3 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.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 later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#ifndef QGEOMAPPARAMETER_P_H
+#define QGEOMAPPARAMETER_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QObject>
+#include <QString>
+#include <QtLocation/qlocationglobal.h>
+
+QT_BEGIN_NAMESPACE
+
+class Q_LOCATION_EXPORT QGeoMapParameter : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(QString type READ type WRITE setType)
+public:
+ explicit QGeoMapParameter(QObject *parent = 0);
+ virtual ~QGeoMapParameter();
+
+ QString type() const;
+ void setType(const QString &type);
+
+ void updateProperty(const char *propertyName, QVariant value);
+
+Q_SIGNALS:
+ void propertyUpdated(QGeoMapParameter *param, const char *propertyName);
+
+protected:
+ QString m_type;
+
+ Q_DISABLE_COPY(QGeoMapParameter)
+ friend class QGeoMap;
+};
+
+QT_END_NAMESPACE
+
+#endif // QGEOMAPPARAMETER_P_H
diff --git a/src/location/maps/qgeotiledmap.cpp b/src/location/maps/qgeotiledmap.cpp
index fedaecbc..2cf815af 100644
--- a/src/location/maps/qgeotiledmap.cpp
+++ b/src/location/maps/qgeotiledmap.cpp
@@ -60,6 +60,17 @@ QGeoTiledMap::QGeoTiledMap(QGeoTiledMappingManagerEngine *engine, QObject *paren
this,&QGeoTiledMap::handleTileVersionChanged);
}
+QGeoTiledMap::QGeoTiledMap(QGeoTiledMapPrivate &dd, QGeoTiledMappingManagerEngine *engine, QObject *parent)
+ : QGeoMap(dd, parent)
+{
+ Q_D(QGeoTiledMap);
+
+ d->m_tileRequests = new QGeoTileRequestManager(this, engine);
+
+ QObject::connect(engine,&QGeoTiledMappingManagerEngine::tileVersionChanged,
+ this,&QGeoTiledMap::handleTileVersionChanged);
+}
+
QGeoTiledMap::~QGeoTiledMap()
{
Q_D(QGeoTiledMap);
diff --git a/src/location/maps/qgeotiledmap_p.h b/src/location/maps/qgeotiledmap_p.h
index 791384c7..ff5f88a6 100644
--- a/src/location/maps/qgeotiledmap_p.h
+++ b/src/location/maps/qgeotiledmap_p.h
@@ -49,10 +49,10 @@
#include <QObject>
#include <QString>
-
-#include "qgeomap_p.h"
-#include "qgeocameradata_p.h"
-#include "qgeomaptype_p.h"
+#include <QtLocation/private/qlocationglobal_p.h>
+#include <QtLocation/private/qgeomap_p.h>
+#include <QtLocation/private/qgeocameradata_p.h>
+#include <QtLocation/private/qgeomaptype_p.h>
#include <QtPositioning/private/qdoublevector2d_p.h>
@@ -70,7 +70,7 @@ class QSGNode;
class QPointF;
-class Q_LOCATION_EXPORT QGeoTiledMap : public QGeoMap
+class Q_LOCATION_PRIVATE_EXPORT QGeoTiledMap : public QGeoMap
{
Q_OBJECT
Q_DECLARE_PRIVATE(QGeoTiledMap)
@@ -103,6 +103,8 @@ protected:
QSGNode *updateSceneGraph(QSGNode *, QQuickWindow *window) Q_DECL_OVERRIDE;
virtual void evaluateCopyrights(const QSet<QGeoTileSpec> &visibleTiles);
+ QGeoTiledMap(QGeoTiledMapPrivate &dd, QGeoTiledMappingManagerEngine *engine, QObject *parent);
+
private Q_SLOTS:
void handleTileVersionChanged();
diff --git a/src/location/maps/qgeotiledmap_p_p.h b/src/location/maps/qgeotiledmap_p_p.h
index f7f9c4d9..f0744df6 100644
--- a/src/location/maps/qgeotiledmap_p_p.h
+++ b/src/location/maps/qgeotiledmap_p_p.h
@@ -47,10 +47,10 @@
// We mean it.
//
-#include "qlocationglobal_p.h"
-#include "qgeomap_p_p.h"
-#include "qgeocameradata_p.h"
-#include "qgeomaptype_p.h"
+#include <QtLocation/private/qlocationglobal_p.h>
+#include <QtLocation/private/qgeomap_p_p.h>
+#include <QtLocation/private/qgeocameradata_p.h>
+#include <QtLocation/private/qgeomaptype_p.h>
#include <QtPositioning/private/qdoublevector3d_p.h>
#include <QtPositioning/private/qdoublevector2d_p.h>
#include <QtCore/QPointer>
@@ -90,10 +90,9 @@ protected:
void changeTileVersion(int version);
void clearScene();
-private:
void updateScene();
-private:
+protected:
QAbstractGeoTileCache *m_cache;
QGeoCameraTiles *m_visibleTiles;
QGeoCameraTiles *m_prefetchTiles;
@@ -102,7 +101,6 @@ private:
int m_maxZoomLevel;
int m_minZoomLevel;
QGeoTiledMap::PrefetchStyle m_prefetchStyle;
- bool m_geomoteryUpdated;
Q_DISABLE_COPY(QGeoTiledMapPrivate)
};