summaryrefslogtreecommitdiff
path: root/src/imports
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@qt.io>2017-02-01 20:43:47 +0100
committerOswald Buddenhagen <oswald.buddenhagen@qt.io>2017-02-01 20:43:47 +0100
commit87d7387c51f564f44602a8d2841d49df2d789e41 (patch)
tree69a4e65f94ecb2dffc9466a3b2e2760185ce6363 /src/imports
parent25b42f4165d23b64faa02adf6c71d6c5f6d985bb (diff)
parent55d4490ee62d5c1105a6733b717f2ef7340af492 (diff)
downloadqtlocation-87d7387c51f564f44602a8d2841d49df2d789e41.tar.gz
Merge dev into 5.9
Change-Id: Ib755265554410a62e14ee3e23fd09d9f4385519b
Diffstat (limited to 'src/imports')
-rw-r--r--src/imports/location/declarativeplaces/declarativeplaces.pri50
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativecategory.cpp456
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativecategory_p.h152
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativecontactdetail.cpp219
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativecontactdetail_p.h102
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeperiod_p.h98
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeplace.cpp1227
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeplace_p.h261
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeplaceattribute.cpp217
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeplaceattribute_p.h94
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeplacecontentmodel.cpp397
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeplacecontentmodel.h125
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeplaceeditorialmodel.cpp169
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeplaceeditorialmodel.h64
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeplaceicon.cpp248
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeplaceicon_p.h103
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeplaceimagemodel.cpp170
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeplaceimagemodel_p.h77
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeplaceuser.cpp138
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeplaceuser_p.h91
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeratings.cpp152
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativeratings_p.h97
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativereviewmodel.cpp183
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativereviewmodel_p.h77
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativesearchmodelbase.cpp358
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativesearchmodelbase.h148
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativesearchresultmodel.cpp916
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativesearchresultmodel_p.h178
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativesearchsuggestionmodel.cpp351
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativesearchsuggestionmodel_p.h103
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativesupplier.cpp219
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativesupplier_p.h110
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativesupportedcategoriesmodel.cpp687
-rw-r--r--src/imports/location/declarativeplaces/qdeclarativesupportedcategoriesmodel_p.h165
-rw-r--r--src/imports/location/error_messages.cpp52
-rw-r--r--src/imports/location/error_messages.h55
-rw-r--r--src/imports/location/location.cpp64
-rw-r--r--src/imports/location/location.pro63
-rw-r--r--src/imports/location/locationvaluetypehelper.cpp117
-rw-r--r--src/imports/location/locationvaluetypehelper_p.h60
-rw-r--r--src/imports/location/mapitemviewdelegateincubator.cpp54
-rw-r--r--src/imports/location/mapitemviewdelegateincubator.h65
-rw-r--r--src/imports/location/qdeclarativecirclemapitem.cpp654
-rw-r--r--src/imports/location/qdeclarativecirclemapitem_p.h133
-rw-r--r--src/imports/location/qdeclarativegeocodemodel.cpp727
-rw-r--r--src/imports/location/qdeclarativegeocodemodel_p.h205
-rw-r--r--src/imports/location/qdeclarativegeomaneuver.cpp201
-rw-r--r--src/imports/location/qdeclarativegeomaneuver_p.h109
-rw-r--r--src/imports/location/qdeclarativegeomap.cpp1668
-rw-r--r--src/imports/location/qdeclarativegeomap_p.h228
-rw-r--r--src/imports/location/qdeclarativegeomapcopyrightsnotice.cpp168
-rw-r--r--src/imports/location/qdeclarativegeomapcopyrightsnotice_p.h92
-rw-r--r--src/imports/location/qdeclarativegeomapitembase.cpp263
-rw-r--r--src/imports/location/qdeclarativegeomapitembase_p.h116
-rw-r--r--src/imports/location/qdeclarativegeomapitemview.cpp540
-rw-r--r--src/imports/location/qdeclarativegeomapitemview_p.h150
-rw-r--r--src/imports/location/qdeclarativegeomapitemview_p_p.h87
-rw-r--r--src/imports/location/qdeclarativegeomapparameter.cpp125
-rw-r--r--src/imports/location/qdeclarativegeomapparameter_p.h89
-rw-r--r--src/imports/location/qdeclarativegeomapquickitem.cpp354
-rw-r--r--src/imports/location/qdeclarativegeomapquickitem_p.h114
-rw-r--r--src/imports/location/qdeclarativegeomaptype.cpp136
-rw-r--r--src/imports/location/qdeclarativegeomaptype_p.h103
-rw-r--r--src/imports/location/qdeclarativegeoroute.cpp276
-rw-r--r--src/imports/location/qdeclarativegeoroute_p.h105
-rw-r--r--src/imports/location/qdeclarativegeoroutemodel.cpp1308
-rw-r--r--src/imports/location/qdeclarativegeoroutemodel_p.h343
-rw-r--r--src/imports/location/qdeclarativegeoroutesegment.cpp164
-rw-r--r--src/imports/location/qdeclarativegeoroutesegment_p.h85
-rw-r--r--src/imports/location/qdeclarativegeoserviceprovider.cpp822
-rw-r--r--src/imports/location/qdeclarativegeoserviceprovider_p.h282
-rw-r--r--src/imports/location/qdeclarativepolygonmapitem.cpp718
-rw-r--r--src/imports/location/qdeclarativepolygonmapitem_p.h162
-rw-r--r--src/imports/location/qdeclarativepolylinemapitem.cpp1011
-rw-r--r--src/imports/location/qdeclarativepolylinemapitem_p.h191
-rw-r--r--src/imports/location/qdeclarativerectanglemapitem.cpp452
-rw-r--r--src/imports/location/qdeclarativerectanglemapitem_p.h131
-rw-r--r--src/imports/location/qdeclarativeroutemapitem.cpp145
-rw-r--r--src/imports/location/qdeclarativeroutemapitem_p.h91
-rw-r--r--src/imports/location/qgeomapitemgeometry.cpp140
-rw-r--r--src/imports/location/qgeomapitemgeometry_p.h148
-rw-r--r--src/imports/location/qquickgeomapgesturearea.cpp1288
-rw-r--r--src/imports/location/qquickgeomapgesturearea_p.h317
83 files changed, 35 insertions, 23138 deletions
diff --git a/src/imports/location/declarativeplaces/declarativeplaces.pri b/src/imports/location/declarativeplaces/declarativeplaces.pri
deleted file mode 100644
index b580ee4b..00000000
--- a/src/imports/location/declarativeplaces/declarativeplaces.pri
+++ /dev/null
@@ -1,50 +0,0 @@
-INCLUDEPATH *= $$PWD
-SOURCES += \
-#models
- declarativeplaces/qdeclarativeplacecontentmodel.cpp \
- declarativeplaces/qdeclarativesupportedcategoriesmodel.cpp \
- declarativeplaces/qdeclarativesearchsuggestionmodel.cpp \
- declarativeplaces/qdeclarativesearchresultmodel.cpp \
- declarativeplaces/qdeclarativereviewmodel.cpp \
- declarativeplaces/qdeclarativeplaceimagemodel.cpp \
- declarativeplaces/qdeclarativeplaceeditorialmodel.cpp \
-#data
- declarativeplaces/qdeclarativecontactdetail.cpp \
- declarativeplaces/qdeclarativecategory.cpp \
- declarativeplaces/qdeclarativeplace.cpp \
- declarativeplaces/qdeclarativeplaceattribute.cpp \
- declarativeplaces/qdeclarativeplaceicon.cpp \
- declarativeplaces/qdeclarativeplaceuser.cpp \
- declarativeplaces/qdeclarativeratings.cpp \
- declarativeplaces/qdeclarativesupplier.cpp \
- declarativeplaces/qdeclarativesearchmodelbase.cpp
-
-HEADERS += \
-#models
- declarativeplaces/qdeclarativeplacecontentmodel.h \
- declarativeplaces/qdeclarativesupportedcategoriesmodel_p.h \
- declarativeplaces/qdeclarativesearchsuggestionmodel_p.h \
- declarativeplaces/qdeclarativesearchresultmodel_p.h \
- declarativeplaces/qdeclarativereviewmodel_p.h \
- declarativeplaces/qdeclarativeplaceimagemodel_p.h \
- declarativeplaces/qdeclarativeplaceeditorialmodel.h \
-#data
- declarativeplaces/qdeclarativecontactdetail_p.h \
- declarativeplaces/qdeclarativecategory_p.h \
- declarativeplaces/qdeclarativeplace_p.h \
- declarativeplaces/qdeclarativeplaceattribute_p.h \
- declarativeplaces/qdeclarativeplaceicon_p.h \
- declarativeplaces/qdeclarativeplaceuser_p.h \
- declarativeplaces/qdeclarativeratings_p.h \
- declarativeplaces/qdeclarativesupplier_p.h \
- declarativeplaces/qdeclarativesearchmodelbase.h
-
-
-
-
-
-
-
-
-
-
diff --git a/src/imports/location/declarativeplaces/qdeclarativecategory.cpp b/src/imports/location/declarativeplaces/qdeclarativecategory.cpp
deleted file mode 100644
index ae496c1b..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativecategory.cpp
+++ /dev/null
@@ -1,456 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativecategory_p.h"
-#include "qdeclarativeplaceicon_p.h"
-#include "qdeclarativegeoserviceprovider_p.h"
-#include "error_messages.h"
-
-#include <QtQml/QQmlInfo>
-#include <QtLocation/QGeoServiceProvider>
-#include <QtLocation/QPlaceManager>
-#include <QCoreApplication>
-
-QT_USE_NAMESPACE
-
-/*!
- \qmltype Category
- \instantiates QDeclarativeCategory
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-places
- \ingroup qml-QtLocation5-places-data
-
- \since Qt Location 5.5
-
- \brief The Category type represents a category that a \l Place can be associated with.
-
- Categories are used to search for places based on the categories they are associated with. The
- list of available categories can be obtained from the \l CategoryModel. The
- \l PlaceSearchModel has a \l {PlaceSearchModel::categories}{categories} property that is used
- to limit the search results to places with the specified categories.
-
- If the \l Plugin supports it, categories can be created or removed. To create a new category
- construct a new Category object and set its properties, then invoke the \l save() method.
-
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/places.qml Category
- \dots 0
- \snippet declarative/places.qml Category save
-
- To remove a category ensure that the \l plugin and categoryId properties are set and call the
- \l remove() method.
-
- \sa CategoryModel
-*/
-
-QDeclarativeCategory::QDeclarativeCategory(QObject *parent)
-: QObject(parent), m_icon(0), m_plugin(0), m_reply(0), m_complete(false), m_status(Ready)
-{
-}
-
-QDeclarativeCategory::QDeclarativeCategory(const QPlaceCategory &category,
- QDeclarativeGeoServiceProvider *plugin,
- QObject *parent)
-: QObject(parent), m_category(category), m_icon(0), m_plugin(plugin), m_reply(0),
- m_complete(false), m_status(Ready)
-{
- setCategory(category);
-}
-
-QDeclarativeCategory::~QDeclarativeCategory() {}
-
-// From QQmlParserStatus
-void QDeclarativeCategory::componentComplete()
-{
- // delayed instantiation of QObject based properties.
- if (!m_icon) {
- m_icon = new QDeclarativePlaceIcon(this);
- m_icon->setPlugin(m_plugin);
- }
-
- m_complete = true;
-}
-
-/*!
- \qmlproperty Plugin Category::plugin
-
- This property holds the location based service to which the category belongs.
-*/
-void QDeclarativeCategory::setPlugin(QDeclarativeGeoServiceProvider *plugin)
-{
- if (m_plugin == plugin)
- return;
-
- m_plugin = plugin;
- if (m_complete)
- emit pluginChanged();
-
- if (m_icon && m_icon->parent() == this && !m_icon->plugin())
- m_icon->setPlugin(m_plugin);
-
- if (!m_plugin)
- return;
-
- if (m_plugin->isAttached()) {
- pluginReady();
- } else {
- connect(m_plugin, SIGNAL(attached()),
- this, SLOT(pluginReady()));
- }
-}
-
-QDeclarativeGeoServiceProvider *QDeclarativeCategory::plugin() const
-{
- return m_plugin;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeCategory::pluginReady()
-{
- QGeoServiceProvider *serviceProvider = m_plugin->sharedGeoServiceProvider();
- QPlaceManager *placeManager = serviceProvider->placeManager();
- if (!placeManager || serviceProvider->error() != QGeoServiceProvider::NoError) {
- setStatus(Error, QCoreApplication::translate(CONTEXT_NAME, PLUGIN_ERROR)
- .arg(m_plugin->name()).arg(serviceProvider->errorString()));
- return;
- }
-}
-
-
-/*!
- \qmlproperty QPlaceCategory Category::category
- \keyword Category::category
-
- For details on how to use this property to interface between C++ and QML see
- "\l {Category - QPlaceCategory} {Interfaces between C++ and QML Code}".
-*/
-void QDeclarativeCategory::setCategory(const QPlaceCategory &category)
-{
- QPlaceCategory previous = m_category;
- m_category = category;
-
- if (category.name() != previous.name())
- emit nameChanged();
-
- if (category.categoryId() != previous.categoryId())
- emit categoryIdChanged();
-
- if (m_icon && m_icon->parent() == this) {
- m_icon->setPlugin(m_plugin);
- m_icon->setIcon(m_category.icon());
- } else if (!m_icon || m_icon->parent() != this) {
- m_icon = new QDeclarativePlaceIcon(m_category.icon(), m_plugin, this);
- emit iconChanged();
- }
-}
-
-QPlaceCategory QDeclarativeCategory::category()
-{
- m_category.setIcon(m_icon ? m_icon->icon() : QPlaceIcon());
- return m_category;
-}
-
-/*!
- \qmlproperty string Category::categoryId
-
- This property holds the identifier of the category. The categoryId is a string which uniquely
- identifies this category within the categories \l plugin.
-*/
-void QDeclarativeCategory::setCategoryId(const QString &id)
-{
- if (m_category.categoryId() != id) {
- m_category.setCategoryId(id);
- emit categoryIdChanged();
- }
-}
-
-QString QDeclarativeCategory::categoryId() const
-{
- return m_category.categoryId();
-}
-
-/*!
- \qmlproperty string Category::name
-
- This property holds string based name of the category.
-*/
-void QDeclarativeCategory::setName(const QString &name)
-{
- if (m_category.name() != name) {
- m_category.setName(name);
- emit nameChanged();
- }
-}
-
-QString QDeclarativeCategory::name() const
-{
- return m_category.name();
-}
-
-/*!
- \qmlproperty enumeration Category::visibility
-
- This property holds the visibility of the category. It can be one of:
-
- \table
- \row
- \li Category.UnspecifiedVisibility
- \li The visibility of the category is unspecified. If saving a category, the
- plugin will automatically set a default visibility to the category saved in the backend.
- This default is dependent on the plugin implementation.
- \row
- \li Category.DeviceVisibility
- \li The category is limited to the current device. The category will not be transferred
- off of the device.
- \row
- \li Category.PrivateVisibility
- \li The category is private to the current user. The category may be transferred to an
- online service but is only ever visible to the current user.
- \row
- \li Category.PublicVisibility
- \li The category is public.
- \endtable
-
- Note that visibility does not affect how \l{Place}s associated with
- the category are displayed in the user-interface of an application
- on the device. Instead, it defines the sharing semantics of the
- category.
-*/
-QDeclarativeCategory::Visibility QDeclarativeCategory::visibility() const
-{
- return static_cast<QDeclarativeCategory::Visibility>(m_category.visibility());
-}
-
-void QDeclarativeCategory::setVisibility(Visibility visibility)
-{
- if (static_cast<QDeclarativeCategory::Visibility>(m_category.visibility()) == visibility)
- return;
-
- m_category.setVisibility(static_cast<QLocation::Visibility>(visibility));
- emit visibilityChanged();
-}
-
-/*!
- \qmlproperty PlaceIcon Category::icon
-
- This property holds the image source associated with the category. To display the icon you can use
- the \l Image type.
-*/
-QDeclarativePlaceIcon *QDeclarativeCategory::icon() const
-{
- return m_icon;
-}
-
-void QDeclarativeCategory::setIcon(QDeclarativePlaceIcon *icon)
-{
- if (m_icon == icon)
- return;
-
- if (m_icon && m_icon->parent() == this)
- delete m_icon;
-
- m_icon = icon;
- emit iconChanged();
-}
-
-/*!
- \qmlmethod string Category::errorString()
-
- Returns a string description of the error of the last operation.
- If the last operation completed successfully then the string is empty.
-*/
-QString QDeclarativeCategory::errorString() const
-{
- return m_errorString;
-}
-
-void QDeclarativeCategory::setStatus(Status status, const QString &errorString)
-{
- Status originalStatus = m_status;
- m_status = status;
- m_errorString = errorString;
-
- if (originalStatus != m_status)
- emit statusChanged();
-}
-
-/*!
- \qmlproperty enumeration Category::status
-
- This property holds the status of the category. It can be one of:
-
- \table
- \row
- \li Category.Ready
- \li No error occurred during the last operation, further operations may be performed on
- the category.
- \row
- \li Category.Saving
- \li The category is currently being saved, no other operations may be performed until the
- current operation completes.
- \row
- \li Category.Removing
- \li The category is currently being removed, no other operations can be performed until
- the current operation completes.
- \row
- \li Category.Error
- \li An error occurred during the last operation, further operations can still be
- performed on the category.
- \endtable
-*/
-QDeclarativeCategory::Status QDeclarativeCategory::status() const
-{
- return m_status;
-}
-
-/*!
- \qmlmethod void Category::save()
-
- This method saves the category to the backend service.
-*/
-void QDeclarativeCategory::save(const QString &parentId)
-{
- QPlaceManager *placeManager = manager();
- if (!placeManager)
- return;
-
- m_reply = placeManager->saveCategory(category(), parentId);
- connect(m_reply, SIGNAL(finished()), this, SLOT(replyFinished()));
- setStatus(QDeclarativeCategory::Saving);
-}
-
-/*!
- \qmlmethod void Category::remove()
-
- This method permanently removes the category from the backend service.
-*/
-void QDeclarativeCategory::remove()
-{
- QPlaceManager *placeManager = manager();
- if (!placeManager)
- return;
-
- m_reply = placeManager->removeCategory(m_category.categoryId());
- connect(m_reply, SIGNAL(finished()), this, SLOT(replyFinished()));
- setStatus(QDeclarativeCategory::Removing);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeCategory::replyFinished()
-{
- if (!m_reply)
- return;
-
- if (m_reply->error() == QPlaceReply::NoError) {
- switch (m_reply->type()) {
- case (QPlaceReply::IdReply) : {
- QPlaceIdReply *idReply = qobject_cast<QPlaceIdReply *>(m_reply);
-
- switch (idReply->operationType()) {
- case QPlaceIdReply::SaveCategory:
- setCategoryId(idReply->id());
- break;
- case QPlaceIdReply::RemoveCategory:
- setCategoryId(QString());
- break;
- default:
- //Other operation types shouldn't ever be received.
- break;
- }
- break;
- }
- default:
- //other types of replies shouldn't ever be received.
- break;
- }
-
- m_errorString.clear();
-
- m_reply->deleteLater();
- m_reply = 0;
-
- setStatus(QDeclarativeCategory::Ready);
- } else {
- QString errorString = m_reply->errorString();
-
- m_reply->deleteLater();
- m_reply = 0;
-
- setStatus(QDeclarativeCategory::Error, errorString);
- }
-}
-
-/*!
- \internal
- Helper function to return the manager, this manager is intended to be used to perform the next
- operation. Sets status to Error and an appropriate m_errorString if the manager cannot be
- obtained.
-*/
-QPlaceManager *QDeclarativeCategory::manager()
-{
- if (m_status != QDeclarativeCategory::Ready && m_status != QDeclarativeCategory::Error)
- return 0;
-
- if (m_reply) {
- m_reply->abort();
- m_reply->deleteLater();
- m_reply = 0;
- }
-
- if (!m_plugin) {
- setStatus(Error, QCoreApplication::translate(CONTEXT_NAME, PLUGIN_PROPERTY_NOT_SET));
- return 0;
- }
-
- QGeoServiceProvider *serviceProvider = m_plugin->sharedGeoServiceProvider();
- if (!serviceProvider) {
- setStatus(Error, QCoreApplication::translate(CONTEXT_NAME, PLUGIN_NOT_VALID));
- return 0;
- }
- QPlaceManager *placeManager = serviceProvider->placeManager();
- if (!placeManager) {
- setStatus(Error, QCoreApplication::translate(CONTEXT_NAME, PLUGIN_ERROR)
- .arg(m_plugin->name()).arg(serviceProvider->errorString()));
- return 0;
- }
-
- return placeManager;
-}
diff --git a/src/imports/location/declarativeplaces/qdeclarativecategory_p.h b/src/imports/location/declarativeplaces/qdeclarativecategory_p.h
deleted file mode 100644
index 63b255b4..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativecategory_p.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVECATEGORY_P_H
-#define QDECLARATIVECATEGORY_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 <QtQml/qqml.h>
-#include <QtQml/QQmlParserStatus>
-#include <QObject>
-
-#include <qplacecategory.h>
-
-#include "qdeclarativegeoserviceprovider_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativePlaceIcon;
-class QPlaceReply;
-class QPlaceManager;
-
-class QDeclarativeCategory : public QObject, public QQmlParserStatus
-{
- Q_OBJECT
-
- Q_ENUMS(Status Visibility)
-
-
- Q_PROPERTY(QPlaceCategory category READ category WRITE setCategory)
- Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged)
- Q_PROPERTY(QString categoryId READ categoryId WRITE setCategoryId NOTIFY categoryIdChanged)
- Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
- Q_PROPERTY(Visibility visibility READ visibility WRITE setVisibility NOTIFY visibilityChanged)
- Q_PROPERTY(QDeclarativePlaceIcon *icon READ icon WRITE setIcon NOTIFY iconChanged)
- Q_PROPERTY(Status status READ status NOTIFY statusChanged)
-
- Q_INTERFACES(QQmlParserStatus)
-
-public:
- explicit QDeclarativeCategory(QObject *parent = 0);
- QDeclarativeCategory(const QPlaceCategory &category, QDeclarativeGeoServiceProvider *plugin, QObject *parent = 0);
- ~QDeclarativeCategory();
-
- enum Visibility {
- UnspecifiedVisibility = QLocation::UnspecifiedVisibility,
- DeviceVisibility = QLocation::DeviceVisibility,
- PrivateVisibility = QLocation::PrivateVisibility,
- PublicVisibility = QLocation::PublicVisibility
- };
- enum Status {Ready, Saving, Removing, Error};
-
- //From QQmlParserStatus
- virtual void classBegin() {}
- virtual void componentComplete();
-
- void setPlugin(QDeclarativeGeoServiceProvider *plugin);
- QDeclarativeGeoServiceProvider *plugin() const;
-
- QPlaceCategory category();
- void setCategory(const QPlaceCategory &category);
-
- QString categoryId() const;
- void setCategoryId(const QString &catID);
- QString name() const;
- void setName(const QString &name);
-
- Visibility visibility() const;
- void setVisibility(Visibility visibility);
-
- QDeclarativePlaceIcon *icon() const;
- void setIcon(QDeclarativePlaceIcon *icon);
-
- Q_INVOKABLE QString errorString() const;
-
- Status status() const;
- void setStatus(Status status, const QString &errorString = QString());
-
- Q_INVOKABLE void save(const QString &parentId = QString());
- Q_INVOKABLE void remove();
-
-Q_SIGNALS:
- void pluginChanged();
- void categoryIdChanged();
- void nameChanged();
- void visibilityChanged();
- void iconChanged();
- void statusChanged();
-
-private Q_SLOTS:
- void replyFinished();
- void pluginReady();
-
-private:
- QPlaceManager *manager();
-
- QPlaceCategory m_category;
- QDeclarativePlaceIcon *m_icon;
- QDeclarativeGeoServiceProvider *m_plugin;
- QPlaceReply *m_reply;
- bool m_complete;
- Status m_status;
- QString m_errorString;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeCategory)
-
-#endif // QDECLARATIVECATEGORY_P_H
diff --git a/src/imports/location/declarativeplaces/qdeclarativecontactdetail.cpp b/src/imports/location/declarativeplaces/qdeclarativecontactdetail.cpp
deleted file mode 100644
index c16c2018..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativecontactdetail.cpp
+++ /dev/null
@@ -1,219 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativecontactdetail_p.h"
-
-/*!
- \qmltype ContactDetails
- \instantiates QDeclarativeContactDetails
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-places
- \ingroup qml-QtLocation5-places-data
- \since Qt Location 5.5
-
- \brief The ContactDetails type holds contact details for a \l Place.
-
- The ContactDetails type is a map of \l {QtLocation::ContactDetail}{ContactDetail} objects.
- To access contact details in the map use the \l keys() method to get the list of keys stored in
- the map and then use the \c {[]} operator to access the
- \l {QtLocation::ContactDetail}{ContactDetail} items.
-
- The following keys are defined in the API. \l Plugin implementations are free to define
- additional keys.
-
- \list
- \li phone
- \li fax
- \li email
- \li website
- \endlist
-
- ContactDetails instances are only ever used in the context of \l {Place}{Places}. It is not possible
- to create a ContactDetails instance directly or re-assign ContactDetails instances to \l {Place}{Places}.
- Modification of ContactDetails can only be accomplished via Javascript.
-
- \section1 Examples
-
- The following example shows how to access all \l {QtLocation::ContactDetail}{ContactDetails}
- and print them to the console:
-
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/places.qml ContactDetails read
-
- The returned list of contact details is an \l {QObjectList-based model}{object list} and so can be used directly as a data model. For example, the
- following demonstrates how to display a list of contact phone numbers in a list view:
-
- \snippet declarative/places.qml QtQuick import
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/places.qml ContactDetails phoneList
-
- The following example demonstrates how to assign a single phone number to a place in JavaScript:
- \snippet declarative/places.qml ContactDetails write single
-
- The following demonstrates how to assign multiple phone numbers to a place in JavaScript:
- \snippet declarative/places.qml ContactDetails write multiple
-*/
-
-/*!
- \qmlmethod variant ContactDetails::keys()
-
- Returns an array of contact detail keys currently stored in the map.
-*/
-QDeclarativeContactDetails::QDeclarativeContactDetails(QObject *parent)
- : QQmlPropertyMap(parent)
-{
-}
-
-QVariant QDeclarativeContactDetails::updateValue(const QString &, const QVariant &input)
-{
- if (input.userType() == QMetaType::QObjectStar) {
- QDeclarativeContactDetail *detail =
- qobject_cast<QDeclarativeContactDetail *>(input.value<QObject *>());
- if (detail) {
- QVariantList varList;
- varList.append(input);
- return varList;
- }
- }
-
- return input;
-}
-
-/*!
- \qmltype ContactDetail
- \instantiates QDeclarativeContactDetail
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-places
- \ingroup qml-QtLocation5-places-data
- \since Qt Location 5.5
-
- \brief The ContactDetail type holds a contact detail such as a phone number or a website
- address.
-
- The ContactDetail provides a single detail on how one could contact a \l Place. The
- ContactDetail consists of a \l label, which is a localized string describing the contact
- method, and a \l value representing the actual contact detail.
-
- \section1 Examples
-
- The following example demonstrates how to assign a single phone number to a place in JavaScript:
- \snippet declarative/places.qml ContactDetails write single
-
- The following demonstrates how to assign multiple phone numbers to a place in JavaScript:
- \snippet declarative/places.qml ContactDetails write multiple
-
- Note, due to limitations of the QQmlPropertyMap, it is not possible
- to declaratively specify the contact details in QML, it can only be accomplished
- via JavaScript.
-*/
-QDeclarativeContactDetail::QDeclarativeContactDetail(QObject *parent)
- : QObject(parent)
-{
-}
-
-QDeclarativeContactDetail::QDeclarativeContactDetail(const QPlaceContactDetail &src, QObject *parent)
- : QObject(parent), m_contactDetail(src)
-{
-}
-
-QDeclarativeContactDetail::~QDeclarativeContactDetail()
-{
-}
-
-/*!
- \qmlproperty QPlaceContactDetail QtLocation::ContactDetail::contactDetail
-
- For details on how to use this property to interface between C++ and QML see
- "\l {ContactDetail - QDeclarativeContactDetail} {Interfaces between C++ and QML Code}".
-*/
-void QDeclarativeContactDetail::setContactDetail(const QPlaceContactDetail &src)
-{
- QPlaceContactDetail prevContactDetail = m_contactDetail;
- m_contactDetail = src;
-
- if (m_contactDetail.label() != prevContactDetail.label())
- emit labelChanged();
- if (m_contactDetail.value() != prevContactDetail.value())
- emit valueChanged();
-}
-
-QPlaceContactDetail QDeclarativeContactDetail::contactDetail() const
-{
- return m_contactDetail;
-}
-
-/*!
- \qmlproperty string QtLocation::ContactDetail::label
-
- This property holds a label describing the contact detail.
-
- The label can potentially be localized. The language is dependent on the entity that sets it,
- typically this is the \l {Plugin}. The \l {Plugin::locales} property defines
- what language is used.
-*/
-QString QDeclarativeContactDetail::label() const
-{
- return m_contactDetail.label();
-}
-
-void QDeclarativeContactDetail::setLabel(const QString &label)
-{
- if (m_contactDetail.label() != label) {
- m_contactDetail.setLabel(label);
- emit labelChanged();
- }
-}
-
-/*!
- \qmlproperty string QtLocation::ContactDetail::value
-
- This property holds the value of the contact detail which may be a phone number, an email
- address, a website url and so on.
-*/
-QString QDeclarativeContactDetail::value() const
-{
- return m_contactDetail.value();
-}
-
-void QDeclarativeContactDetail::setValue(const QString &value)
-{
- if (m_contactDetail.value() != value) {
- m_contactDetail.setValue(value);
- emit valueChanged();
- }
-}
diff --git a/src/imports/location/declarativeplaces/qdeclarativecontactdetail_p.h b/src/imports/location/declarativeplaces/qdeclarativecontactdetail_p.h
deleted file mode 100644
index 9d404def..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativecontactdetail_p.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVECONTACTDETAIL_P_H
-#define QDECLARATIVECONTACTDETAIL_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 <QtCore/QObject>
-#include <QtLocation/QPlaceContactDetail>
-#include <QtQml/QQmlPropertyMap>
-#include <QtQml/qqml.h>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeContactDetails : public QQmlPropertyMap
-{
- Q_OBJECT
-
-public:
- explicit QDeclarativeContactDetails(QObject *parent = 0);
- virtual QVariant updateValue(const QString &key, const QVariant &input);
-};
-
-class QDeclarativeContactDetail : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QPlaceContactDetail contactDetail READ contactDetail WRITE setContactDetail)
- Q_PROPERTY(QString label READ label WRITE setLabel NOTIFY labelChanged)
- Q_PROPERTY(QString value READ value WRITE setValue NOTIFY valueChanged)
-
-public:
- explicit QDeclarativeContactDetail(QObject *parent = 0);
- explicit QDeclarativeContactDetail(const QPlaceContactDetail &src, QObject *parent = 0);
- ~QDeclarativeContactDetail();
-
- QPlaceContactDetail contactDetail() const;
- void setContactDetail(const QPlaceContactDetail &contactDetail);
-
- QString label() const;
- void setLabel(const QString &label);
-
- QString value() const;
- void setValue(const QString &value);
-
-Q_SIGNALS:
- void labelChanged();
- void valueChanged();
-
-private:
- QPlaceContactDetail m_contactDetail;
-
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeContactDetail)
-
-#endif
diff --git a/src/imports/location/declarativeplaces/qdeclarativeperiod_p.h b/src/imports/location/declarativeplaces/qdeclarativeperiod_p.h
deleted file mode 100644
index 3ded0109..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeperiod_p.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEPERIOD_P_H
-#define QDECLARATIVEPERIOD_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 <qplaceperiod.h>
-#include <QtQml/qqml.h>
-
-#include <QObject>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativePeriod : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QDate startDate READ startDate WRITE setStartDate NOTIFY startDateChanged)
- Q_PROPERTY(QTime startTime READ startTime WRITE setStartTime NOTIFY startTimeChanged)
- Q_PROPERTY(QDate endDate READ endDate WRITE setEndDate NOTIFY endDateChanged)
- Q_PROPERTY(QTime endTime READ endTime WRITE setEndTime NOTIFY endTimeChanged)
-
-public:
- explicit QDeclarativePeriod(QObject *parent = 0);
- explicit QDeclarativePeriod(const QPlacePeriod &period, QObject *parent = 0);
- ~QDeclarativePeriod();
-
- QPlacePeriod period() const;
- void setPeriod(const QPlacePeriod &period);
-
- QDate startDate() const;
- void setStartDate(const QDate &data);
- QTime startTime() const;
- void setStartTime(const QTime &data);
- QDate endDate() const;
- void setEndDate(const QDate &data);
- QTime endTime() const;
- void setEndTime(const QTime &data);
-
-Q_SIGNALS:
- void startDateChanged();
- void startTimeChanged();
- void endDateChanged();
- void endTimeChanged();
-
-private:
- QPlacePeriod m_period;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QT_PREPEND_NAMESPACE(QDeclarativePeriod));
-
-#endif // QDECLARATIVEPERIOD_P_H
diff --git a/src/imports/location/declarativeplaces/qdeclarativeplace.cpp b/src/imports/location/declarativeplaces/qdeclarativeplace.cpp
deleted file mode 100644
index 834737ff..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeplace.cpp
+++ /dev/null
@@ -1,1227 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativeplace_p.h"
-#include "qdeclarativecontactdetail_p.h"
-#include "qdeclarativegeoserviceprovider_p.h"
-#include "qdeclarativeplaceattribute_p.h"
-#include "qdeclarativeplaceicon_p.h"
-#include "error_messages.h"
-
-#include <QtCore/QCoreApplication>
-#include <QtCore/QMetaObject>
-#include <QtQml/QQmlEngine>
-#include <QtQml/QQmlInfo>
-#include <QtLocation/QGeoServiceProvider>
-#include <QtLocation/QPlaceManager>
-#include <QtLocation/QPlaceDetailsReply>
-#include <QtLocation/QPlaceReply>
-#include <QtLocation/QPlaceIdReply>
-#include <QtLocation/QPlaceContactDetail>
-
-QT_USE_NAMESPACE
-
-/*!
- \qmltype Place
- \instantiates QDeclarativePlace
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-places
- \ingroup qml-QtLocation5-places-data
- \since Qt Location 5.5
-
- \brief The Place type represents a location that is a position of interest.
-
- The Place type represents a physical location with additional metadata describing that
- location. Contrasted with \l Location, \l Address, and
- \l {coordinate} type which are used to describe where a location is.
- The basic properties of a Place are its \l name and \l location.
-
- Place objects are typically obtained from a search model and will generally only have their
- basic properties set. The \l detailsFetched property can be used to test if further property
- values need to be fetched from the \l Plugin. This can be done by invoking the \l getDetails()
- method. Progress of the fetching operation can be monitored with the \l status property, which
- will be set to Place.Fetching when the details are being fetched.
-
- The Place type has many properties holding information about the location. Details on how to
- contact the place are available from the \l contactDetails property. Convenience properties
- for obtaining the primary \l {primaryPhone}{phone}, \l {primaryFax}{fax},
- \l {primaryEmail}{email} and \l {primaryWebsite}{website} are also available.
-
- Each place is assigned zero or more \l categories. Categories are typically used when
- searching for a particular kind of place, such as a restaurant or hotel. Some places have a
- \l ratings object, which gives an indication of the quality of the place.
-
- Place metadata is provided by a \l supplier who may require that an \l attribution message be
- displayed to the user when the place details are viewed.
-
- Places have an associated \l icon which can be used to represent a place on a map or to
- decorate a delegate in a view.
-
- Places may have additional rich content associated with them. The currently supported rich
- content include editorial descriptions, reviews and images. These are exposed as a set of
- models for retrieving the content. Editorial descriptions of the place are available from the
- \l editorialModel property. Reviews of the place are available from the \l reviewModel
- property. A gallery of pictures of the place can be accessed using the \l imageModel property.
-
- Places may have additional attributes which are not covered in the formal API. The
- \l extendedAttributes property provides access to these. The type of extended attributes
- available is specific to each \l Plugin.
-
- A Place is almost always tied to a \l plugin. The \l plugin property must be set before it is
- possible to call \l save(), \l remove() or \l getDetails(). The \l reviewModel, \l imageModel
- and \l editorialModel are only valid then the \l plugin property is set.
-
- \section2 Saving a Place
-
- If the \l Plugin supports it, the Place type can be used to save a place. First create a new
- Place and set its properties:
-
- \snippet declarative/places.qml Place savePlace def
-
- Then invoke the \l save() method:
-
- \snippet declarative/places.qml Place savePlace
-
- The \l status property will change to Place.Saving and then to Place.Ready if the save was
- successful or to Place.Error if an error occurs.
-
- If the \l placeId property is set, the backend will update an existing place otherwise it will
- create a new place. On success the \l placeId property will be updated with the identifier of the newly
- saved place.
-
- \section3 Caveats
- \input place-caveats.qdocinc
-
- \section3 Saving Between Plugins
- When saving places between plugins, there are a few things to be aware of.
- Some fields of a place such as the id, categories and icons are plugin specific entities. For example
- the categories in one manager may not be recognised in another.
- Therefore trying to save a place directly from one plugin to another is not possible.
-
- It is generally recommended that saving across plugins be handled as saving \l {Favorites}{favorites}
- as explained in the Favorites section. However there is another approach which is to create a new place,
- set its (destination) plugin and then use the \l copyFrom() method to copy the details of the original place.
- Using \l copyFrom() only copies data that is supported by the destination plugin,
- plugin specific data such as the place identifier is not copied over. Once the copy is done,
- the place is in a suitable state to be saved.
-
- The following snippet provides an example of saving a place to a different plugin
- using the \l copyFrom method:
-
- \snippet declarative/places.qml Place save to different plugin
-
- \section2 Removing a Place
-
- To remove a place, ensure that a Place object with a valid \l placeId property exists and call
- its \l remove() method. The \l status property will change to Place.Removing and then to
- Place.Ready if the save was successful or to Place.Error if an error occurs.
-
- \section2 Favorites
- The Places API supports the concept of favorites. Favorites are generally implemented
- by using two plugins, the first plugin is typically a read-only source of places (origin plugin) and a second
- read/write plugin (destination plugin) is used to store places from the origin as favorites.
-
- Each Place has a favorite property which is intended to contain the corresponding place
- from the destination plugin (the place itself is sourced from the origin plugin). Because both the original
- place and favorite instances are available, the developer can choose which
- properties to show to the user. For example the favorite may have a modified name which should
- be displayed rather than the original name.
-
- \snippet declarative/places.qml Place favorite
-
- The following demonstrates how to save a new favorite instance. A call is made
- to create/initialize the favorite instance and then the instance is saved.
-
- \snippet declarative/places.qml Place saveFavorite
-
- The following demonstrates favorite removal:
-
- \snippet declarative/places.qml Place removeFavorite 1
- \dots
- \snippet declarative/places.qml Place removeFavorite 2
-
- The PlaceSearchModel has a favoritesPlugin property. If the property is set, any places found
- during a search are checked against the favoritesPlugin to see if there is a corresponding
- favorite place. If so, the favorite property of the Place is set, otherwise the favorite
- property is remains null.
-
- \sa PlaceSearchModel
-*/
-
-QDeclarativePlace::QDeclarativePlace(QObject *parent)
-: QObject(parent), m_location(0), m_ratings(0), m_supplier(0), m_icon(0),
- m_reviewModel(0), m_imageModel(0), m_editorialModel(0),
- m_extendedAttributes(new QQmlPropertyMap(this)),
- m_contactDetails(new QDeclarativeContactDetails(this)), m_reply(0), m_plugin(0),
- m_complete(false), m_favorite(0), m_status(QDeclarativePlace::Ready)
-{
- connect(m_contactDetails, SIGNAL(valueChanged(QString,QVariant)),
- this, SLOT(contactsModified(QString,QVariant)));
-
- setPlace(QPlace());
-}
-
-QDeclarativePlace::QDeclarativePlace(const QPlace &src, QDeclarativeGeoServiceProvider *plugin, QObject *parent)
-: QObject(parent), m_location(0), m_ratings(0), m_supplier(0), m_icon(0),
- m_reviewModel(0), m_imageModel(0), m_editorialModel(0),
- m_extendedAttributes(new QQmlPropertyMap(this)),
- m_contactDetails(new QDeclarativeContactDetails(this)), m_reply(0), m_plugin(plugin),
- m_complete(false), m_favorite(0), m_status(QDeclarativePlace::Ready)
-{
- Q_ASSERT(plugin);
-
- connect(m_contactDetails, SIGNAL(valueChanged(QString,QVariant)),
- this, SLOT(contactsModified(QString,QVariant)));
-
- setPlace(src);
-}
-
-QDeclarativePlace::~QDeclarativePlace()
-{
-}
-
-// From QQmlParserStatus
-void QDeclarativePlace::componentComplete()
-{
- m_complete = true;
-}
-
-/*!
- \qmlproperty Plugin Place::plugin
-
- This property holds the \l Plugin that provided this place which can be used to retrieve more information about the service.
-*/
-void QDeclarativePlace::setPlugin(QDeclarativeGeoServiceProvider *plugin)
-{
- if (m_plugin == plugin)
- return;
-
- m_plugin = plugin;
- if (m_complete)
- emit pluginChanged();
-
- if (m_plugin->isAttached()) {
- pluginReady();
- } else {
- connect(m_plugin, SIGNAL(attached()),
- this, SLOT(pluginReady()));
- }
-}
-
-void QDeclarativePlace::pluginReady()
-{
- QGeoServiceProvider *serviceProvider = m_plugin->sharedGeoServiceProvider();
- QPlaceManager *placeManager = serviceProvider->placeManager();
- if (!placeManager || serviceProvider->error() != QGeoServiceProvider::NoError) {
- setStatus(Error, QCoreApplication::translate(CONTEXT_NAME, PLUGIN_ERROR)
- .arg(m_plugin->name()).arg(serviceProvider->errorString()));
- return;
- }
-}
-
-QDeclarativeGeoServiceProvider *QDeclarativePlace::plugin() const
-{
- return m_plugin;
-}
-
-/*!
- \qmlproperty ReviewModel Place::reviewModel
-
- This property holds a model which can be used to retrieve reviews about the place.
-*/
-QDeclarativeReviewModel *QDeclarativePlace::reviewModel()
-{
- if (!m_reviewModel) {
- m_reviewModel = new QDeclarativeReviewModel(this);
- m_reviewModel->setPlace(this);
- }
-
- return m_reviewModel;
-}
-
-/*!
- \qmlproperty ImageModel Place::imageModel
-
- This property holds a model which can be used to retrieve images of the place.
-*/
-QDeclarativePlaceImageModel *QDeclarativePlace::imageModel()
-{
- if (!m_imageModel) {
- m_imageModel = new QDeclarativePlaceImageModel(this);
- m_imageModel->setPlace(this);
- }
-
- return m_imageModel;
-}
-
-/*!
- \qmlproperty EditorialModel Place::editorialModel
-
- This property holds a model which can be used to retrieve editorial descriptions of the place.
-*/
-QDeclarativePlaceEditorialModel *QDeclarativePlace::editorialModel()
-{
- if (!m_editorialModel) {
- m_editorialModel = new QDeclarativePlaceEditorialModel(this);
- m_editorialModel->setPlace(this);
- }
-
- return m_editorialModel;
-}
-
-/*!
- \qmlproperty QPlace Place::place
-
- For details on how to use this property to interface between C++ and QML see
- "\l {Place - QPlace} {Interfaces between C++ and QML Code}".
-*/
-void QDeclarativePlace::setPlace(const QPlace &src)
-{
- QPlace previous = m_src;
- m_src = src;
-
- if (previous.categories() != m_src.categories()) {
- synchronizeCategories();
- emit categoriesChanged();
- }
-
- if (m_location && m_location->parent() == this) {
- m_location->setLocation(m_src.location());
- } else if (!m_location || m_location->parent() != this) {
- m_location = new QDeclarativeGeoLocation(m_src.location(), this);
- emit locationChanged();
- }
-
- if (m_ratings && m_ratings->parent() == this) {
- m_ratings->setRatings(m_src.ratings());
- } else if (!m_ratings || m_ratings->parent() != this) {
- m_ratings = new QDeclarativeRatings(m_src.ratings(), this);
- emit ratingsChanged();
- }
-
- if (m_supplier && m_supplier->parent() == this) {
- m_supplier->setSupplier(m_src.supplier(), m_plugin);
- } else if (!m_supplier || m_supplier->parent() != this) {
- m_supplier = new QDeclarativeSupplier(m_src.supplier(), m_plugin, this);
- emit supplierChanged();
- }
-
- if (m_icon && m_icon->parent() == this) {
- m_icon->setPlugin(m_plugin);
- m_icon->setIcon(m_src.icon());
- } else if (!m_icon || m_icon->parent() != this) {
- m_icon = new QDeclarativePlaceIcon(m_src.icon(), m_plugin, this);
- emit iconChanged();
- }
-
- if (previous.name() != m_src.name()) {
- emit nameChanged();
- }
- if (previous.placeId() != m_src.placeId()) {
- emit placeIdChanged();
- }
- if (previous.attribution() != m_src.attribution()) {
- emit attributionChanged();
- }
- if (previous.detailsFetched() != m_src.detailsFetched()) {
- emit detailsFetchedChanged();
- }
- if (previous.primaryPhone() != m_src.primaryPhone()) {
- emit primaryPhoneChanged();
- }
- if (previous.primaryFax() != m_src.primaryFax()) {
- emit primaryFaxChanged();
- }
- if (previous.primaryEmail() != m_src.primaryEmail()) {
- emit primaryEmailChanged();
- }
- if (previous.primaryWebsite() != m_src.primaryWebsite()) {
- emit primaryWebsiteChanged();
- }
-
- if (m_reviewModel && m_src.totalContentCount(QPlaceContent::ReviewType) >= 0) {
- m_reviewModel->initializeCollection(m_src.totalContentCount(QPlaceContent::ReviewType),
- m_src.content(QPlaceContent::ReviewType));
- }
- if (m_imageModel && m_src.totalContentCount(QPlaceContent::ImageType) >= 0) {
- m_imageModel->initializeCollection(m_src.totalContentCount(QPlaceContent::ImageType),
- m_src.content(QPlaceContent::ImageType));
- }
- if (m_editorialModel && m_src.totalContentCount(QPlaceContent::EditorialType) >= 0) {
- m_editorialModel->initializeCollection(m_src.totalContentCount(QPlaceContent::EditorialType),
- m_src.content(QPlaceContent::EditorialType));
- }
-
- synchronizeExtendedAttributes();
- synchronizeContacts();
-}
-
-QPlace QDeclarativePlace::place()
-{
- // The following properties are not stored in m_src but instead stored in QDeclarative* objects
-
- QPlace result = m_src;
-
- // Categories
- QList<QPlaceCategory> categories;
- foreach (QDeclarativeCategory *value, m_categories)
- categories.append(value->category());
-
- result.setCategories(categories);
-
- // Location
- result.setLocation(m_location ? m_location->location() : QGeoLocation());
-
- // Rating
- result.setRatings(m_ratings ? m_ratings->ratings() : QPlaceRatings());
-
- // Supplier
- result.setSupplier(m_supplier ? m_supplier->supplier() : QPlaceSupplier());
-
- // Icon
- result.setIcon(m_icon ? m_icon->icon() : QPlaceIcon());
-
- //contact details
- QList<QPlaceContactDetail> cppDetails;
- foreach (const QString &key, m_contactDetails->keys()) {
- cppDetails.clear();
- if (m_contactDetails->value(key).type() == QVariant::List) {
- QVariantList detailsVarList = m_contactDetails->value(key).toList();
- foreach (const QVariant &detailVar, detailsVarList) {
- QDeclarativeContactDetail *detail = qobject_cast<QDeclarativeContactDetail *>(detailVar.value<QObject *>());
- if (detail)
- cppDetails.append(detail->contactDetail());
- }
- } else {
- QDeclarativeContactDetail *detail = qobject_cast<QDeclarativeContactDetail *>(m_contactDetails->value(key).value<QObject *>());
- if (detail)
- cppDetails.append(detail->contactDetail());
- }
- result.setContactDetails(key, cppDetails);
- }
-
- return result;
-}
-
-/*!
- \qmlproperty QtPositioning::Location Place::location
-
- This property holds the location of the place which can be used to retrieve the coordinate,
- address and the bounding box.
-*/
-void QDeclarativePlace::setLocation(QDeclarativeGeoLocation *location)
-{
- if (m_location == location)
- return;
-
- if (m_location && m_location->parent() == this)
- delete m_location;
-
- m_location = location;
- emit locationChanged();
-}
-
-QDeclarativeGeoLocation *QDeclarativePlace::location()
-{
- return m_location;
-}
-
-/*!
- \qmlproperty Ratings Place::ratings
-
- This property holds ratings of the place. The ratings provide an indication of the quality of a
- place.
-*/
-void QDeclarativePlace::setRatings(QDeclarativeRatings *rating)
-{
- if (m_ratings == rating)
- return;
-
- if (m_ratings && m_ratings->parent() == this)
- delete m_ratings;
-
- m_ratings = rating;
- emit ratingsChanged();
-}
-
-QDeclarativeRatings *QDeclarativePlace::ratings()
-{
-
- return m_ratings;
-}
-
-/*!
- \qmlproperty Supplier Place::supplier
-
- This property holds the supplier of the place data.
- The supplier is typically a business or organization that collected the data about the place.
-*/
-void QDeclarativePlace::setSupplier(QDeclarativeSupplier *supplier)
-{
- if (m_supplier == supplier)
- return;
-
- if (m_supplier && m_supplier->parent() == this)
- delete m_supplier;
-
- m_supplier = supplier;
- emit supplierChanged();
-}
-
-QDeclarativeSupplier *QDeclarativePlace::supplier() const
-{
- return m_supplier;
-}
-
-/*!
- \qmlproperty Icon Place::icon
-
- This property holds a graphical icon which can be used to represent the place.
-*/
-QDeclarativePlaceIcon *QDeclarativePlace::icon() const
-{
- return m_icon;
-}
-
-void QDeclarativePlace::setIcon(QDeclarativePlaceIcon *icon)
-{
- if (m_icon == icon)
- return;
-
- if (m_icon && m_icon->parent() == this)
- delete m_icon;
-
- m_icon = icon;
- emit iconChanged();
-}
-
-/*!
- \qmlproperty string Place::name
-
- This property holds the name of the place which can be used to represent the place.
-*/
-void QDeclarativePlace::setName(const QString &name)
-{
- if (m_src.name() != name) {
- m_src.setName(name);
- emit nameChanged();
- }
-}
-
-QString QDeclarativePlace::name() const
-{
- return m_src.name();
-}
-
-/*!
- \qmlproperty string Place::placeId
-
- This property holds the unique identifier of the place. The place identifier is only meaningful to the
- \l Plugin that generated it and is not transferable between \l {Plugin}{Plugins}. The place id
- is not guaranteed to be universally unique, but unique within the \l Plugin that generated it.
-
- If only the place identifier is known, all other place data can fetched from the \l Plugin.
-
- \snippet declarative/places.qml Place placeId
-*/
-void QDeclarativePlace::setPlaceId(const QString &placeId)
-{
- if (m_src.placeId() != placeId) {
- m_src.setPlaceId(placeId);
- emit placeIdChanged();
- }
-}
-
-QString QDeclarativePlace::placeId() const
-{
- return m_src.placeId();
-}
-
-/*!
- \qmlproperty string Place::attribution
-
- This property holds a rich text attribution string for the place.
- Some providers may require that the attribution be shown to the user
- whenever a place is displayed. The contents of this property should
- be shown to the user if it is not empty.
-*/
-void QDeclarativePlace::setAttribution(const QString &attribution)
-{
- if (m_src.attribution() != attribution) {
- m_src.setAttribution(attribution);
- emit attributionChanged();
- }
-}
-
-QString QDeclarativePlace::attribution() const
-{
- return m_src.attribution();
-}
-
-/*!
- \qmlproperty bool Place::detailsFetched
-
- This property indicates whether the details of the place have been fetched. If this property
- is false, the place details have not yet been fetched. Fetching can be done by invoking the
- \l getDetails() method.
-
- \sa getDetails()
-*/
-bool QDeclarativePlace::detailsFetched() const
-{
- return m_src.detailsFetched();
-}
-
-/*!
- \qmlproperty enumeration Place::status
-
- This property holds the status of the place. It can be one of:
-
- \table
- \row
- \li Place.Ready
- \li No error occurred during the last operation, further operations may be performed on
- the place.
- \row
- \li Place.Saving
- \li The place is currently being saved, no other operation may be performed until
- complete.
- \row
- \li Place.Fetching
- \li The place details are currently being fetched, no other operations may be performed
- until complete.
- \row
- \li Place.Removing
- \li The place is currently being removed, no other operations can be performed until
- complete.
- \row
- \li Place.Error
- \li An error occurred during the last operation, further operations can still be
- performed on the place.
- \endtable
-
- The status of a place can be checked by connecting the status property
- to a handler function, and then have the handler function process the change
- in status.
-
- \snippet declarative/places.qml Place checkStatus
- \dots
- \snippet declarative/places.qml Place checkStatus handler
-
-*/
-void QDeclarativePlace::setStatus(Status status, const QString &errorString)
-{
- Status originalStatus = m_status;
- m_status = status;
- m_errorString = errorString;
-
- if (originalStatus != m_status)
- emit statusChanged();
-}
-
-QDeclarativePlace::Status QDeclarativePlace::status() const
-{
- return m_status;
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlace::finished()
-{
- if (!m_reply)
- return;
-
- if (m_reply->error() == QPlaceReply::NoError) {
- switch (m_reply->type()) {
- case (QPlaceReply::IdReply) : {
- QPlaceIdReply *idReply = qobject_cast<QPlaceIdReply *>(m_reply);
-
- switch (idReply->operationType()) {
- case QPlaceIdReply::SavePlace:
- setPlaceId(idReply->id());
- break;
- case QPlaceIdReply::RemovePlace:
- break;
- default:
- //Other operation types shouldn't ever be received.
- break;
- }
- break;
- }
- case (QPlaceReply::DetailsReply): {
- QPlaceDetailsReply *detailsReply = qobject_cast<QPlaceDetailsReply *>(m_reply);
- setPlace(detailsReply->place());
- break;
- }
- default:
- //other types of replies shouldn't ever be received.
- break;
- }
-
- m_errorString.clear();
-
- m_reply->deleteLater();
- m_reply = 0;
-
- setStatus(QDeclarativePlace::Ready);
- } else {
- QString errorString = m_reply->errorString();
-
- m_reply->deleteLater();
- m_reply = 0;
-
- setStatus(QDeclarativePlace::Error, errorString);
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlace::contactsModified(const QString &key, const QVariant &)
-{
- primarySignalsEmission(key);
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlace::cleanupDeletedCategories()
-{
- foreach (QDeclarativeCategory * category, m_categoriesToBeDeleted) {
- if (category->parent() == this)
- delete category;
- }
- m_categoriesToBeDeleted.clear();
-}
-
-/*!
- \qmlmethod void Place::getDetails()
-
- This method starts fetching place details.
-
- The \l status property will change to Place.Fetching while the fetch is in progress. On
- success the object's properties will be updated, \l status will be set to Place.Ready and
- \l detailsFetched will be set to true. On error \l status will be set to Place.Error. The
- \l errorString() method can be used to get the details of the error.
-*/
-void QDeclarativePlace::getDetails()
-{
- QPlaceManager *placeManager = manager();
- if (!placeManager)
- return;
-
- m_reply = placeManager->getPlaceDetails(placeId());
- connect(m_reply, SIGNAL(finished()), this, SLOT(finished()));
- setStatus(QDeclarativePlace::Fetching);
-}
-
-/*!
- \qmlmethod void Place::save()
-
- This method performs a save operation on the place.
-
- The \l status property will change to Place.Saving while the save operation is in progress. On
- success the \l status will be set to Place.Ready. On error \l status will be set to Place.Error.
- The \l errorString() method can be used to get the details of the error.
-
- If the \l placeId property was previously empty, it will be assigned a valid value automatically
- during a successful save operation.
-
- Note that a \l PlaceSearchModel will call Place::getDetails on any place that it detects an update
- on. A consequence of this is that whenever a Place from a \l PlaceSearchModel is successfully saved,
- it will be followed by a fetch of place details, leading to a sequence of state changes
- of \c Saving, \c Ready, \c Fetching, \c Ready.
-
-*/
-void QDeclarativePlace::save()
-{
- QPlaceManager *placeManager = manager();
- if (!placeManager)
- return;
-
- m_reply = placeManager->savePlace(place());
- connect(m_reply, SIGNAL(finished()), this, SLOT(finished()));
- setStatus(QDeclarativePlace::Saving);
-}
-
-/*!
- \qmlmethod void Place::remove()
-
- This method performs a remove operation on the place.
-
- The \l status property will change to Place.Removing while the save operation is in progress.
- On success \l status will be set to Place.Ready. On error \l status will be set to
- Place.Error. The \l errorString() method can be used to get the details of the error.
-*/
-void QDeclarativePlace::remove()
-{
- QPlaceManager *placeManager = manager();
- if (!placeManager)
- return;
-
- m_reply = placeManager->removePlace(place().placeId());
- connect(m_reply, SIGNAL(finished()), this, SLOT(finished()));
- setStatus(QDeclarativePlace::Removing);
-}
-
-/*!
- \qmlmethod string Place::errorString()
-
- Returns a string description of the error of the last operation. If the last operation
- completed successfully then the string is empty.
-*/
-QString QDeclarativePlace::errorString() const
-{
- return m_errorString;
-}
-
-/*!
- \qmlproperty string Place::primaryPhone
-
- This property holds the primary phone number of the place. If no "phone" contact detail is
- defined for this place, this property will be an empty string. It is equivalent to:
-
-
- \snippet declarative/places.qml Place primaryPhone
-*/
-QString QDeclarativePlace::primaryPhone() const
-{
- return primaryValue(QPlaceContactDetail::Phone);
-}
-
-/*!
- \qmlproperty string Place::primaryFax
-
- This property holds the primary fax number of the place. If no "fax" contact detail is
- defined for this place this property will be an empty string. It is equivalent to
-
- \snippet declarative/places.qml Place primaryFax
-*/
-QString QDeclarativePlace::primaryFax() const
-{
- return primaryValue(QPlaceContactDetail::Fax);
-}
-
-/*!
- \qmlproperty string Place::primaryEmail
-
- This property holds the primary email address of the place. If no "email" contact detail is
- defined for this place this property will be an empty string. It is equivalent to
-
- \snippet declarative/places.qml Place primaryEmail
-*/
-QString QDeclarativePlace::primaryEmail() const
-{
- return primaryValue(QPlaceContactDetail::Email);
-}
-
-/*!
- \qmlproperty string Place::primaryWebsite
-
- This property holds the primary website url of the place. If no "website" contact detail is
- defined for this place this property will be an empty string. It is equivalent to
-
- \snippet declarative/places.qml Place primaryWebsite
-*/
-
-QUrl QDeclarativePlace::primaryWebsite() const
-{
- return QUrl(primaryValue(QPlaceContactDetail::Website));
-}
-
-/*!
- \qmlproperty ExtendedAttributes Place::extendedAttributes
-
- This property holds the extended attributes of a place. Extended attributes are additional
- information about a place not covered by the place's properties.
-*/
-QQmlPropertyMap *QDeclarativePlace::extendedAttributes() const
-{
- return m_extendedAttributes;
-}
-
-/*!
- \qmlproperty ContactDetails Place::contactDetails
-
- This property holds the contact information for this place, for example a phone number or
- a website URL. This property is a map of \l ContactDetail objects.
-*/
-QDeclarativeContactDetails *QDeclarativePlace::contactDetails() const
-{
- return m_contactDetails;
-}
-
-/*!
- \qmlproperty list<Category> Place::categories
-
- This property holds the list of categories this place is a member of. The categories that can
- be assigned to a place are specific to each \l plugin.
-*/
-QQmlListProperty<QDeclarativeCategory> QDeclarativePlace::categories()
-{
- return QQmlListProperty<QDeclarativeCategory>(this,
- 0, // opaque data parameter
- category_append,
- category_count,
- category_at,
- category_clear);
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlace::category_append(QQmlListProperty<QDeclarativeCategory> *prop,
- QDeclarativeCategory *value)
-{
- QDeclarativePlace *object = static_cast<QDeclarativePlace *>(prop->object);
-
- if (object->m_categoriesToBeDeleted.contains(value))
- object->m_categoriesToBeDeleted.removeAll(value);
-
- if (!object->m_categories.contains(value)) {
- object->m_categories.append(value);
- QList<QPlaceCategory> list = object->m_src.categories();
- list.append(value->category());
- object->m_src.setCategories(list);
-
- emit object->categoriesChanged();
- }
-}
-
-/*!
- \internal
-*/
-int QDeclarativePlace::category_count(QQmlListProperty<QDeclarativeCategory> *prop)
-{
- return static_cast<QDeclarativePlace *>(prop->object)->m_categories.count();
-}
-
-/*!
- \internal
-*/
-QDeclarativeCategory *QDeclarativePlace::category_at(QQmlListProperty<QDeclarativeCategory> *prop,
- int index)
-{
- QDeclarativePlace *object = static_cast<QDeclarativePlace *>(prop->object);
- QDeclarativeCategory *res = NULL;
- if (object->m_categories.count() > index && index > -1) {
- res = object->m_categories[index];
- }
- return res;
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlace::category_clear(QQmlListProperty<QDeclarativeCategory> *prop)
-{
- QDeclarativePlace *object = static_cast<QDeclarativePlace *>(prop->object);
- if (object->m_categories.isEmpty())
- return;
-
- for (int i = 0; i < object->m_categories.count(); ++i) {
- if (object->m_categories.at(i)->parent() == object)
- object->m_categoriesToBeDeleted.append(object->m_categories.at(i));
- }
-
- object->m_categories.clear();
- object->m_src.setCategories(QList<QPlaceCategory>());
- emit object->categoriesChanged();
- QMetaObject::invokeMethod(object, "cleanupDeletedCategories", Qt::QueuedConnection);
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlace::synchronizeCategories()
-{
- qDeleteAll(m_categories);
- m_categories.clear();
- foreach (const QPlaceCategory &value, m_src.categories()) {
- QDeclarativeCategory *declarativeValue = new QDeclarativeCategory(value, m_plugin, this);
- m_categories.append(declarativeValue);
- }
-}
-
-/*!
- \qmlproperty enumeration Place::visibility
-
- This property holds the visibility of the place. It can be one of:
-
- \table
- \row
- \li Place.UnspecifiedVisibility
- \li The visibility of the place is unspecified, the default visibility of the \l Plugin
- will be used.
- \row
- \li Place.DeviceVisibility
- \li The place is limited to the current device. The place will not be transferred off
- of the device.
- \row
- \li Place.PrivateVisibility
- \li The place is private to the current user. The place may be transferred to an online
- service but is only ever visible to the current user.
- \row
- \li Place.PublicVisibility
- \li The place is public.
- \endtable
-
- Note that visibility does not affect how the place is displayed
- in the user-interface of an application on the device. Instead,
- it defines the sharing semantics of the place.
-*/
-QDeclarativePlace::Visibility QDeclarativePlace::visibility() const
-{
- return static_cast<QDeclarativePlace::Visibility>(m_src.visibility());
-}
-
-void QDeclarativePlace::setVisibility(Visibility visibility)
-{
- if (static_cast<QDeclarativePlace::Visibility>(m_src.visibility()) == visibility)
- return;
-
- m_src.setVisibility(static_cast<QLocation::Visibility>(visibility));
- emit visibilityChanged();
-}
-
-/*!
- \qmlproperty Place Place::favorite
-
- This property holds the favorite instance of a place.
-*/
-QDeclarativePlace *QDeclarativePlace::favorite() const
-{
- return m_favorite;
-}
-
-void QDeclarativePlace::setFavorite(QDeclarativePlace *favorite)
-{
-
- if (m_favorite == favorite)
- return;
-
- if (m_favorite && m_favorite->parent() == this)
- delete m_favorite;
-
- m_favorite = favorite;
- emit favoriteChanged();
-}
-
-/*!
- \qmlmethod void Place::copyFrom(Place original)
-
- Copies data from an \a original place into this place. Only data that is supported by this
- place's plugin is copied over and plugin specific data such as place identifier is not copied over.
-*/
-void QDeclarativePlace::copyFrom(QDeclarativePlace *original)
-{
- QPlaceManager *placeManager = manager();
- if (!placeManager)
- return;
-
- setPlace(placeManager->compatiblePlace(original->place()));
-}
-
-/*!
- \qmlmethod void Place::initializeFavorite(Plugin destinationPlugin)
-
- Creates a favorite instance for the place which is to be saved into the
- \a destination plugin. This method does nothing if the favorite property is
- not null.
-*/
-void QDeclarativePlace::initializeFavorite(QDeclarativeGeoServiceProvider *plugin)
-{
- if (m_favorite == 0) {
- QDeclarativePlace *place = new QDeclarativePlace(this);
- place->setPlugin(plugin);
- place->copyFrom(this);
- setFavorite(place);
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlace::synchronizeExtendedAttributes()
-{
- QStringList keys = m_extendedAttributes->keys();
- foreach (const QString &key, keys)
- m_extendedAttributes->clear(key);
-
- QStringList attributeTypes = m_src.extendedAttributeTypes();
- foreach (const QString &attributeType, attributeTypes) {
- m_extendedAttributes->insert(attributeType,
- qVariantFromValue(new QDeclarativePlaceAttribute(m_src.extendedAttribute(attributeType))));
- }
-
- emit extendedAttributesChanged();
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlace::synchronizeContacts()
-{
- //clear out contact data
- foreach (const QString &contactType, m_contactDetails->keys()) {
- QList<QVariant> contacts = m_contactDetails->value(contactType).toList();
- foreach (const QVariant &var, contacts) {
- QObject *obj = var.value<QObject *>();
- if (obj->parent() == this)
- delete obj;
- }
- m_contactDetails->insert(contactType, QVariantList());
- }
-
- //insert new contact data from source place
- foreach (const QString &contactType, m_src.contactTypes()) {
- QList<QPlaceContactDetail> sourceContacts = m_src.contactDetails(contactType);
- QVariantList declContacts;
- foreach (const QPlaceContactDetail &sourceContact, sourceContacts) {
- QDeclarativeContactDetail *declContact = new QDeclarativeContactDetail(this);
- declContact->setContactDetail(sourceContact);
- declContacts.append(QVariant::fromValue(qobject_cast<QObject *>(declContact)));
- }
- m_contactDetails->insert(contactType, declContacts);
- }
- primarySignalsEmission();
-}
-
-/*!
- \internal
- Helper function to emit the signals for the primary___()
- fields. It is expected that the values of the primary___()
- functions have already been modified to new values.
-*/
-void QDeclarativePlace::primarySignalsEmission(const QString &type)
-{
- if (type.isEmpty() || type == QPlaceContactDetail::Phone) {
- if (m_prevPrimaryPhone != primaryPhone()) {
- m_prevPrimaryPhone = primaryPhone();
- emit primaryPhoneChanged();
- }
- if (!type.isEmpty())
- return;
- }
-
- if (type.isEmpty() || type == QPlaceContactDetail::Email) {
- if (m_prevPrimaryEmail != primaryEmail()) {
- m_prevPrimaryEmail = primaryEmail();
- emit primaryEmailChanged();
- }
- if (!type.isEmpty())
- return;
- }
-
- if (type.isEmpty() || type == QPlaceContactDetail::Website) {
- if (m_prevPrimaryWebsite != primaryWebsite()) {
- m_prevPrimaryWebsite = primaryWebsite();
- emit primaryWebsiteChanged();
- }
- if (!type.isEmpty())
- return;
- }
-
- if (type.isEmpty() || type == QPlaceContactDetail::Fax) {
- if (m_prevPrimaryFax != primaryFax()) {
- m_prevPrimaryFax = primaryFax();
- emit primaryFaxChanged();
- }
- }
-}
-
-/*!
- \internal
- Helper function to return the manager, this manager is intended to be used
- to perform the next operation. If a an operation is currently underway
- then return a null pointer.
-*/
-QPlaceManager *QDeclarativePlace::manager()
-{
- if (m_status != QDeclarativePlace::Ready && m_status != QDeclarativePlace::Error)
- return 0;
-
- if (m_reply) {
- m_reply->abort();
- m_reply->deleteLater();
- m_reply = 0;
- }
-
- if (!m_plugin) {
- qmlWarning(this) << QStringLiteral("Plugin is not assigned to place.");
- return 0;
- }
-
- QGeoServiceProvider *serviceProvider = m_plugin->sharedGeoServiceProvider();
- if (!serviceProvider)
- return 0;
-
- QPlaceManager *placeManager = serviceProvider->placeManager();
-
- if (!placeManager) {
- setStatus(Error, QCoreApplication::translate(CONTEXT_NAME, PLUGIN_ERROR)
- .arg(m_plugin->name()).arg(serviceProvider->errorString()));
- return 0;
- }
-
- return placeManager;
-}
-
-/*!
- \internal
-*/
-QString QDeclarativePlace::primaryValue(const QString &contactType) const
-{
- QVariant value = m_contactDetails->value(contactType);
- if (value.userType() == qMetaTypeId<QJSValue>())
- value = value.value<QJSValue>().toVariant();
-
- if (value.userType() == QVariant::List) {
- QVariantList detailList = m_contactDetails->value(contactType).toList();
- if (!detailList.isEmpty()) {
- QDeclarativeContactDetail *primaryDetail = qobject_cast<QDeclarativeContactDetail *>(detailList.at(0).value<QObject *>());
- if (primaryDetail)
- return primaryDetail->value();
- }
- } else if (value.userType() == QMetaType::QObjectStar) {
- QDeclarativeContactDetail *primaryDetail = qobject_cast<QDeclarativeContactDetail *>(m_contactDetails->value(contactType).value<QObject *>());
- if (primaryDetail)
- return primaryDetail->value();
- }
-
- return QString();
-}
diff --git a/src/imports/location/declarativeplaces/qdeclarativeplace_p.h b/src/imports/location/declarativeplaces/qdeclarativeplace_p.h
deleted file mode 100644
index 78557091..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeplace_p.h
+++ /dev/null
@@ -1,261 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEPLACE_P_H
-#define QDECLARATIVEPLACE_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 <QtCore/QObject>
-#include <QtQml/QQmlListProperty>
-#include <QtQml/QQmlParserStatus>
-#include <QtQml/QQmlPropertyMap>
-#include <QtLocation/QPlace>
-
-#include "qdeclarativegeolocation_p.h"
-#include "qdeclarativecategory_p.h"
-#include "qdeclarativecontactdetail_p.h"
-#include "qdeclarativesupplier_p.h"
-#include "qdeclarativeratings_p.h"
-#include "qdeclarativereviewmodel_p.h"
-#include "qdeclarativeplaceimagemodel_p.h"
-#include "qdeclarativeplaceeditorialmodel.h"
-
-QT_BEGIN_NAMESPACE
-
-class QPlaceReply;
-
-class QPlaceManager;
-class QDeclarativePlaceIcon;
-
-class QDeclarativePlace : public QObject, public QQmlParserStatus
-{
- Q_OBJECT
-
- Q_ENUMS(Status Visibility)
-
- Q_PROPERTY(QPlace place READ place WRITE setPlace)
- Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged)
- Q_PROPERTY(QQmlListProperty<QDeclarativeCategory> categories READ categories NOTIFY categoriesChanged)
- Q_PROPERTY(QDeclarativeGeoLocation *location READ location WRITE setLocation NOTIFY locationChanged)
- Q_PROPERTY(QDeclarativeRatings *ratings READ ratings WRITE setRatings NOTIFY ratingsChanged)
- Q_PROPERTY(QDeclarativeSupplier *supplier READ supplier WRITE setSupplier NOTIFY supplierChanged)
- Q_PROPERTY(QDeclarativePlaceIcon *icon READ icon WRITE setIcon NOTIFY iconChanged)
- Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
- Q_PROPERTY(QString placeId READ placeId WRITE setPlaceId NOTIFY placeIdChanged)
- Q_PROPERTY(QString attribution READ attribution WRITE setAttribution NOTIFY attributionChanged)
-
- Q_PROPERTY(QDeclarativeReviewModel *reviewModel READ reviewModel NOTIFY reviewModelChanged)
- Q_PROPERTY(QDeclarativePlaceImageModel *imageModel READ imageModel NOTIFY imageModelChanged)
- Q_PROPERTY(QDeclarativePlaceEditorialModel *editorialModel READ editorialModel NOTIFY editorialModelChanged)
-
- Q_PROPERTY(QObject *extendedAttributes READ extendedAttributes NOTIFY extendedAttributesChanged)
- Q_PROPERTY(QObject *contactDetails READ contactDetails NOTIFY contactDetailsChanged)
- Q_PROPERTY(bool detailsFetched READ detailsFetched NOTIFY detailsFetchedChanged)
- Q_PROPERTY(Status status READ status NOTIFY statusChanged)
-
- Q_PROPERTY(QString primaryPhone READ primaryPhone NOTIFY primaryPhoneChanged)
- Q_PROPERTY(QString primaryFax READ primaryFax NOTIFY primaryFaxChanged)
- Q_PROPERTY(QString primaryEmail READ primaryEmail NOTIFY primaryEmailChanged)
- Q_PROPERTY(QUrl primaryWebsite READ primaryWebsite NOTIFY primaryWebsiteChanged)
-
- Q_PROPERTY(Visibility visibility READ visibility WRITE setVisibility NOTIFY visibilityChanged)
- Q_PROPERTY(QDeclarativePlace *favorite READ favorite WRITE setFavorite NOTIFY favoriteChanged)
-
- Q_INTERFACES(QQmlParserStatus)
-
-public:
- explicit QDeclarativePlace(QObject *parent = 0);
- QDeclarativePlace(const QPlace &src, QDeclarativeGeoServiceProvider *plugin, QObject *parent = 0);
- ~QDeclarativePlace();
-
- enum Status {Ready, Saving, Fetching, Removing, Error};
- enum Visibility {
- UnspecifiedVisibility = QLocation::UnspecifiedVisibility,
- DeviceVisibility = QLocation::DeviceVisibility,
- PrivateVisibility = QLocation::PrivateVisibility,
- PublicVisibility = QLocation::PublicVisibility
- };
-
- //From QQmlParserStatus
- virtual void classBegin() {}
- virtual void componentComplete();
-
- void setPlugin(QDeclarativeGeoServiceProvider *plugin);
- QDeclarativeGeoServiceProvider *plugin() const;
-
- QDeclarativeReviewModel *reviewModel();
- QDeclarativePlaceImageModel *imageModel();
- QDeclarativePlaceEditorialModel *editorialModel();
-
- QPlace place();
- void setPlace(const QPlace &src);
-
- QQmlListProperty<QDeclarativeCategory> categories();
- static void category_append(QQmlListProperty<QDeclarativeCategory> *prop,
- QDeclarativeCategory *value);
- static int category_count(QQmlListProperty<QDeclarativeCategory> *prop);
- static QDeclarativeCategory *category_at(QQmlListProperty<QDeclarativeCategory> *prop, int index);
- static void category_clear(QQmlListProperty<QDeclarativeCategory> *prop);
-
- QDeclarativeGeoLocation *location();
- void setLocation(QDeclarativeGeoLocation *location);
- QDeclarativeRatings *ratings();
- void setRatings(QDeclarativeRatings *ratings);
- QDeclarativeSupplier *supplier() const;
- void setSupplier(QDeclarativeSupplier *supplier);
- QDeclarativePlaceIcon *icon() const;
- void setIcon(QDeclarativePlaceIcon *icon);
- QString name() const;
- void setName(const QString &name);
- QString placeId() const;
- void setPlaceId(const QString &placeId);
- QString attribution() const;
- void setAttribution(const QString &attribution);
- bool detailsFetched() const;
-
- Status status() const;
- void setStatus(Status status, const QString &errorString = QString());
-
- Q_INVOKABLE void getDetails();
- Q_INVOKABLE void save();
- Q_INVOKABLE void remove();
- Q_INVOKABLE QString errorString() const;
-
- QString primaryPhone() const;
- QString primaryFax() const;
- QString primaryEmail() const;
- QUrl primaryWebsite() const;
-
- QQmlPropertyMap *extendedAttributes() const;
-
- QDeclarativeContactDetails *contactDetails() const;
-
- Visibility visibility() const;
- void setVisibility(Visibility visibility);
-
- QDeclarativePlace *favorite() const;
- void setFavorite(QDeclarativePlace *favorite);
-
- Q_INVOKABLE void copyFrom(QDeclarativePlace *original);
- Q_INVOKABLE void initializeFavorite(QDeclarativeGeoServiceProvider *plugin);
-
-Q_SIGNALS:
- void pluginChanged();
- void categoriesChanged();
- void locationChanged();
- void ratingsChanged();
- void supplierChanged();
- void iconChanged();
- void nameChanged();
- void placeIdChanged();
- void attributionChanged();
- void detailsFetchedChanged();
- void reviewModelChanged();
- void imageModelChanged();
- void editorialModelChanged();
-
- void primaryPhoneChanged();
- void primaryFaxChanged();
- void primaryEmailChanged();
- void primaryWebsiteChanged();
-
- void extendedAttributesChanged();
- void contactDetailsChanged();
- void statusChanged();
- void visibilityChanged();
- void favoriteChanged();
-
-private Q_SLOTS:
- void finished();
- void contactsModified(const QString &, const QVariant &);
- void pluginReady();
- void cleanupDeletedCategories();
-private:
- void synchronizeCategories();
- void synchronizeExtendedAttributes();
- void synchronizeContacts();
- void primarySignalsEmission(const QString &type = QString());
- QString primaryValue(const QString &contactType) const;
-
-private:
- QPlaceManager *manager();
-
- QList<QDeclarativeCategory *> m_categories;
- QDeclarativeGeoLocation *m_location;
- QDeclarativeRatings *m_ratings;
- QDeclarativeSupplier *m_supplier;
- QDeclarativePlaceIcon *m_icon;
- QDeclarativeReviewModel *m_reviewModel;
- QDeclarativePlaceImageModel *m_imageModel;
- QDeclarativePlaceEditorialModel *m_editorialModel;
- QQmlPropertyMap *m_extendedAttributes;
- QDeclarativeContactDetails *m_contactDetails;
-
- QPlace m_src;
-
- QPlaceReply *m_reply;
-
- QDeclarativeGeoServiceProvider *m_plugin;
- bool m_complete;
-
- QString m_prevPrimaryPhone;
- QString m_prevPrimaryEmail;
- QString m_prevPrimaryFax;
- QUrl m_prevPrimaryWebsite;
-
- QDeclarativePlace *m_favorite;
-
- Status m_status;
- QString m_errorString;
-
- QList<QDeclarativeCategory *>m_categoriesToBeDeleted;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativePlace)
-
-#endif // QDECLARATIVEPLACE_P_H
diff --git a/src/imports/location/declarativeplaces/qdeclarativeplaceattribute.cpp b/src/imports/location/declarativeplaces/qdeclarativeplaceattribute.cpp
deleted file mode 100644
index 9a04d383..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeplaceattribute.cpp
+++ /dev/null
@@ -1,217 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativeplaceattribute_p.h"
-
-/*!
- \qmltype ExtendedAttributes
- \instantiates QQmlPropertyMap
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-places
- \ingroup qml-QtLocation5-places-data
- \since Qt Location 5.5
-
- \brief The ExtendedAttributes type holds additional data about a \l Place.
-
- The ExtendedAttributes type is a map of \l {PlaceAttribute}{PlaceAttributes}. To access
- attributes in the map use the \l keys() method to get the list of keys stored in the map and
- use the \c {[]} operator to access the \l PlaceAttribute items.
-
- The following are standard keys that are defined by the API. \l Plugin
- implementations are free to define additional keys. Custom keys should
- be qualified by a unique prefix to avoid clashes.
- \table
- \header
- \li key
- \li description
- \row
- \li openingHours
- \li The trading hours of the place
- \row
- \li payment
- \li The types of payment the place accepts, for example visa, mastercard.
- \row
- \li x_provider
- \li The name of the provider that a place is sourced from
- \row
- \li x_id_<provider> (for example x_id_here)
- \li An alternative identifier which identifies the place from the
- perspective of the specified provider.
- \endtable
-
- Some plugins may not support attributes at all, others may only support a
- certain set, others still may support a dynamically changing set of attributes
- over time or even allow attributes to be arbitrarily defined by the client
- application. The attributes could also vary on a place by place basis,
- for example one place may have opening hours while another does not.
- Consult the \l {Plugin References and Parameters}{plugin
- references} for details.
-
- Some attributes may not be intended to be readable by end users, the label field
- of such attributes is empty to indicate this fact.
-
- \note ExtendedAttributes instances are only ever used in the context of \l {Place}s. It is not
- possible to create an ExtendedAttributes instance directly or re-assign a \l {Place}'s
- ExtendedAttributes property. Modification of ExtendedAttributes can only be accomplished
- via Javascript.
-
- The following example shows how to access all \l {PlaceAttribute}{PlaceAttributes} and print
- them to the console:
-
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/places.qml ExtendedAttributes read
-
- The following example shows how to assign and modify an attribute:
- \snippet declarative/places.qml ExtendedAttributes write
-
- \sa PlaceAttribute, QQmlPropertyMap
-*/
-
-/*!
- \qmlmethod variant ExtendedAttributes::keys()
-
- Returns an array of place attribute keys currently stored in the map.
-*/
-
-/*!
- \qmlsignal void ExtendedAttributes::valueChanged(string key, variant value)
-
- This signal is emitted when the set of attributes changes. \a key is the key
- corresponding to the \a value that was changed.
-
- The corresponding handler is \c onValueChanged.
-*/
-
-/*!
- \qmltype PlaceAttribute
- \instantiates QDeclarativePlaceAttribute
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-places
- \ingroup qml-QtLocation5-places-data
- \since Qt Location 5.5
-
- \brief The PlaceAttribute type holds generic place attribute information.
-
- A place attribute stores an additional piece of information about a \l Place that is not
- otherwise exposed through the \l Place type. A PlaceAttribute is a textual piece of data,
- accessible through the \l text property, and a \l label. Both the \l text and \l label
- properties are intended to be displayed to the user. PlaceAttributes are stored in an
- \l ExtendedAttributes map with a unique key.
-
- The following example shows how to display all attributes in a list:
-
- \snippet declarative/places.qml QtQuick import
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/places.qml ExtendedAttributes
-
- The following example shows how to assign and modify an attribute:
- \snippet declarative/places.qml ExtendedAttributes write
-*/
-
-QDeclarativePlaceAttribute::QDeclarativePlaceAttribute(QObject *parent)
- : QObject(parent)
-{
-}
-
-QDeclarativePlaceAttribute::QDeclarativePlaceAttribute(const QPlaceAttribute &src, QObject *parent)
- : QObject(parent),m_attribute(src)
-{
-}
-
-QDeclarativePlaceAttribute::~QDeclarativePlaceAttribute()
-{
-}
-
-/*!
- \qmlproperty QPlaceAttribute PlaceAttribute::attribute
-
- For details on how to use this property to interface between C++ and QML see
- "\l {PlaceAttribute - QPlaceAttribute} {Interfaces between C++ and QML Code}".
-*/
-void QDeclarativePlaceAttribute::setAttribute(const QPlaceAttribute &src)
-{
- QPlaceAttribute prevAttribute = m_attribute;
- m_attribute = src;
-
- if (m_attribute.label() != prevAttribute.label())
- emit labelChanged();
- if (m_attribute.text() != prevAttribute.text())
- emit textChanged();
-}
-
-QPlaceAttribute QDeclarativePlaceAttribute::attribute() const
-{
- return m_attribute;
-}
-
-/*!
- \qmlproperty string PlaceAttribute::label
-
- This property holds the attribute label which is a user visible string
- describing the attribute.
-*/
-void QDeclarativePlaceAttribute::setLabel(const QString &label)
-{
- if (m_attribute.label() != label) {
- m_attribute.setLabel(label);
- emit labelChanged();
- }
-}
-
-QString QDeclarativePlaceAttribute::label() const
-{
- return m_attribute.label();
-}
-
-/*!
- \qmlproperty string PlaceAttribute::text
-
- This property holds the attribute text which can be used to show additional information about the place.
-*/
-void QDeclarativePlaceAttribute::setText(const QString &text)
-{
- if (m_attribute.text() != text) {
- m_attribute.setText(text);
- emit textChanged();
- }
-}
-
-QString QDeclarativePlaceAttribute::text() const
-{
- return m_attribute.text();
-}
diff --git a/src/imports/location/declarativeplaces/qdeclarativeplaceattribute_p.h b/src/imports/location/declarativeplaces/qdeclarativeplaceattribute_p.h
deleted file mode 100644
index f1c873c3..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeplaceattribute_p.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEPLACEATTRIBUTE_P_H
-#define QDECLARATIVEPLACEATTRIBUTE_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 <QtQml/qqml.h>
-#include <QString>
-
-#include <qplaceattribute.h>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativePlaceAttribute : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QPlaceAttribute attribute READ attribute WRITE setAttribute)
- Q_PROPERTY(QString label READ label WRITE setLabel NOTIFY labelChanged)
- Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
-
-public:
- explicit QDeclarativePlaceAttribute(QObject *parent = 0);
- explicit QDeclarativePlaceAttribute(const QPlaceAttribute &src, QObject *parent = 0);
- ~QDeclarativePlaceAttribute();
-
- QPlaceAttribute attribute() const;
- void setAttribute(const QPlaceAttribute &place);
-
- QString text() const;
- void setText(const QString &text);
-
-
- QString label() const;
- void setLabel(const QString &label);
-
-Q_SIGNALS:
- void labelChanged();
- void textChanged();
-
-private:
- QPlaceAttribute m_attribute;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativePlaceAttribute)
-
-#endif
diff --git a/src/imports/location/declarativeplaces/qdeclarativeplacecontentmodel.cpp b/src/imports/location/declarativeplaces/qdeclarativeplacecontentmodel.cpp
deleted file mode 100644
index b031e0c9..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeplacecontentmodel.cpp
+++ /dev/null
@@ -1,397 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativeplacecontentmodel.h"
-#include "qdeclarativeplace_p.h"
-#include "qdeclarativegeoserviceprovider_p.h"
-#include "qdeclarativeplaceuser_p.h"
-#include "error_messages.h"
-
-#include <QtQml/QQmlInfo>
-#include <QtLocation/QGeoServiceProvider>
-#include <QtLocation/QPlaceManager>
-#include <QtLocation/QPlaceContentRequest>
-
-QT_BEGIN_NAMESPACE
-
-QDeclarativePlaceContentModel::QDeclarativePlaceContentModel(QPlaceContent::Type type,
- QObject *parent)
-: QAbstractListModel(parent), m_place(0), m_type(type), m_batchSize(1), m_contentCount(-1),
- m_reply(0), m_complete(false)
-{
-}
-
-QDeclarativePlaceContentModel::~QDeclarativePlaceContentModel()
-{
-}
-
-/*!
- \internal
-*/
-QDeclarativePlace *QDeclarativePlaceContentModel::place() const
-{
- return m_place;
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlaceContentModel::setPlace(QDeclarativePlace *place)
-{
- if (m_place != place) {
- beginResetModel();
-
- int initialCount = m_contentCount;
- clearData();
- m_place = place;
- endResetModel();
-
- emit placeChanged();
- if (initialCount != -1)
- emit totalCountChanged();
-
- fetchMore(QModelIndex());
- }
-}
-
-/*!
- \internal
-*/
-int QDeclarativePlaceContentModel::batchSize() const
-{
- return m_batchSize;
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlaceContentModel::setBatchSize(int batchSize)
-{
- if (m_batchSize != batchSize) {
- m_batchSize = batchSize;
- emit batchSizeChanged();
- }
-}
-
-/*!
- \internal
-*/
-int QDeclarativePlaceContentModel::totalCount() const
-{
- return m_contentCount;
-}
-
-/*!
- \internal
- Clears the model data but does not reset it.
-*/
-void QDeclarativePlaceContentModel::clearData()
-{
- qDeleteAll(m_users);
- m_users.clear();
-
- qDeleteAll(m_suppliers);
- m_suppliers.clear();
-
- m_content.clear();
-
- m_contentCount = -1;
-
- if (m_reply) {
- m_reply->abort();
- m_reply->deleteLater();
- m_reply = 0;
- }
-
- m_nextRequest.clear();
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlaceContentModel::initializeCollection(int totalCount, const QPlaceContent::Collection &collection)
-{
- beginResetModel();
-
- int initialCount = m_contentCount;
- clearData();
-
- QMapIterator<int, QPlaceContent> i(collection);
- while (i.hasNext()) {
- i.next();
-
- const QPlaceContent &content = i.value();
- if (content.type() != m_type)
- continue;
-
- m_content.insert(i.key(), content);
- if (!m_suppliers.contains(content.supplier().supplierId())) {
- m_suppliers.insert(content.supplier().supplierId(),
- new QDeclarativeSupplier(content.supplier(), m_place->plugin(), this));
- }
- if (!m_users.contains(content.user().userId())) {
- m_users.insert(content.user().userId(),
- new QDeclarativePlaceUser(content.user(), this));
- }
- }
-
- m_contentCount = totalCount;
-
- if (initialCount != totalCount)
- emit totalCountChanged();
-
- endResetModel();
-}
-
-/*!
- \internal
-*/
-int QDeclarativePlaceContentModel::rowCount(const QModelIndex &parent) const
-{
- if (parent.isValid())
- return 0;
-
- return m_content.count();
-}
-
-/*!
- \internal
-*/
-QVariant QDeclarativePlaceContentModel::data(const QModelIndex &index, int role) const
-{
- if (!index.isValid())
- return QVariant();
-
- if (index.row() >= rowCount(index.parent()) || index.row() < 0)
- return QVariant();
-
- const QPlaceContent &content = m_content.value(index.row());
-
- switch (role) {
- case SupplierRole:
- return QVariant::fromValue(static_cast<QObject *>(m_suppliers.value(content.supplier().supplierId())));
- case PlaceUserRole:
- return QVariant::fromValue(static_cast<QObject *>(m_users.value(content.user().userId())));
- case AttributionRole:
- return content.attribution();
- default:
- return QVariant();
- }
-}
-
-QHash<int, QByteArray> QDeclarativePlaceContentModel::roleNames() const
-{
- QHash<int, QByteArray> roles = QAbstractListModel::roleNames();
- roles.insert(SupplierRole, "supplier");
- roles.insert(PlaceUserRole, "user");
- roles.insert(AttributionRole, "attribution");
- return roles;
-}
-
-/*!
- \internal
-*/
-bool QDeclarativePlaceContentModel::canFetchMore(const QModelIndex &parent) const
-{
- if (parent.isValid())
- return false;
-
- if (!m_place)
- return false;
-
- if (m_contentCount == -1)
- return true;
-
- return m_content.count() != m_contentCount;
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlaceContentModel::fetchMore(const QModelIndex &parent)
-{
- if (parent.isValid())
- return;
-
- if (!m_place)
- return;
-
- if (m_reply)
- return;
-
- if (!m_place->plugin())
- return;
-
- QDeclarativeGeoServiceProvider *plugin = m_place->plugin();
-
- QGeoServiceProvider *serviceProvider = plugin->sharedGeoServiceProvider();
- if (!serviceProvider)
- return;
-
- QPlaceManager *placeManager = serviceProvider->placeManager();
- if (!placeManager)
- return;
-
- if (m_nextRequest == QPlaceContentRequest()) {
- QPlaceContentRequest request;
- request.setContentType(m_type);
- request.setPlaceId(m_place->place().placeId());
- request.setLimit(m_batchSize);
-
- m_reply = placeManager->getPlaceContent(request);
- } else {
- m_reply = placeManager->getPlaceContent(m_nextRequest);
- }
-
- connect(m_reply, SIGNAL(finished()), this, SLOT(fetchFinished()), Qt::QueuedConnection);
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlaceContentModel::classBegin()
-{
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlaceContentModel::componentComplete()
-{
- m_complete = true;
- fetchMore(QModelIndex());
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlaceContentModel::fetchFinished()
-{
- if (!m_reply)
- return;
-
- QPlaceContentReply *reply = m_reply;
- m_reply = 0;
-
- m_nextRequest = reply->nextPageRequest();
-
- if (m_contentCount != reply->totalCount()) {
- m_contentCount = reply->totalCount();
- emit totalCountChanged();
- }
-
- if (!reply->content().isEmpty()) {
- QPlaceContent::Collection contents = reply->content();
-
- //find out which indexes are new and which ones have changed.
- QMapIterator<int, QPlaceContent> it(contents);
- QList<int> changedIndexes;
- QList<int> newIndexes;
- while (it.hasNext()) {
- it.next();
- if (!m_content.contains(it.key()))
- newIndexes.append(it.key());
- else if (it.value() != m_content.value(it.key()))
- changedIndexes.append(it.key());
- }
-
- //insert new indexes in blocks where within each
- //block, the indexes are consecutive.
- QListIterator<int> newIndexesIter(newIndexes);
- int startIndex = -1;
- while (newIndexesIter.hasNext()) {
- int currentIndex = newIndexesIter.next();
- if (startIndex == -1)
- startIndex = currentIndex;
-
- if (!newIndexesIter.hasNext() || (newIndexesIter.hasNext() && (newIndexesIter.peekNext() > (currentIndex + 1)))) {
- beginInsertRows(QModelIndex(),startIndex,currentIndex);
- for (int i = startIndex; i <= currentIndex; ++i) {
- const QPlaceContent &content = contents.value(i);
-
- m_content.insert(i, content);
- if (!m_suppliers.contains(content.supplier().supplierId())) {
- m_suppliers.insert(content.supplier().supplierId(),
- new QDeclarativeSupplier(content.supplier(), m_place->plugin(), this));
- }
- if (!m_users.contains(content.user().userId())) {
- m_users.insert(content.user().userId(),
- new QDeclarativePlaceUser(content.user(), this));
- }
- }
- endInsertRows();
- startIndex = -1;
- }
- }
-
- //modify changed indexes in blocks where within each
- //block, the indexes are consecutive.
- startIndex = -1;
- QListIterator<int> changedIndexesIter(changedIndexes);
- while (changedIndexesIter.hasNext()) {
- int currentIndex = changedIndexesIter.next();
- if (startIndex == -1)
- startIndex = currentIndex;
-
- if (!changedIndexesIter.hasNext() || (changedIndexesIter.hasNext() && changedIndexesIter.peekNext() > (currentIndex + 1))) {
- for (int i = startIndex; i <= currentIndex; ++i) {
- const QPlaceContent &content = contents.value(i);
- m_content.insert(i, content);
- if (!m_suppliers.contains(content.supplier().supplierId())) {
- m_suppliers.insert(content.supplier().supplierId(),
- new QDeclarativeSupplier(content.supplier(), m_place->plugin(), this));
- }
- if (!m_users.contains(content.user().userId())) {
- m_users.insert(content.user().userId(),
- new QDeclarativePlaceUser(content.user(), this));
- }
- }
- emit dataChanged(index(startIndex),index(currentIndex));
- startIndex = -1;
- }
- }
-
- // The fetch didn't add any new content and we haven't fetched all content yet. This is
- // likely due to the model being prepopulated by Place::getDetails(). Keep fetching more
- // data until new content is available.
- if (newIndexes.isEmpty() && m_content.count() != m_contentCount)
- fetchMore(QModelIndex());
- }
-
- reply->deleteLater();
-}
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/declarativeplaces/qdeclarativeplacecontentmodel.h b/src/imports/location/declarativeplaces/qdeclarativeplacecontentmodel.h
deleted file mode 100644
index d839b92d..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeplacecontentmodel.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEPLACECONTENTMODEL_H
-#define QDECLARATIVEPLACECONTENTMODEL_H
-
-#include <QtCore/QAbstractListModel>
-#include <QtQml/QQmlParserStatus>
-#include <QtLocation/QPlaceContent>
-#include <QtLocation/QPlaceContentReply>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativePlace;
-class QDeclarativeGeoServiceProvider;
-class QGeoServiceProvider;
-class QDeclarativeSupplier;
-class QDeclarativePlaceUser;
-
-class QDeclarativePlaceContentModel : public QAbstractListModel, public QQmlParserStatus
-{
- Q_OBJECT
-
- Q_PROPERTY(QDeclarativePlace *place READ place WRITE setPlace NOTIFY placeChanged)
- Q_PROPERTY(int batchSize READ batchSize WRITE setBatchSize NOTIFY batchSizeChanged)
- Q_PROPERTY(int totalCount READ totalCount NOTIFY totalCountChanged)
-
- Q_INTERFACES(QQmlParserStatus)
-
-public:
- explicit QDeclarativePlaceContentModel(QPlaceContent::Type type, QObject *parent = 0);
- ~QDeclarativePlaceContentModel();
-
- QDeclarativePlace *place() const;
- void setPlace(QDeclarativePlace *place);
-
- int batchSize() const;
- void setBatchSize(int batchSize);
-
- int totalCount() const;
-
- void clearData();
-
- void initializeCollection(int totalCount, const QPlaceContent::Collection &collection);
-
- // from QAbstractListModel
- int rowCount(const QModelIndex &parent) const;
- QVariant data(const QModelIndex &index, int role) const;
- QHash<int, QByteArray> roleNames() const;
-
- enum Roles {
- SupplierRole = Qt::UserRole,
- PlaceUserRole,
- AttributionRole,
- UserRole //indicator for next conten type specific role
- };
-
- bool canFetchMore(const QModelIndex &parent) const;
- void fetchMore(const QModelIndex &parent);
-
- // from QQmlParserStatus
- void classBegin();
- void componentComplete();
-
-Q_SIGNALS:
- void placeChanged();
- void batchSizeChanged();
- void totalCountChanged();
-
-private Q_SLOTS:
- void fetchFinished();
-
-protected:
- QPlaceContent::Collection m_content;
- QMap<QString, QDeclarativeSupplier *> m_suppliers;
- QMap<QString, QDeclarativePlaceUser *>m_users;
-
-private:
- QDeclarativePlace *m_place;
- QPlaceContent::Type m_type;
- int m_batchSize;
- int m_contentCount;
-
- QPlaceContentReply *m_reply;
- QPlaceContentRequest m_nextRequest;
-
- bool m_complete;
-};
-
-QT_END_NAMESPACE
-
-#endif // QDECLARATIVEPLACECONTENTMODEL_H
diff --git a/src/imports/location/declarativeplaces/qdeclarativeplaceeditorialmodel.cpp b/src/imports/location/declarativeplaces/qdeclarativeplaceeditorialmodel.cpp
deleted file mode 100644
index ebde46c0..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeplaceeditorialmodel.cpp
+++ /dev/null
@@ -1,169 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativeplaceeditorialmodel.h"
-
-#include <QtCore/QUrl>
-#include <QtLocation/QPlaceEditorial>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype EditorialModel
- \instantiates QDeclarativePlaceEditorialModel
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-places
- \ingroup qml-QtLocation5-places-models
- \since Qt Location 5.5
-
- \brief The EditorialModel type provides a model of place editorials.
-
- The EditorialModel is a read-only model used to fetch editorials related to a \l Place.
- Binding a \l Place via \l EditorialModel::place initiates an initial fetch of editorials.
- The model performs fetches incrementally and is intended to be used in conjunction
- with a View such as a \l ListView. When the View reaches the last of the editorials
- currently in the model, a fetch is performed to retrieve more if they are available.
- The View is automatically updated as the editorials are received. The number of
- editorials which are fetched at a time is specified by the \l batchSize property.
- The total number of editorials available can be accessed via the \l totalCount property.
-
- The model returns data for the following roles:
-
- \table
- \header
- \li Role
- \li Type
- \li Description
- \row
- \li text
- \li string
- \li The editorial's textual description of the place. It can be either rich (HTML based) text or plain text
- depending upon the provider.
- \row
- \li title
- \li string
- \li The title of the editorial.
- \row
- \li language
- \li string
- \li The language that the editorial is written in.
- \row
- \li supplier
- \li \l Supplier
- \li The supplier of the editorial.
- \row
- \li user
- \li \l {QtLocation::User}{User}
- \li The user who contributed the editorial.
- \row
- \li attribution
- \li string
- \li Attribution text which must be displayed when displaying the editorial.
- \endtable
-
- \section1 Example
-
- The following example shows how to display editorials for a place:
-
- \snippet declarative/places.qml QtQuick import
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/places.qml EditorialModel
-
-*/
-
-/*!
- \qmlproperty Place EditorialModel::place
-
- This property holds the Place that the editorials are for.
-*/
-
-/*!
- \qmlproperty int EditorialModel::batchSize
-
- This property holds the batch size to use when fetching more editorials items.
-*/
-
-/*!
- \qmlproperty int EditorialModel::totalCount
-
- This property holds the total number of editorial items for the place.
-*/
-
-QDeclarativePlaceEditorialModel::QDeclarativePlaceEditorialModel(QObject *parent)
-: QDeclarativePlaceContentModel(QPlaceContent::EditorialType, parent)
-{
-}
-
-QDeclarativePlaceEditorialModel::~QDeclarativePlaceEditorialModel()
-{
-}
-
-/*!
- \internal
-*/
-QVariant QDeclarativePlaceEditorialModel::data(const QModelIndex &index, int role) const
-{
- if (!index.isValid())
- return QVariant();
-
- if (index.row() >= rowCount(index.parent()) || index.row() < 0)
- return QVariant();
-
- const QPlaceEditorial &description = m_content.value(index.row());
-
- switch (role) {
- case TextRole:
- return description.text();
- case TitleRole:
- return description.title();
- case LanguageRole:
- return description.language();
- }
-
- return QDeclarativePlaceContentModel::data(index, role);
-}
-
-QHash<int, QByteArray> QDeclarativePlaceEditorialModel::roleNames() const
-{
- QHash<int, QByteArray> roleNames = QDeclarativePlaceContentModel::roleNames();
- roleNames.insert(TextRole, "text");
- roleNames.insert(TitleRole, "title");
- roleNames.insert(LanguageRole, "language");
- return roleNames;
-}
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/declarativeplaces/qdeclarativeplaceeditorialmodel.h b/src/imports/location/declarativeplaces/qdeclarativeplaceeditorialmodel.h
deleted file mode 100644
index eb2faf66..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeplaceeditorialmodel.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEPLACEEDITORIALMODEL_H
-#define QDECLARATIVEPLACEEDITORIALMODEL_H
-
-#include "qdeclarativeplacecontentmodel.h"
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativePlaceEditorialModel : public QDeclarativePlaceContentModel
-{
- Q_OBJECT
-
-public:
- explicit QDeclarativePlaceEditorialModel(QObject *parent = 0);
- ~QDeclarativePlaceEditorialModel();
-
- QVariant data(const QModelIndex &index, int role) const;
- QHash<int, QByteArray> roleNames() const;
-
- enum Roles {
- TextRole = UserRole,
- TitleRole,
- LanguageRole
- };
-};
-
-QT_END_NAMESPACE
-
-#endif // QDECLARATIVEPLACEEDITORIALMODEL_H
diff --git a/src/imports/location/declarativeplaces/qdeclarativeplaceicon.cpp b/src/imports/location/declarativeplaces/qdeclarativeplaceicon.cpp
deleted file mode 100644
index 1d3fb2c1..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeplaceicon.cpp
+++ /dev/null
@@ -1,248 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativeplaceicon_p.h"
-#include "error_messages.h"
-
-#include <QtLocation/QGeoServiceProvider>
-#include <QtLocation/QPlaceManager>
-#include <QtQml/QQmlInfo>
-#include <QCoreApplication>
-
-QT_USE_NAMESPACE
-
-/*!
- \qmltype Icon
- \instantiates QDeclarativePlaceIcon
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-places
- \ingroup qml-QtLocation5-places-data
- \since Qt Location 5.5
-
- \brief The Icon type represents an icon image source which can have multiple sizes.
-
- The Icon type can be used in conjunction with an \l Image type to display an icon.
- The \l url() function is used to construct an icon URL of a requested size,
- the icon which most closely matches the requested size is returned.
-
- The Icon type also has a parameters map which is a set of key value pairs. The precise
- keys to use depend on the
- \l {Qt Location#Plugin References and Parameters}{plugin} being used.
- The parameters map is used by the \l Plugin to determine which URL to return.
-
- In the case where an icon can only possibly have one image URL, the
- parameter key of \c "singleUrl" can be used with a QUrl value. Any Icon with this
- parameter will always return the specified URL regardless of the requested icon
- size and not defer to any Plugin.
-
- The following code shows how to display a 64x64 pixel icon:
-
- \snippet declarative/places.qml QtQuick import
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/places.qml Icon
-
- Alternatively, a default sized icon can be specified like so:
- \snippet declarative/places.qml Icon default
-*/
-
-QDeclarativePlaceIcon::QDeclarativePlaceIcon(QObject *parent)
-: QObject(parent), m_plugin(0), m_parameters(new QQmlPropertyMap(this))
-{
-}
-
-QDeclarativePlaceIcon::QDeclarativePlaceIcon(const QPlaceIcon &icon, QDeclarativeGeoServiceProvider *plugin, QObject *parent)
-: QObject(parent), m_parameters(new QQmlPropertyMap(this))
-{
- if (icon.isEmpty())
- m_plugin = 0;
- else
- m_plugin = plugin;
-
- initParameters(icon.parameters());
-}
-
-QDeclarativePlaceIcon::~QDeclarativePlaceIcon()
-{
-}
-
-/*!
- \qmlproperty QPlaceIcon Icon::icon
-
- For details on how to use this property to interface between C++ and QML see
- "\l {Icon - QPlaceIcon} {Interfaces between C++ and QML Code}".
-*/
-QPlaceIcon QDeclarativePlaceIcon::icon() const
-{
- QPlaceIcon result;
-
- if (m_plugin)
- result.setManager(manager());
- else
- result.setManager(0);
-
- QVariantMap params;
- foreach (const QString &key, m_parameters->keys()) {
- const QVariant value = m_parameters->value(key);
- if (value.isValid()) {
- params.insert(key, value);
- }
- }
-
- result.setParameters(params);
-
- return result;
-}
-
-void QDeclarativePlaceIcon::setIcon(const QPlaceIcon &src)
-{
- initParameters(src.parameters());
-}
-
-/*!
- \qmlmethod url Icon::url(size size)
-
- Returns a URL for the icon image that most closely matches the given \a size.
-
- If no plugin has been assigned to the icon, and the parameters do not contain the 'singleUrl' key, a default constructed URL
- is returned.
-
-*/
-QUrl QDeclarativePlaceIcon::url(const QSize &size) const
-{
- return icon().url(size);
-}
-
-/*!
- \qmlproperty Object Icon::parameters
-
- This property holds the parameters of the icon and is a map. These parameters
- are used by the plugin to return the appropriate URL when url() is called and to
- specify locations to save to when saving icons.
-
- Consult the \l {Qt Location#Plugin References and Parameters}{plugin documentation}
- for what parameters are supported and how they should be used.
-
- Note, due to limitations of the QQmlPropertyMap, it is not possible
- to declaratively specify the parameters in QML, assignment of parameters keys
- and values can only be accomplished by JavaScript.
-
-*/
-QQmlPropertyMap *QDeclarativePlaceIcon::parameters() const
-{
- return m_parameters;
-}
-
-/*!
- \qmlproperty Plugin Icon::plugin
-
- The property holds the plugin that is responsible for managing this icon.
-*/
-QDeclarativeGeoServiceProvider *QDeclarativePlaceIcon::plugin() const
-{
- return m_plugin;
-}
-
-void QDeclarativePlaceIcon::setPlugin(QDeclarativeGeoServiceProvider *plugin)
-{
- if (m_plugin == plugin)
- return;
-
- m_plugin = plugin;
- emit pluginChanged();
-
- if (!m_plugin)
- return;
-
- if (m_plugin->isAttached()) {
- pluginReady();
- } else {
- connect(m_plugin, SIGNAL(attached()),
- this, SLOT(pluginReady()));
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlaceIcon::pluginReady()
-{
- QGeoServiceProvider *serviceProvider = m_plugin->sharedGeoServiceProvider();
- QPlaceManager *placeManager = serviceProvider->placeManager();
- if (!placeManager || serviceProvider->error() != QGeoServiceProvider::NoError) {
- qmlWarning(this) << QCoreApplication::translate(CONTEXT_NAME, PLUGIN_ERROR)
- .arg(m_plugin->name()).arg(serviceProvider->errorString());
- return;
- }
-}
-
-/*!
- \internal
- Helper function to return the manager from the plugin
-*/
-QPlaceManager *QDeclarativePlaceIcon::manager() const
-{
- if (!m_plugin) {
- qmlWarning(this) << QStringLiteral("Plugin is not assigned to place.");
- return 0;
- }
-
- QGeoServiceProvider *serviceProvider = m_plugin->sharedGeoServiceProvider();
- if (!serviceProvider)
- return 0;
-
- QPlaceManager *placeManager = serviceProvider->placeManager();
-
- if (!placeManager)
- return 0;
-
- return placeManager;
-}
-
-/*!
- \internal
-*/
-void QDeclarativePlaceIcon::initParameters(const QVariantMap &parameterMap)
-{
- //clear out old parameters
- foreach (const QString &key, m_parameters->keys())
- m_parameters->clear(key);
-
- foreach (const QString &key, parameterMap.keys()) {
- QVariant value = parameterMap.value(key);
- m_parameters->insert(key, value);
- }
-}
diff --git a/src/imports/location/declarativeplaces/qdeclarativeplaceicon_p.h b/src/imports/location/declarativeplaces/qdeclarativeplaceicon_p.h
deleted file mode 100644
index 23acb36e..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeplaceicon_p.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEPLACEICON_P_H
-#define QDECLARATIVEPLACEICON_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 "qdeclarativegeoserviceprovider_p.h"
-
-#include <qplaceicon.h>
-#include <QtQml/qqml.h>
-#include <QtQml/QQmlPropertyMap>
-
-#include <QObject>
-
-QT_BEGIN_NAMESPACE
-
-class QQmlPropertyMap;
-
-class QDeclarativePlaceIcon : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QPlaceIcon icon READ icon WRITE setIcon)
- Q_PROPERTY(QObject *parameters READ parameters NOTIFY parametersChanged)
- Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged)
-
-public:
- explicit QDeclarativePlaceIcon(QObject *parent = 0);
- QDeclarativePlaceIcon(const QPlaceIcon &src, QDeclarativeGeoServiceProvider *plugin, QObject *parent = 0);
- ~QDeclarativePlaceIcon();
-
- QPlaceIcon icon() const;
- void setIcon(const QPlaceIcon &src);
-
- Q_INVOKABLE QUrl url(const QSize &size = QSize()) const;
-
- QQmlPropertyMap *parameters() const;
-
- void setPlugin(QDeclarativeGeoServiceProvider *plugin);
- QDeclarativeGeoServiceProvider *plugin() const;
-
-Q_SIGNALS:
- void pluginChanged();
- void parametersChanged(); //in practice is never emitted since parameters cannot be re-assigned
- //the declaration is needed to avoid warnings about non-notifyable properties
-
-private Q_SLOTS:
- void pluginReady();
-
-private:
- QPlaceManager *manager() const;
- void initParameters(const QVariantMap &parameterMap);
- QDeclarativeGeoServiceProvider *m_plugin;
- QQmlPropertyMap *m_parameters;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/imports/location/declarativeplaces/qdeclarativeplaceimagemodel.cpp b/src/imports/location/declarativeplaces/qdeclarativeplaceimagemodel.cpp
deleted file mode 100644
index 4da37081..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeplaceimagemodel.cpp
+++ /dev/null
@@ -1,170 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativeplaceimagemodel_p.h"
-#include "qdeclarativesupplier_p.h"
-
-#include <QtCore/QUrl>
-#include <QtLocation/QPlaceImage>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype ImageModel
- \instantiates QDeclarativePlaceImageModel
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-places
- \ingroup qml-QtLocation5-places-models
- \since Qt Location 5.5
-
- \brief The ImageModel type provides a model of place images.
-
- The ImageModel is a read-only model used to fetch images related to a \l Place.
- Binding a \l Place via \l ImageModel::place initiates an initial fetch of images.
- The model performs fetches incrementally and is intended to be used in conjunction
- with a View such as a \l ListView. When the View reaches the last of the images
- currently in the model, a fetch is performed to retrieve more if they are available.
- The View is automatically updated as the images are received. The number of images
- which are fetched at a time is specified by the \l batchSize property. The total number
- of images available can be accessed via the \l totalCount property.
-
- The model returns data for the following roles:
-
- \table
- \header
- \li Role
- \li Type
- \li Description
- \row
- \li url
- \li url
- \li The URL of the image.
- \row
- \li imageId
- \li string
- \li The identifier of the image.
- \row
- \li mimeType
- \li string
- \li The MIME type of the image.
- \row
- \li supplier
- \li \l Supplier
- \li The supplier of the image.
- \row
- \li user
- \li \l {QtLocation::User}{User}
- \li The user who contributed the image.
- \row
- \li attribution
- \li string
- \li Attribution text which must be displayed when displaying the image.
- \endtable
-
-
- \section1 Example
-
- The following example shows how to display images for a place:
-
- \snippet declarative/places.qml QtQuick import
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/places.qml ImageModel
-*/
-
-/*!
- \qmlproperty Place ImageModel::place
-
- This property holds the Place that the images are for.
-*/
-
-/*!
- \qmlproperty int ImageModel::batchSize
-
- This property holds the batch size to use when fetching more image items.
-*/
-
-/*!
- \qmlproperty int ImageModel::totalCount
-
- This property holds the total number of image items for the place.
-*/
-
-QDeclarativePlaceImageModel::QDeclarativePlaceImageModel(QObject *parent)
-: QDeclarativePlaceContentModel(QPlaceContent::ImageType, parent)
-{
-}
-
-QDeclarativePlaceImageModel::~QDeclarativePlaceImageModel()
-{
- qDeleteAll(m_suppliers);
-}
-
-/*!
- \internal
-*/
-QVariant QDeclarativePlaceImageModel::data(const QModelIndex &index, int role) const
-{
- if (!index.isValid())
- return QVariant();
-
- if (index.row() >= rowCount(index.parent()) || index.row() < 0)
- return QVariant();
-
- const QPlaceImage &image = m_content.value(index.row());
-
- switch (role) {
- case UrlRole:
- return image.url();
- case ImageIdRole:
- return image.imageId();
- case MimeTypeRole:
- return image.mimeType();
- }
-
- return QDeclarativePlaceContentModel::data(index, role);
-}
-
-QHash<int, QByteArray> QDeclarativePlaceImageModel::roleNames() const
-{
- QHash<int, QByteArray> roles = QDeclarativePlaceContentModel::roleNames();
- roles.insert(UrlRole, "url");
- roles.insert(ImageIdRole, "imageId");
- roles.insert(MimeTypeRole, "mimeType");
- return roles;
-}
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/declarativeplaces/qdeclarativeplaceimagemodel_p.h b/src/imports/location/declarativeplaces/qdeclarativeplaceimagemodel_p.h
deleted file mode 100644
index 8f8f3f4e..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeplaceimagemodel_p.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEPLACEIMAGEMODEL_P_H
-#define QDECLARATIVEPLACEIMAGEMODEL_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 "qdeclarativeplacecontentmodel.h"
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeSupplier;
-
-class QDeclarativePlaceImageModel : public QDeclarativePlaceContentModel
-{
- Q_OBJECT
-
-public:
- explicit QDeclarativePlaceImageModel(QObject *parent = 0);
- ~QDeclarativePlaceImageModel();
-
- QVariant data(const QModelIndex &index, int role) const;
- QHash<int, QByteArray> roleNames() const;
-
- enum Roles {
- UrlRole = UserRole,
- ImageIdRole,
- MimeTypeRole
- };
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/imports/location/declarativeplaces/qdeclarativeplaceuser.cpp b/src/imports/location/declarativeplaces/qdeclarativeplaceuser.cpp
deleted file mode 100644
index d8bae3fe..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeplaceuser.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativeplaceuser_p.h"
-
-QT_USE_NAMESPACE
-
-/*!
- \qmltype User
- \instantiates QDeclarativePlaceUser
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-places
- \ingroup qml-QtLocation5-places-data
- \since Qt Location 5.5
-
- \brief The User type identifies a user who contributed a particular \l Place content item.
-
- Each \l Place content item has an associated user who contributed the content. This type
- provides information about that user.
-
- \sa ImageModel, ReviewModel, EditorialModel
-
- \section1 Example
-
- The following example shows how to display information about the user who
- submitted an editorial:
-
- \snippet declarative/places.qml QtQuick import
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/places.qml EditorialModel
-*/
-
-QDeclarativePlaceUser::QDeclarativePlaceUser(QObject *parent)
- : QObject(parent) {}
-
-QDeclarativePlaceUser::QDeclarativePlaceUser(const QPlaceUser &user,
- QObject *parent)
- : QObject(parent),
- m_user(user) {}
-
-QDeclarativePlaceUser::~QDeclarativePlaceUser() {}
-
-/*!
- \qmlproperty QPlaceUser QtLocation::User::user
-
- For details on how to use this property to interface between C++ and QML see
- "\l {User - QPlaceUser} {Interfaces between C++ and QML Code}".
-*/
-void QDeclarativePlaceUser::setUser(const QPlaceUser &user)
-{
- QPlaceUser previousUser = m_user;
- m_user = user;
-
- if (m_user.userId() != previousUser.userId())
- emit userIdChanged();
-
- if (m_user.name() != previousUser.name())
- emit nameChanged();
-}
-
-QPlaceUser QDeclarativePlaceUser::user() const
-{
- return m_user;
-}
-
-/*!
- \qmlproperty string QtLocation::User::userId
-
- This property holds the unique identifier of the user.
-*/
-
-void QDeclarativePlaceUser::setUserId(const QString &id)
-{
- if (m_user.userId() == id)
- return;
-
- m_user.setUserId(id);
- emit userIdChanged();
-}
-
-QString QDeclarativePlaceUser::userId() const
-{
- return m_user.userId();
-}
-
-/*!
- \qmlproperty string QtLocation::User::name
-
- This property holds the name of a user.
-*/
-void QDeclarativePlaceUser::setName(const QString &name)
-{
- if (m_user.name() == name)
- return;
-
- m_user.setName(name);
- emit nameChanged();
-}
-
-QString QDeclarativePlaceUser::name() const
-{
- return m_user.name();
-}
-
diff --git a/src/imports/location/declarativeplaces/qdeclarativeplaceuser_p.h b/src/imports/location/declarativeplaces/qdeclarativeplaceuser_p.h
deleted file mode 100644
index 6c6ececf..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeplaceuser_p.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEPLACEUSER_P_H
-#define QDECLARATIVEPLACEUSER_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 <QtCore/QObject>
-#include <QtQml/qqml.h>
-#include <QtLocation/QPlaceUser>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativePlaceUser : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QPlaceUser user READ user WRITE setUser)
- Q_PROPERTY(QString userId READ userId WRITE setUserId NOTIFY userIdChanged)
- Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
-
-public:
- explicit QDeclarativePlaceUser(QObject *parent = 0);
- explicit QDeclarativePlaceUser(const QPlaceUser &src, QObject *parent = 0);
- ~QDeclarativePlaceUser();
-
- QPlaceUser user() const;
- void setUser(const QPlaceUser &src);
-
- QString userId() const;
- void setUserId(const QString &id);
-
- QString name() const;
- void setName(const QString &name);
-
-Q_SIGNALS:
- void userIdChanged();
- void nameChanged();
-
-private:
- QPlaceUser m_user;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativePlaceUser)
-
-#endif
diff --git a/src/imports/location/declarativeplaces/qdeclarativeratings.cpp b/src/imports/location/declarativeplaces/qdeclarativeratings.cpp
deleted file mode 100644
index ff044124..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeratings.cpp
+++ /dev/null
@@ -1,152 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativeratings_p.h"
-
-QT_USE_NAMESPACE
-
-/*!
- \qmltype Ratings
- \instantiates QDeclarativeRatings
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-places
- \ingroup qml-QtLocation5-places-data
- \since Qt Location 5.5
-
- \brief The Ratings type holds place rating information.
-
- Rating information is used to describe how \e good a place is conceived to be. Typically this
- information is visualized as a number of stars. The \l average property gives an aggregated
- ratings value out of a possible maximum as given by the \l maximum property.
-
- \snippet declarative/places.qml QtQuick import
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/places.qml Ratings
-*/
-
-QDeclarativeRatings::QDeclarativeRatings(QObject *parent)
- : QObject(parent) {}
-
-QDeclarativeRatings::QDeclarativeRatings(const QPlaceRatings &rating,
- QObject *parent)
- : QObject(parent),
- m_ratings(rating) {}
-
-QDeclarativeRatings::~QDeclarativeRatings() {}
-
-/*!
- \qmlproperty QPlaceRatings Ratings::ratings
-
- For details on how to use this property to interface between C++ and QML see
- "\l {Ratings - QPlaceRatings} {Interfaces between C++ and QML Code}".
-*/
-void QDeclarativeRatings::setRatings(const QPlaceRatings &ratings)
-{
- QPlaceRatings previous = m_ratings;
- m_ratings = ratings;
-
- if (ratings.average() != previous.average()) {
- emit averageChanged();
- }
- if (ratings.count() != previous.count()) {
- emit countChanged();
- }
-}
-
-QPlaceRatings QDeclarativeRatings::ratings() const
-{
- return m_ratings;
-}
-
-/*!
- \qmlproperty real Ratings::average
-
- This property holds the average of the individual ratings.
-
- \sa maximum
-*/
-void QDeclarativeRatings::setAverage(qreal average)
-{
- if (m_ratings.average() != average) {
- m_ratings.setAverage(average);
- emit averageChanged();
- }
-}
-
-qreal QDeclarativeRatings::average() const
-{
- return m_ratings.average();
-}
-
-/*!
- \qmlproperty real Ratings::maximum
-
- This property holds the maximum rating value.
-*/
-void QDeclarativeRatings::setMaximum(qreal max)
-{
- if (m_ratings.maximum() == max)
- return;
-
- m_ratings.setMaximum(max);
- emit maximumChanged();
-}
-
-qreal QDeclarativeRatings::maximum() const
-{
- return m_ratings.maximum();
-}
-
-/*!
- \qmlproperty int Ratings::count
-
- This property holds the total number of individual user ratings
- used in determining the overall ratings \l average.
-*/
-void QDeclarativeRatings::setCount(int count)
-{
- if (m_ratings.count() != count) {
- m_ratings.setCount(count);
- emit countChanged();
- }
-}
-
-int QDeclarativeRatings::count() const
-{
- return m_ratings.count();
-}
-
diff --git a/src/imports/location/declarativeplaces/qdeclarativeratings_p.h b/src/imports/location/declarativeplaces/qdeclarativeratings_p.h
deleted file mode 100644
index 7583e703..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativeratings_p.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVERATINGS_P_H
-#define QDECLARATIVERATINGS_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 <qplaceratings.h>
-#include <QtQml/qqml.h>
-
-#include <QObject>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeRatings : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QPlaceRatings ratings READ ratings WRITE setRatings)
- Q_PROPERTY(qreal average READ average WRITE setAverage NOTIFY averageChanged)
- Q_PROPERTY(qreal maximum READ maximum WRITE setMaximum NOTIFY maximumChanged)
- Q_PROPERTY(int count READ count WRITE setCount NOTIFY countChanged)
-
-public:
- explicit QDeclarativeRatings(QObject *parent = 0);
- explicit QDeclarativeRatings(const QPlaceRatings &src, QObject *parent = 0);
- ~QDeclarativeRatings();
-
- QPlaceRatings ratings() const;
- void setRatings(const QPlaceRatings &src);
-
- qreal average() const;
- void setAverage(qreal average);
-
- qreal maximum() const;
- void setMaximum(qreal max);
-
- int count() const;
- void setCount(int count);
-
-Q_SIGNALS:
- void averageChanged();
- void maximumChanged();
- void countChanged();
-
-private:
- QPlaceRatings m_ratings;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeRatings)
-
-#endif // QDECLARATIVERATING_P_H
diff --git a/src/imports/location/declarativeplaces/qdeclarativereviewmodel.cpp b/src/imports/location/declarativeplaces/qdeclarativereviewmodel.cpp
deleted file mode 100644
index b7237bc9..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativereviewmodel.cpp
+++ /dev/null
@@ -1,183 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativereviewmodel_p.h"
-#include "qdeclarativesupplier_p.h"
-
-#include <QtCore/QDateTime>
-#include <QtLocation/QPlaceReview>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype ReviewModel
- \instantiates QDeclarativeReviewModel
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-places
- \ingroup qml-QtLocation5-places-models
- \since Qt Location 5.5
-
- \brief Provides access to reviews of a \l Place.
-
- The ReviewModel is a read-only model used to fetch reviews about a \l Place. The model
- incrementally fetches. The number of reviews which are fetched at a time is specified
- by the \l batchSize property. The total number of reviews available can be accessed via the
- \l totalCount property.
-
- To use the ReviewModel we need a view and a delegate. In this snippet we
- see the setting up of a ListView with a ReviewModel model and a delegate.
-
- \snippet places/views/ReviewView.qml ReviewModel delegate
-
- The model returns data for the following roles:
-
- \table
- \header
- \li Role
- \li Type
- \li Description
- \row
- \li dateTime
- \li datetime
- \li The date and time that the review was posted.
- \row
- \li text
- \li string
- \li The review's textual description of the place. It can be either rich (HTML based) text or plain text
- depending on the provider.
- \row
- \li language
- \li string
- \li The language that the review is written in.
- \row
- \li rating
- \li real
- \li The rating that the reviewer gave to the place.
- \row
- \li reviewId
- \li string
- \li The identifier of the review.
- \row
- \li title
- \li string
- \li The title of the review.
- \row
- \li supplier
- \li \l Supplier
- \li The supplier of the review.
- \row
- \li user
- \li \l {QtLocation::User}{User}
- \li The user who contributed the review.
- \row
- \li attribution
- \li string
- \li Attribution text which must be displayed when displaying the review.
- \endtable
-*/
-
-/*!
- \qmlproperty Place QtLocation::ReviewModel::place
-
- This property holds the Place that the reviews are for.
-*/
-
-/*!
- \qmlproperty int QtLocation::ReviewModel::batchSize
-
- This property holds the batch size to use when fetching more reviews.
-*/
-
-/*!
- \qmlproperty int QtLocation::ReviewModel::totalCount
-
- This property holds the total number of reviews for the place.
-*/
-
-QDeclarativeReviewModel::QDeclarativeReviewModel(QObject *parent)
-: QDeclarativePlaceContentModel(QPlaceContent::ReviewType, parent)
-{
-}
-
-QDeclarativeReviewModel::~QDeclarativeReviewModel()
-{
- qDeleteAll(m_suppliers);
-}
-
-/*!
- \internal
-*/
-QVariant QDeclarativeReviewModel::data(const QModelIndex &index, int role) const
-{
- if (!index.isValid())
- return QVariant();
-
- if (index.row() >= rowCount(index.parent()) || index.row() < 0)
- return QVariant();
-
- const QPlaceReview &review = m_content.value(index.row());
-
- switch (role) {
- case DateTimeRole:
- return review.dateTime();
- case TextRole:
- return review.text();
- case LanguageRole:
- return review.language();
- case RatingRole:
- return review.rating();
- case ReviewIdRole:
- return review.reviewId();
- case TitleRole:
- return review.title();
- }
-
- return QDeclarativePlaceContentModel::data(index, role);
-}
-
-QHash<int, QByteArray> QDeclarativeReviewModel::roleNames() const
-{
- QHash<int, QByteArray> roles = QDeclarativePlaceContentModel::roleNames();
- roles.insert(DateTimeRole, "dateTime");
- roles.insert(TextRole, "text");
- roles.insert(LanguageRole, "language");
- roles.insert(RatingRole, "rating");
- roles.insert(ReviewIdRole, "reviewId");
- roles.insert(TitleRole, "title");
- return roles;
-}
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/declarativeplaces/qdeclarativereviewmodel_p.h b/src/imports/location/declarativeplaces/qdeclarativereviewmodel_p.h
deleted file mode 100644
index 06bf7aa8..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativereviewmodel_p.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEREVIEWMODEL_P_H
-#define QDECLARATIVEREVIEWMODEL_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 "qdeclarativeplacecontentmodel.h"
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeReviewModel : public QDeclarativePlaceContentModel
-{
- Q_OBJECT
-
-public:
- explicit QDeclarativeReviewModel(QObject *parent = 0);
- ~QDeclarativeReviewModel();
-
- QVariant data(const QModelIndex &index, int role) const;
- QHash<int, QByteArray> roleNames() const;
- enum Roles {
- DateTimeRole = UserRole,
- TextRole,
- LanguageRole,
- RatingRole,
- ReviewIdRole,
- TitleRole
- };
-};
-
-QT_END_NAMESPACE
-
-#endif // QDECLARATIVEREVIEWMODEL_P_H
diff --git a/src/imports/location/declarativeplaces/qdeclarativesearchmodelbase.cpp b/src/imports/location/declarativeplaces/qdeclarativesearchmodelbase.cpp
deleted file mode 100644
index acfb54df..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativesearchmodelbase.cpp
+++ /dev/null
@@ -1,358 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativesearchmodelbase.h"
-#include "qdeclarativeplace_p.h"
-#include "error_messages.h"
-
-#include <QtCore/QCoreApplication>
-#include <QtQml/QQmlInfo>
-#include <QtLocation/QGeoServiceProvider>
-#include <QtLocation/QPlaceManager>
-#include <QtLocation/QPlaceSearchRequest>
-#include <QtLocation/QPlaceSearchReply>
-#include <QtPositioning/QGeoCircle>
-
-QDeclarativeSearchModelBase::QDeclarativeSearchModelBase(QObject *parent)
-: QAbstractListModel(parent), m_plugin(0), m_reply(0), m_complete(false), m_status(Null)
-{
-}
-
-QDeclarativeSearchModelBase::~QDeclarativeSearchModelBase()
-{
-}
-
-/*!
- \internal
-*/
-QDeclarativeGeoServiceProvider *QDeclarativeSearchModelBase::plugin() const
-{
- return m_plugin;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchModelBase::setPlugin(QDeclarativeGeoServiceProvider *plugin)
-{
- if (m_plugin == plugin)
- return;
-
- initializePlugin(plugin);
-
- if (m_complete)
- emit pluginChanged();
-}
-
-/*!
- \internal
-*/
-QVariant QDeclarativeSearchModelBase::searchArea() const
-{
- QGeoShape s = m_request.searchArea();
- if (s.type() == QGeoShape::RectangleType)
- return QVariant::fromValue(QGeoRectangle(s));
- else if (s.type() == QGeoShape::CircleType)
- return QVariant::fromValue(QGeoCircle(s));
- else
- return QVariant::fromValue(s);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchModelBase::setSearchArea(const QVariant &searchArea)
-{
- QGeoShape s;
-
- if (searchArea.userType() == qMetaTypeId<QGeoRectangle>())
- s = searchArea.value<QGeoRectangle>();
- else if (searchArea.userType() == qMetaTypeId<QGeoCircle>())
- s = searchArea.value<QGeoCircle>();
- else if (searchArea.userType() == qMetaTypeId<QGeoShape>())
- s = searchArea.value<QGeoShape>();
-
- if (m_request.searchArea() == s)
- return;
-
- m_request.setSearchArea(s);
- emit searchAreaChanged();
-}
-
-/*!
- \internal
-*/
-int QDeclarativeSearchModelBase::limit() const
-{
- return m_request.limit();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchModelBase::setLimit(int limit)
-{
- if (m_request.limit() == limit)
- return;
-
- m_request.setLimit(limit);
- emit limitChanged();
-}
-
-/*!
- \internal
-*/
-bool QDeclarativeSearchModelBase::previousPagesAvailable() const
-{
- return m_previousPageRequest != QPlaceSearchRequest();
-}
-
-/*!
- \internal
-*/
-bool QDeclarativeSearchModelBase::nextPagesAvailable() const
-{
- return m_nextPageRequest != QPlaceSearchRequest();
-}
-
-/*!
- \internal
-*/
-QDeclarativeSearchModelBase::Status QDeclarativeSearchModelBase::status() const
-{
- return m_status;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchModelBase::setStatus(Status status, const QString &errorString)
-{
- Status prevStatus = m_status;
-
- m_status = status;
- m_errorString = errorString;
-
- if (prevStatus != m_status)
- emit statusChanged();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchModelBase::update()
-{
- if (m_reply)
- return;
-
- setStatus(Loading);
-
- if (!m_plugin) {
- clearData();
- setStatus(Error, QCoreApplication::translate(CONTEXT_NAME, PLUGIN_PROPERTY_NOT_SET));
- return;
- }
-
- QGeoServiceProvider *serviceProvider = m_plugin->sharedGeoServiceProvider();
- if (!serviceProvider) {
- clearData();
- setStatus(Error, QCoreApplication::translate(CONTEXT_NAME, PLUGIN_PROVIDER_ERROR)
- .arg(m_plugin->name()));
- return;
- }
-
- QPlaceManager *placeManager = serviceProvider->placeManager();
- if (!placeManager) {
- clearData();
- setStatus(Error, QCoreApplication::translate(CONTEXT_NAME, PLUGIN_ERROR)
- .arg(m_plugin->name()).arg(serviceProvider->errorString()));
- return;
- }
-
- m_reply = sendQuery(placeManager, m_request);
- if (!m_reply) {
- clearData();
- setStatus(Error, QCoreApplication::translate(CONTEXT_NAME, UNABLE_TO_MAKE_REQUEST));
- return;
- }
-
- m_reply->setParent(this);
- connect(m_reply, SIGNAL(finished()), this, SLOT(queryFinished()));
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchModelBase::cancel()
-{
- if (!m_reply)
- return;
-
- if (!m_reply->isFinished())
- m_reply->abort();
-
- if (m_reply) {
- m_reply->deleteLater();
- m_reply = 0;
- }
-
- setStatus(Ready);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchModelBase::reset()
-{
- beginResetModel();
- clearData();
- setStatus(Null);
- endResetModel();
-}
-
-/*!
- \internal
-*/
-QString QDeclarativeSearchModelBase::errorString() const
-{
- return m_errorString;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchModelBase::previousPage()
-{
- if (m_previousPageRequest == QPlaceSearchRequest())
- return;
-
- m_request = m_previousPageRequest;
- update();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchModelBase::nextPage()
-{
- if (m_nextPageRequest == QPlaceSearchRequest())
- return;
-
- m_request = m_nextPageRequest;
- update();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchModelBase::clearData(bool suppressSignal)
-{
- Q_UNUSED(suppressSignal)
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchModelBase::classBegin()
-{
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchModelBase::componentComplete()
-{
- m_complete = true;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchModelBase::initializePlugin(QDeclarativeGeoServiceProvider *plugin)
-{
- beginResetModel();
- if (plugin != m_plugin) {
- if (m_plugin)
- disconnect(m_plugin, SIGNAL(nameChanged(QString)), this, SLOT(pluginNameChanged()));
- if (plugin)
- connect(plugin, SIGNAL(nameChanged(QString)), this, SLOT(pluginNameChanged()));
- m_plugin = plugin;
- }
-
- if (m_plugin) {
- QGeoServiceProvider *serviceProvider = m_plugin->sharedGeoServiceProvider();
- if (serviceProvider) {
- QPlaceManager *placeManager = serviceProvider->placeManager();
- if (placeManager) {
- if (placeManager->childCategoryIds().isEmpty()) {
- QPlaceReply *reply = placeManager->initializeCategories();
- connect(reply, SIGNAL(finished()), reply, SLOT(deleteLater()));
- }
- }
- }
- }
-
- endResetModel();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchModelBase::pluginNameChanged()
-{
- initializePlugin(m_plugin);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchModelBase::setPreviousPageRequest(const QPlaceSearchRequest &previous)
-{
- if (m_previousPageRequest == previous)
- return;
-
- m_previousPageRequest = previous;
- emit previousPagesAvailableChanged();
-}
-
-void QDeclarativeSearchModelBase::setNextPageRequest(const QPlaceSearchRequest &next)
-{
- if (m_nextPageRequest == next)
- return;
-
- m_nextPageRequest = next;
- emit nextPagesAvailableChanged();
-}
diff --git a/src/imports/location/declarativeplaces/qdeclarativesearchmodelbase.h b/src/imports/location/declarativeplaces/qdeclarativesearchmodelbase.h
deleted file mode 100644
index 45470458..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativesearchmodelbase.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVESEARCHMODELBASE_H
-#define QDECLARATIVESEARCHMODELBASE_H
-
-#include <QtCore/QAbstractListModel>
-#include <QtQml/QQmlParserStatus>
-#include <QtLocation/QPlaceSearchRequest>
-#include <QtLocation/QPlaceSearchResult>
-#include <QtLocation/QPlaceReply>
-
-#include "qdeclarativegeoserviceprovider_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QPlaceManager;
-class QPlaceSearchRequest;
-class QPlaceSearchReply;
-class QDeclarativePlace;
-
-class QDeclarativeSearchModelBase : public QAbstractListModel, public QQmlParserStatus
-{
- Q_OBJECT
-
- Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged)
- Q_PROPERTY(QVariant searchArea READ searchArea WRITE setSearchArea NOTIFY searchAreaChanged)
- Q_PROPERTY(int limit READ limit WRITE setLimit NOTIFY limitChanged)
- Q_PROPERTY(bool previousPagesAvailable READ previousPagesAvailable NOTIFY previousPagesAvailableChanged)
- Q_PROPERTY(bool nextPagesAvailable READ nextPagesAvailable NOTIFY nextPagesAvailableChanged)
- Q_PROPERTY(Status status READ status NOTIFY statusChanged)
-
- Q_ENUMS(Status)
-
- Q_INTERFACES(QQmlParserStatus)
-
-public:
- enum Status {
- Null,
- Ready,
- Loading,
- Error
- };
-
- explicit QDeclarativeSearchModelBase(QObject *parent = 0);
- ~QDeclarativeSearchModelBase();
-
- QDeclarativeGeoServiceProvider *plugin() const;
- void setPlugin(QDeclarativeGeoServiceProvider *plugin);
-
- QVariant searchArea() const;
- void setSearchArea(const QVariant &searchArea);
-
- int limit() const;
- void setLimit(int limit);
-
- bool previousPagesAvailable() const;
- bool nextPagesAvailable() const;
-
- Status status() const;
- void setStatus(Status status, const QString &errorString = QString());
-
- Q_INVOKABLE void update();
-
- Q_INVOKABLE void cancel();
- Q_INVOKABLE void reset();
-
- Q_INVOKABLE QString errorString() const;
-
- Q_INVOKABLE void previousPage();
- Q_INVOKABLE void nextPage();
-
- virtual void clearData(bool suppressSignal = false);
-
- // From QQmlParserStatus
- virtual void classBegin();
- virtual void componentComplete();
-
-Q_SIGNALS:
- void pluginChanged();
- void searchAreaChanged();
- void limitChanged();
- void previousPagesAvailableChanged();
- void nextPagesAvailableChanged();
- void statusChanged();
-
-protected:
- virtual void initializePlugin(QDeclarativeGeoServiceProvider *plugin);
-
-protected Q_SLOTS:
- virtual void queryFinished() = 0;
-
-private Q_SLOTS:
- void pluginNameChanged();
-
-protected:
- virtual QPlaceReply *sendQuery(QPlaceManager *manager, const QPlaceSearchRequest &request) = 0;
- void setPreviousPageRequest(const QPlaceSearchRequest &previous);
- void setNextPageRequest(const QPlaceSearchRequest &next);
-
- QPlaceSearchRequest m_request;
- QDeclarativeGeoServiceProvider *m_plugin;
- QPlaceReply *m_reply;
-
-private:
- bool m_complete;
- Status m_status;
- QString m_errorString;
- QPlaceSearchRequest m_previousPageRequest;
- QPlaceSearchRequest m_nextPageRequest;
-};
-
-QT_END_NAMESPACE
-
-#endif // QDECLARATIVESEARCHMODELBASE_H
diff --git a/src/imports/location/declarativeplaces/qdeclarativesearchresultmodel.cpp b/src/imports/location/declarativeplaces/qdeclarativesearchresultmodel.cpp
deleted file mode 100644
index 3c7c2610..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativesearchresultmodel.cpp
+++ /dev/null
@@ -1,916 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativesearchresultmodel_p.h"
-#include "qdeclarativeplace_p.h"
-#include "qdeclarativeplaceicon_p.h"
-
-#include <QtQml/QQmlEngine>
-#include <QtQml/QQmlInfo>
-#include <QtLocation/QGeoServiceProvider>
-#include <QtLocation/QPlaceSearchReply>
-#include <QtLocation/QPlaceManager>
-#include <QtLocation/QPlaceMatchRequest>
-#include <QtLocation/QPlaceMatchReply>
-#include <QtLocation/QPlaceResult>
-#include <QtLocation/QPlaceProposedSearchResult>
-
-QT_USE_NAMESPACE
-
-/*!
- \qmltype PlaceSearchModel
- \instantiates QDeclarativeSearchResultModel
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-places
- \ingroup qml-QtLocation5-places-models
- \since Qt Location 5.5
-
- \brief Provides access to place search results.
-
- PlaceSearchModel provides a model of place search results within the \l searchArea. The
- \l searchTerm and \l categories properties can be set to restrict the search results to
- places matching those criteria.
-
- The PlaceSearchModel returns both sponsored and
- \l {http://en.wikipedia.org/wiki/Organic_search}{organic search results}. Sponsored search
- results will have the \c sponsored role set to true.
-
- \target PlaceSearchModel Roles
- The model returns data for the following roles:
-
- \table
- \header
- \li Role
- \li Type
- \li Description
- \row
- \li type
- \li enum
- \li The type of search result.
- \row
- \li title
- \li string
- \li A string describing the search result.
- \row
- \li icon
- \li PlaceIcon
- \li Icon representing the search result.
- \row
- \li distance
- \li real
- \li Valid only when the \c type role is \c PlaceResult, the distance to the place
- from the center of the \l searchArea. If no \l searchArea
- has been specified, the distance is NaN.
- \row
- \li place
- \li \l Place
- \li Valid only when the \c type role is \c PlaceResult, an object representing the
- place.
- \row
- \li sponsored
- \li bool
- \li Valid only when the \c type role is \c PlaceResult, true if the search result is a
- sponsored result.
- \endtable
-
- \section2 Search Result Types
-
- The \c type role can take on the following values:
-
- \table
- \row
- \li PlaceSearchModel.UnknownSearchResult
- \li The contents of the search result are unknown.
- \row
- \li PlaceSearchModel.PlaceResult
- \li The search result contains a place.
- \row
- \li PlaceSearchModel.ProposedSearchResult
- \li The search result contains a proposed search which may be relevant.
- \endtable
-
-
- It can often be helpful to use a \l Loader to create a delegate
- that will choose different \l {Component}s based on the search result type.
-
- \snippet declarative/places_loader.qml Handle Result Types
-
- \section1 Detection of Updated and Removed Places
-
- The PlaceSearchModel listens for places that have been updated or removed from its plugin's backend.
- If it detects that a place has been updated and that place is currently present in the model, then
- it will call \l Place::getDetails to refresh the details. If it detects that a place has been
- removed, then correspondingly the place will be removed from the model if it is currently
- present.
-
- \section1 Example
-
- The following example shows how to use the PlaceSearchModel to search for Pizza restaurants in
- close proximity of a given position. A \l searchTerm and \l searchArea are provided to the model
- and \l update() is used to perform a lookup query. Note that the model does not incrementally
- fetch search results, but rather performs a single fetch when \l update() is run. The \l count
- is set to the number of search results returned during the fetch.
-
- \snippet places_list/places_list.qml Imports
- \codeline
- \snippet places_list/places_list.qml PlaceSearchModel
-
- \sa CategoryModel, {QPlaceManager}
-
- \section1 Paging
- The PlaceSearchModel API has some limited support
- for paging. The \l nextPage() and \l previousPage() functions as well as
- the \l limit property can be used to access
- paged search results. When the \l limit property is set
- the search result page contains at most \l limit entries (of type place result).
- For example, if the backend has 5 search results in total
- [a,b,c,d,e], and assuming the first page is shown and limit of 3 has been set
- then a,b,c is returned. The \l nextPage() would return d,e. The
- \l nextPagesAvailable and \l previousPagesAvailable properties
- can be used to check for further pages. At the moment the API does not
- support the means to retrieve the total number of items available from the
- backed. Note that support for \l nextPage(), previousPage() and \l limit can vary
- according to the \l plugin.
-*/
-
-/*!
- \qmlproperty Plugin PlaceSearchModel::plugin
-
- This property holds the \l Plugin which will be used to perform the search.
-*/
-
-/*!
- \qmlproperty Plugin PlaceSearchModel::favoritesPlugin
-
- This property holds the \l Plugin which will be used to search for favorites.
- Any places from the search which can be cross-referenced or matched
- in the favoritesPlugin will have their \l {Place::favorite}{favorite} property
- set to the corresponding \l Place from the favoritesPlugin.
-
- If the favoritesPlugin is not set, the \l {Place::favorite}{favorite} property
- of the places in the results will always be null.
-
- \sa Favorites
-*/
-
-/*!
- \qmlproperty VariantMap PlaceSearchModel::favoritesMatchParameters
-
- This property holds a set of parameters used to specify how search result places
- are matched to favorites in the favoritesPlugin.
-
- By default the parameter map is empty and implies that the favorites plugin
- matches by \l {Alternative Identifier Cross-Referencing}{alternative identifiers}. Generally,
- an application developer will not need to set this property.
-
- In cases where the favorites plugin does not support matching by alternative identifiers,
- then the \l {Qt Location#Plugin References and Parameters}{plugin documentation} should
- be consulted to see precisely what key-value parameters to set.
-*/
-
-/*!
- \qmlproperty variant PlaceSearchModel::searchArea
-
- This property holds the search area. The search result returned by the model will be within
- the search area.
-
- If this property is set to a \l {geocircle} its
- \l {geocircle}{radius} property may be left unset, in which case the \l Plugin
- will choose an appropriate radius for the search.
-
- Support for specifying a search area can vary according to the \l plugin backend
- implementation. For example, some may support a search center only while others may only
- support geo rectangles.
-*/
-
-/*!
- \qmlproperty int PlaceSearchModel::limit
-
- This property holds the limit of the number of items that will be returned.
-*/
-
-/*!
- \qmlproperty bool PlaceSearchModel::previousPagesAvailable
-
- This property holds whether there is one or more previous pages of search results available.
-
- \sa previousPage()
-*/
-
-/*!
- \qmlproperty bool PlaceSearchModel::nextPagesAvailable
-
- This property holds whether there is one or more additional pages of search results available.
-
- \sa nextPage()
-*/
-
-/*!
- \qmlproperty enum PlaceSearchModel::status
-
- This property holds the status of the model. It can be one of:
-
- \table
- \row
- \li PlaceSearchModel.Null
- \li No search query has been executed. The model is empty.
- \row
- \li PlaceSearchModel.Ready
- \li The search query has completed, and the results are available.
- \row
- \li PlaceSearchModel.Loading
- \li A search query is currently being executed.
- \row
- \li PlaceSearchModel.Error
- \li An error occurred when executing the previous search query.
- \endtable
-*/
-
-/*!
- \qmlmethod void PlaceSearchModel::update()
-
- Updates the model based on the provided query parameters. The model will be populated with a
- list of places matching the search parameters specified by the type's properties. Search
- criteria is specified by setting properties such as the \l searchTerm, \l categories, \l searchArea and \l limit.
- Support for these properties may vary according to \l plugin. \c update() then
- submits the set of criteria to the \l plugin to process.
-
- While the model is updating the \l status of the model is set to
- \c PlaceSearchModel.Loading. If the model is successfully updated the \l status is set to
- \c PlaceSearchModel.Ready, while if it unsuccessfully completes, the \l status is set to
- \c PlaceSearchModel.Error and the model cleared.
-
- \code
- PlaceSearchModel {
- id: model
- plugin: backendPlugin
- searchArea: QtPositioning.circle(QtPositioning.coordinate(10, 10))
- ...
- }
-
- MouseArea {
- ...
- onClicked: {
- model.searchTerm = "pizza";
- model.categories = null; //not searching by any category
- model.searchArea.center.latitude = -27.5;
- model.searchArea.center.longitude = 153;
- model.update();
- }
- }
- \endcode
-
- \sa cancel(), status
-*/
-
-/*!
- \qmlmethod void PlaceSearchModel::cancel()
-
- Cancels an ongoing search operation immediately and sets the model
- status to PlaceSearchModel.Ready. The model retains any search
- results it had before the operation was started.
-
- If an operation is not ongoing, invoking cancel() has no effect.
-
- \sa update(), status
-*/
-
-/*!
- \qmlmethod void PlaceSearchModel::reset()
-
- Resets the model. All search results are cleared, any outstanding requests are aborted and
- possible errors are cleared. Model status will be set to PlaceSearchModel.Null.
-*/
-
-/*!
- \qmlmethod string PlaceSearchModel::errorString() const
-
- This read-only property holds the textual presentation of the latest place search model error.
- If no error has occurred or if the model was cleared, an empty string is returned.
-
- An empty string may also be returned if an error occurred which has no associated
- textual representation.
-*/
-
-/*!
- \qmlmethod void PlaceSearchModel::previousPage()
-
- Updates the model to display the previous page of search results. If there is no previous page
- then this method does nothing.
-*/
-
-/*!
- \qmlmethod void PlaceSearchModel::nextPage()
-
- Updates the model to display the next page of search results. If there is no next page then
- this method does nothing.
-*/
-
-QDeclarativeSearchResultModel::QDeclarativeSearchResultModel(QObject *parent)
- : QDeclarativeSearchModelBase(parent), m_favoritesPlugin(0)
-{
-}
-
-QDeclarativeSearchResultModel::~QDeclarativeSearchResultModel()
-{
-}
-
-/*!
- \qmlproperty string PlaceSearchModel::searchTerm
-
- This property holds search term used in query. The search term is a free-form text string.
-*/
-QString QDeclarativeSearchResultModel::searchTerm() const
-{
- return m_request.searchTerm();
-}
-
-void QDeclarativeSearchResultModel::setSearchTerm(const QString &searchTerm)
-{
- m_request.setSearchContext(QVariant());
-
- if (m_request.searchTerm() == searchTerm)
- return;
-
- m_request.setSearchTerm(searchTerm);
- emit searchTermChanged();
-}
-
-/*!
- \qmlproperty list<Category> PlaceSearchModel::categories
-
- This property holds a list of categories to be used when searching. Returned search results
- will be for places that match at least one of the categories.
-*/
-QQmlListProperty<QDeclarativeCategory> QDeclarativeSearchResultModel::categories()
-{
- return QQmlListProperty<QDeclarativeCategory>(this,
- 0, // opaque data parameter
- categories_append,
- categories_count,
- category_at,
- categories_clear);
-}
-
-void QDeclarativeSearchResultModel::categories_append(QQmlListProperty<QDeclarativeCategory> *list,
- QDeclarativeCategory *declCategory)
-{
- QDeclarativeSearchResultModel *searchModel = qobject_cast<QDeclarativeSearchResultModel *>(list->object);
- if (searchModel && declCategory) {
- searchModel->m_request.setSearchContext(QVariant());
- searchModel->m_categories.append(declCategory);
- QList<QPlaceCategory> categories = searchModel->m_request.categories();
- categories.append(declCategory->category());
- searchModel->m_request.setCategories(categories);
- emit searchModel->categoriesChanged();
- }
-}
-
-int QDeclarativeSearchResultModel::categories_count(QQmlListProperty<QDeclarativeCategory> *list)
-{
- QDeclarativeSearchResultModel *searchModel = qobject_cast<QDeclarativeSearchResultModel *>(list->object);
- if (searchModel)
- return searchModel->m_categories.count();
- else
- return -1;
-}
-
-QDeclarativeCategory *QDeclarativeSearchResultModel::category_at(QQmlListProperty<QDeclarativeCategory> *list,
- int index)
-{
- QDeclarativeSearchResultModel *searchModel = qobject_cast<QDeclarativeSearchResultModel *>(list->object);
- if (searchModel && (searchModel->m_categories.count() > index) && (index > -1))
- return searchModel->m_categories.at(index);
- else
- return 0;
-}
-
-void QDeclarativeSearchResultModel::categories_clear(QQmlListProperty<QDeclarativeCategory> *list)
-{
- QDeclarativeSearchResultModel *searchModel = qobject_cast<QDeclarativeSearchResultModel *>(list->object);
- if (searchModel) {
- //note: we do not need to delete each of the objects in m_categories since the search model
- //should never be the parent of the categories anyway.
- searchModel->m_request.setSearchContext(QVariant());
- searchModel->m_categories.clear();
- searchModel->m_request.setCategories(QList<QPlaceCategory>());
- emit searchModel->categoriesChanged();
- }
-}
-
-/*!
- \qmlproperty string PlaceSearchModel::recommendationId
-
- This property holds the placeId to be used in order to find recommendations
- for similar places.
-*/
-QString QDeclarativeSearchResultModel::recommendationId() const
-{
- return m_request.recommendationId();
-}
-
-void QDeclarativeSearchResultModel::setRecommendationId(const QString &placeId)
-{
- if (m_request.recommendationId() == placeId)
- return;
-
- m_request.setRecommendationId(placeId);
- emit recommendationIdChanged();
-}
-
-/*!
- \qmlproperty enumeration PlaceSearchModel::relevanceHint
-
- This property holds a relevance hint used in the search query. The hint is given to the
- provider to help but not dictate the ranking of results. For example, the distance hint may
- give closer places a higher ranking but it does not necessarily mean the results will be
- strictly ordered according to distance. A provider may ignore the hint altogether.
-
- \table
- \row
- \li SearchResultModel.UnspecifiedHint
- \li No relevance hint is given to the provider.
- \row
- \li SearchResultModel.DistanceHint
- \li The distance of the place from the user's current location is important to the user.
- This hint is only meaningful when a circular search area is used.
- \row
- \li SearchResultModel.LexicalPlaceNameHint
- \li The lexical ordering of place names (in ascending alphabetical order) is relevant to
- the user. This hint is useful for providers based on a local data store.
- \endtable
-*/
-QDeclarativeSearchResultModel::RelevanceHint QDeclarativeSearchResultModel::relevanceHint() const
-{
- return static_cast<QDeclarativeSearchResultModel::RelevanceHint>(m_request.relevanceHint());
-}
-
-void QDeclarativeSearchResultModel::setRelevanceHint(QDeclarativeSearchResultModel::RelevanceHint hint)
-{
- if (m_request.relevanceHint() != static_cast<QPlaceSearchRequest::RelevanceHint>(hint)) {
- m_request.setRelevanceHint(static_cast<QPlaceSearchRequest::RelevanceHint>(hint));
- emit relevanceHintChanged();
- }
-}
-
-/*!
- \qmlproperty enum PlaceSearchModel::visibilityScope
-
- This property holds the visibility scope of the places to search. Only places with the
- specified visibility will be returned in the search results.
-
- The visibility scope can be one of:
-
- \table
- \row
- \li Place.UnspecifiedVisibility
- \li No explicit visibility scope specified, places with any visibility may be part of
- search results.
- \row
- \li Place.DeviceVisibility
- \li Only places stored on the local device will be part of the search results.
- \row
- \li Place.PrivateVisibility
- \li Only places that are private to the current user will be part of the search results.
- \row
- \li Place.PublicVisibility
- \li Only places that are public will be part of the search results.
- \endtable
-*/
-QDeclarativePlace::Visibility QDeclarativeSearchResultModel::visibilityScope() const
-{
- return QDeclarativePlace::Visibility(int(m_visibilityScope));
-}
-
-void QDeclarativeSearchResultModel::setVisibilityScope(QDeclarativePlace::Visibility visibilityScope)
-{
- QLocation::VisibilityScope scope = QLocation::VisibilityScope(visibilityScope);
-
- if (m_visibilityScope == scope)
- return;
-
- m_visibilityScope = scope;
- emit visibilityScopeChanged();
-}
-
-/*!
- \internal
-*/
-QDeclarativeGeoServiceProvider *QDeclarativeSearchResultModel::favoritesPlugin() const
-{
- return m_favoritesPlugin;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchResultModel::setFavoritesPlugin(QDeclarativeGeoServiceProvider *plugin)
-{
-
- if (m_favoritesPlugin == plugin)
- return;
-
- m_favoritesPlugin = plugin;
-
- if (m_favoritesPlugin) {
- QGeoServiceProvider *serviceProvider = m_favoritesPlugin->sharedGeoServiceProvider();
- if (serviceProvider) {
- QPlaceManager *placeManager = serviceProvider->placeManager();
- if (placeManager) {
- if (placeManager->childCategoryIds().isEmpty()) {
- QPlaceReply *reply = placeManager->initializeCategories();
- connect(reply, SIGNAL(finished()), reply, SLOT(deleteLater()));
- }
- }
- }
- }
-
- emit favoritesPluginChanged();
-}
-
-/*!
- \internal
-*/
-QVariantMap QDeclarativeSearchResultModel::favoritesMatchParameters() const
-{
- return m_matchParameters;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchResultModel::setFavoritesMatchParameters(const QVariantMap &parameters)
-{
- if (m_matchParameters == parameters)
- return;
-
- m_matchParameters = parameters;
- emit favoritesMatchParametersChanged();
-}
-
-/*!
- \internal
-*/
-int QDeclarativeSearchResultModel::rowCount(const QModelIndex &parent) const
-{
- Q_UNUSED(parent);
-
- return m_results.count();
-}
-
-void QDeclarativeSearchResultModel::clearData(bool suppressSignal)
-{
- QDeclarativeSearchModelBase::clearData(suppressSignal);
-
- qDeleteAll(m_places);
- m_places.clear();
- qDeleteAll(m_icons);
- m_icons.clear();
- if (!m_results.isEmpty()) {
- m_results.clear();
-
- if (!suppressSignal)
- emit rowCountChanged();
- }
-}
-
-QVariant QDeclarativeSearchResultModel::data(const QModelIndex &index, int role) const
-{
- if (index.row() > m_results.count())
- return QVariant();
-
- const QPlaceSearchResult &result = m_results.at(index.row());
-
- switch (role) {
- case SearchResultTypeRole:
- return result.type();
- case Qt::DisplayRole:
- case TitleRole:
- return result.title();
- case IconRole:
- return QVariant::fromValue(static_cast<QObject *>(m_icons.at(index.row())));
- case DistanceRole:
- if (result.type() == QPlaceSearchResult::PlaceResult) {
- QPlaceResult placeResult = result;
- return placeResult.distance();
- }
- break;
- case PlaceRole:
- if (result.type() == QPlaceSearchResult::PlaceResult)
- return QVariant::fromValue(static_cast<QObject *>(m_places.at(index.row())));
- case SponsoredRole:
- if (result.type() == QPlaceSearchResult::PlaceResult) {
- QPlaceResult placeResult = result;
- return placeResult.isSponsored();
- }
- break;
- }
- return QVariant();
-}
-
-/*!
- \internal
-*/
-QVariant QDeclarativeSearchResultModel::data(int index, const QString &role) const
-{
- QModelIndex modelIndex = createIndex(index, 0);
- return data(modelIndex, roleNames().key(role.toLatin1()));
-}
-
-QHash<int, QByteArray> QDeclarativeSearchResultModel::roleNames() const
-{
- QHash<int, QByteArray> roles = QDeclarativeSearchModelBase::roleNames();
- roles.insert(SearchResultTypeRole, "type");
- roles.insert(TitleRole, "title");
- roles.insert(IconRole, "icon");
- roles.insert(DistanceRole, "distance");
- roles.insert(PlaceRole, "place");
- roles.insert(SponsoredRole, "sponsored");
-
- return roles;
-}
-
-/*!
- \qmlmethod void PlaceSearchModel::updateWith(int proposedSearchIndex)
-
- Updates the model based on the ProposedSearchResult at index \a proposedSearchIndex. The model
- will be populated with a list of places matching the proposed search. Model status will be set
- to PlaceSearchModel.Loading. If the model is updated successfully status will be set to
- PlaceSearchModel.Ready. If an error occurs status will be set to PlaceSearchModel.Error and the
- model cleared.
-
- If \a proposedSearchIndex does not reference a ProposedSearchResult this method does nothing.
-*/
-void QDeclarativeSearchResultModel::updateWith(int proposedSearchIndex)
-{
- if (m_results.at(proposedSearchIndex).type() != QPlaceSearchResult::ProposedSearchResult)
- return;
-
- m_request = QPlaceProposedSearchResult(m_results.at(proposedSearchIndex)).searchRequest();
- update();
-}
-
-QPlaceReply *QDeclarativeSearchResultModel::sendQuery(QPlaceManager *manager,
- const QPlaceSearchRequest &request)
-{
- Q_ASSERT(manager);
- return manager->search(request);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchResultModel::initializePlugin(QDeclarativeGeoServiceProvider *plugin)
-{
- //disconnect the manager of the old plugin if we have one
- if (m_plugin) {
- QGeoServiceProvider *serviceProvider = m_plugin->sharedGeoServiceProvider();
- if (serviceProvider) {
- QPlaceManager *placeManager = serviceProvider->placeManager();
- if (placeManager) {
- disconnect(placeManager, SIGNAL(placeUpdated(QString)), this, SLOT(placeUpdated(QString)));
- disconnect(placeManager, SIGNAL(placeRemoved(QString)), this, SLOT(placeRemoved(QString)));
- connect(placeManager, SIGNAL(dataChanged()), this, SIGNAL(dataChanged()));
- }
- }
- }
-
- //connect to the manager of the new plugin.
- if (plugin) {
- QGeoServiceProvider *serviceProvider = plugin->sharedGeoServiceProvider();
- if (serviceProvider) {
- QPlaceManager *placeManager = serviceProvider->placeManager();
- if (placeManager) {
- connect(placeManager, SIGNAL(placeUpdated(QString)), this, SLOT(placeUpdated(QString)));
- connect(placeManager, SIGNAL(placeRemoved(QString)), this, SLOT(placeRemoved(QString)));
- disconnect(placeManager, SIGNAL(dataChanged()), this, SIGNAL(dataChanged()));
- }
- }
- }
- QDeclarativeSearchModelBase::initializePlugin(plugin);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchResultModel::queryFinished()
-{
- if (!m_reply)
- return;
- QPlaceReply *reply = m_reply;
- m_reply = 0;
- if (reply->error() != QPlaceReply::NoError) {
- m_resultsBuffer.clear();
- updateLayout();
- setStatus(Error, reply->errorString());
- reply->deleteLater();
- return;
- }
-
- if (reply->type() == QPlaceReply::SearchReply) {
- QPlaceSearchReply *searchReply = qobject_cast<QPlaceSearchReply *>(reply);
- Q_ASSERT(searchReply);
-
- m_resultsBuffer = searchReply->results();
- setPreviousPageRequest(searchReply->previousPageRequest());
- setNextPageRequest(searchReply->nextPageRequest());
-
- reply->deleteLater();
-
- if (!m_favoritesPlugin) {
- updateLayout();
- setStatus(Ready);
- } else {
- QGeoServiceProvider *serviceProvider = m_favoritesPlugin->sharedGeoServiceProvider();
- if (!serviceProvider) {
- updateLayout();
- setStatus(Error, QStringLiteral("Favorites plugin returns a null QGeoServiceProvider instance"));
- return;
- }
-
- QPlaceManager *favoritesManager = serviceProvider->placeManager();
- if (!favoritesManager) {
- updateLayout();
- setStatus(Error, QStringLiteral("Favorites plugin returns a null QPlaceManager"));
- return;
- }
-
- QPlaceMatchRequest request;
- if (m_matchParameters.isEmpty()) {
- if (!m_plugin) {
- reply->deleteLater();
- setStatus(Error, QStringLiteral("Plugin not assigned"));
- return;
- }
-
- QVariantMap params;
- params.insert(QPlaceMatchRequest::AlternativeId, QString::fromLatin1("x_id_") + m_plugin->name());
- request.setParameters(params);
- } else {
- request.setParameters(m_matchParameters);
- }
-
- request.setResults(m_resultsBuffer);
- m_reply = favoritesManager->matchingPlaces(request);
- connect(m_reply, SIGNAL(finished()), this, SLOT(queryFinished()));
- }
- } else if (reply->type() == QPlaceReply::MatchReply) {
- QPlaceMatchReply *matchReply = qobject_cast<QPlaceMatchReply *>(reply);
- Q_ASSERT(matchReply);
- updateLayout(matchReply->places());
- setStatus(Ready);
- reply->deleteLater();
- } else {
- setStatus(Error, QStringLiteral("Unknown reply type"));
- reply->deleteLater();
- }
-}
-
-/*!
- \qmlmethod void PlaceSearchModel::data(int index, string role)
-
- Returns the data for a given \a role at the specified row \a index.
-*/
-
-/*!
- \qmlproperty int PlaceSearchModel::count
-
- This property holds the number of results the model has.
-
- Note that it does not refer to the total number of search results
- available in the backend. The total number of search results
- is not currently supported by the API.
-*/
-
-/*!
- \internal
- Note: m_results buffer should be correctly populated before
- calling this function
-*/
-void QDeclarativeSearchResultModel::updateLayout(const QList<QPlace> &favoritePlaces)
-{
- int oldRowCount = rowCount();
-
- beginResetModel();
- clearData(true);
- m_results = m_resultsBuffer;
- m_resultsBuffer.clear();
-
- for (int i = 0; i < m_results.count(); ++i) {
- const QPlaceSearchResult &result = m_results.at(i);
-
- if (result.type() == QPlaceSearchResult::PlaceResult) {
- QPlaceResult placeResult = result;
- QDeclarativePlace *place = new QDeclarativePlace(placeResult.place(), plugin(), this);
- m_places.append(place);
-
- if ((favoritePlaces.count() == m_results.count()) && favoritePlaces.at(i) != QPlace())
- m_places[i]->setFavorite(new QDeclarativePlace(favoritePlaces.at(i),
- m_favoritesPlugin, m_places[i]));
- } else if (result.type() == QPlaceSearchResult::ProposedSearchResult) {
- m_places.append(0);
- }
-
- QDeclarativePlaceIcon *icon = 0;
- if (!result.icon().isEmpty())
- icon = new QDeclarativePlaceIcon(result.icon(), plugin(), this);
- m_icons.append(icon);
- }
-
- endResetModel();
- if (m_results.count() != oldRowCount)
- emit rowCountChanged();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchResultModel::placeUpdated(const QString &placeId)
-{
- int row = getRow(placeId);
- if (row < 0 || row > m_places.count())
- return;
-
- if (m_places.at(row))
- m_places.at(row)->getDetails();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchResultModel::placeRemoved(const QString &placeId)
-{
- int row = getRow(placeId);
- if (row < 0 || row > m_places.count())
- return;
-
- beginRemoveRows(QModelIndex(), row, row);
- delete m_places.at(row);
- m_places.removeAt(row);
- m_results.removeAt(row);
- endRemoveRows();
-
- emit rowCountChanged();
-}
-
-/*!
- \internal
-*/
-int QDeclarativeSearchResultModel::getRow(const QString &placeId) const
-{
- for (int i = 0; i < m_places.count(); ++i) {
- if (!m_places.at(i))
- continue;
- else if (m_places.at(i)->placeId() == placeId)
- return i;
- }
-
- return -1;
-}
-
-/*!
- \qmlsignal PlaceSearchResultModel::dataChanged()
-
- This signal is emitted when significant changes have been made to the underlying datastore.
-
- Applications should act on this signal at their own discretion. The data
- provided by the model could be out of date and so the model should be reupdated
- sometime, however an immediate reupdate may be disconcerting to users if the results
- change without any action on their part.
-
- The corresponding handler is \c onDataChanged.
-*/
-
diff --git a/src/imports/location/declarativeplaces/qdeclarativesearchresultmodel_p.h b/src/imports/location/declarativeplaces/qdeclarativesearchresultmodel_p.h
deleted file mode 100644
index 73bf16d3..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativesearchresultmodel_p.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVESEARCHRESULTMODEL_P_H
-#define QDECLARATIVESEARCHRESULTMODEL_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 "qdeclarativesearchmodelbase.h"
-#include "qdeclarativecategory_p.h"
-#include "qdeclarativeplace_p.h"
-#include "qdeclarativeplaceicon_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoServiceProvider;
-
-class QDeclarativeSearchResultModel : public QDeclarativeSearchModelBase
-{
- Q_OBJECT
-
- Q_PROPERTY(QString searchTerm READ searchTerm WRITE setSearchTerm NOTIFY searchTermChanged)
- Q_PROPERTY(QQmlListProperty<QDeclarativeCategory> categories READ categories NOTIFY categoriesChanged)
- Q_PROPERTY(QString recommendationId READ recommendationId WRITE setRecommendationId NOTIFY recommendationIdChanged)
- Q_PROPERTY(RelevanceHint relevanceHint READ relevanceHint WRITE setRelevanceHint NOTIFY relevanceHintChanged)
- Q_PROPERTY(QDeclarativePlace::Visibility visibilityScope READ visibilityScope WRITE setVisibilityScope NOTIFY visibilityScopeChanged)
-
- Q_PROPERTY(int count READ rowCount NOTIFY rowCountChanged)
- Q_PROPERTY(QDeclarativeGeoServiceProvider *favoritesPlugin READ favoritesPlugin WRITE setFavoritesPlugin NOTIFY favoritesPluginChanged)
- Q_PROPERTY(QVariantMap favoritesMatchParameters READ favoritesMatchParameters WRITE setFavoritesMatchParameters NOTIFY favoritesMatchParametersChanged)
-
- Q_ENUMS(SearchResultType RelevanceHint)
-
-public:
- enum SearchResultType {
- UnknownSearchResult = QPlaceSearchResult::UnknownSearchResult,
- PlaceResult = QPlaceSearchResult::PlaceResult,
- ProposedSearchResult = QPlaceSearchResult::ProposedSearchResult
- };
-
- enum RelevanceHint {
- UnspecifiedHint = QPlaceSearchRequest::UnspecifiedHint,
- DistanceHint = QPlaceSearchRequest::DistanceHint,
- LexicalPlaceNameHint = QPlaceSearchRequest::LexicalPlaceNameHint
- };
-
- explicit QDeclarativeSearchResultModel(QObject *parent = 0);
- ~QDeclarativeSearchResultModel();
-
- QString searchTerm() const;
- void setSearchTerm(const QString &searchTerm);
-
- QQmlListProperty<QDeclarativeCategory> categories();
- static void categories_append(QQmlListProperty<QDeclarativeCategory> *list,
- QDeclarativeCategory *category);
- static int categories_count(QQmlListProperty<QDeclarativeCategory> *list);
- static QDeclarativeCategory *category_at(QQmlListProperty<QDeclarativeCategory> *list, int index);
- static void categories_clear(QQmlListProperty<QDeclarativeCategory> *list);
-
- QString recommendationId() const;
- void setRecommendationId(const QString &recommendationId);
-
- QDeclarativeSearchResultModel::RelevanceHint relevanceHint() const;
- void setRelevanceHint(QDeclarativeSearchResultModel::RelevanceHint hint);
-
- QDeclarativePlace::Visibility visibilityScope() const;
- void setVisibilityScope(QDeclarativePlace::Visibility visibilityScope);
-
- QDeclarativeGeoServiceProvider *favoritesPlugin() const;
- void setFavoritesPlugin(QDeclarativeGeoServiceProvider *plugin);
-
- QVariantMap favoritesMatchParameters() const;
- void setFavoritesMatchParameters(const QVariantMap &parameters);
-
- int rowCount(const QModelIndex &parent = QModelIndex()) const;
-
- virtual void clearData(bool suppressSignal = false);
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
- Q_INVOKABLE QVariant data(int index, const QString &roleName) const;
- QHash<int, QByteArray> roleNames() const;
-
- Q_INVOKABLE void updateWith(int proposedSearchIndex);
-
- void updateSearchRequest();
-
-Q_SIGNALS:
- void searchTermChanged();
- void categoriesChanged();
- void recommendationIdChanged();
- void relevanceHintChanged();
- void visibilityScopeChanged();
-
- void rowCountChanged();
- void favoritesPluginChanged();
- void favoritesMatchParametersChanged();
- void dataChanged();
-
-protected:
- QPlaceReply *sendQuery(QPlaceManager *manager, const QPlaceSearchRequest &request);
- virtual void initializePlugin(QDeclarativeGeoServiceProvider *plugin);
-
-protected Q_SLOTS:
- virtual void queryFinished();
-
-private Q_SLOTS:
- void updateLayout(const QList<QPlace> &favoritePlaces = QList<QPlace>());
-
- void placeUpdated(const QString &placeId);
- void placeRemoved(const QString &placeId);
-
-private:
- enum Roles {
- SearchResultTypeRole = Qt::UserRole,
- TitleRole,
- IconRole,
- DistanceRole,
- PlaceRole,
- SponsoredRole
- };
-
- int getRow(const QString &placeId) const;
- QList<QDeclarativeCategory *> m_categories;
- QLocation::VisibilityScope m_visibilityScope;
-
- QList<QPlaceSearchResult> m_results;
- QList<QPlaceSearchResult> m_resultsBuffer;
- QList<QDeclarativePlace *> m_places;
- QList<QDeclarativePlaceIcon *> m_icons;
-
- QDeclarativeGeoServiceProvider *m_favoritesPlugin;
- QVariantMap m_matchParameters;
-};
-
-QT_END_NAMESPACE
-
-#endif // QDECLARATIVESEARCHRESULTMODEL_P_H
diff --git a/src/imports/location/declarativeplaces/qdeclarativesearchsuggestionmodel.cpp b/src/imports/location/declarativeplaces/qdeclarativesearchsuggestionmodel.cpp
deleted file mode 100644
index abc845f2..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativesearchsuggestionmodel.cpp
+++ /dev/null
@@ -1,351 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativesearchsuggestionmodel_p.h"
-#include "qdeclarativegeoserviceprovider_p.h"
-
-#include <QtQml/QQmlInfo>
-#include <QtLocation/QGeoServiceProvider>
-
-#include <qplacemanager.h>
-#include <qplacesearchrequest.h>
-
-QT_USE_NAMESPACE
-
-/*!
- \qmltype PlaceSearchSuggestionModel
- \instantiates QDeclarativeSearchSuggestionModel
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-places
- \ingroup qml-QtLocation5-places-models
- \since Qt Location 5.5
-
- \brief Provides access to search term suggestions.
-
- The PlaceSearchSuggestionModel can be used to provide search term suggestions as the user enters their
- search term. The properties of this model should match that of the \l PlaceSearchModel, which
- will be used to perform the actual search query, to ensure that the search suggestion results are
- relevant.
-
- There are two ways of accessing the data provided by this model, either through the
- \l suggestions property or through views and delegates. The latter is the preferred
- method.
-
- The \l offset and \l limit properties can be used to access paged suggestions. When the
- \l offset and \l limit properties are set the suggestions between \l offset and
- (\l offset + \l limit - 1) will be returned. Support for paging may vary
- from plugin to plugin.
-
- The model returns data for the following roles:
-
- \table
- \header
- \li Role
- \li Type
- \li Description
- \row
- \li suggestion
- \li string
- \li Suggested search term.
- \endtable
-
- The following example shows how to use the PlaceSearchSuggestionModel to get suggested search terms
- from a partial search term. The \l searchArea is set to match what would be used to perform the
- actual place search with \l PlaceSearchModel.
-
- \snippet declarative/places.qml QtQuick import
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/places.qml SearchSuggestionModel
-
- \sa PlaceSearchModel, {QPlaceManager}
-*/
-
-/*!
- \qmlproperty Plugin PlaceSearchSuggestionModel::plugin
-
- This property holds the provider \l Plugin which will be used to perform the search.
-*/
-
-/*!
- \qmlproperty geoshape PlaceSearchSuggestionModel::searchArea
-
- This property holds the search area. Search suggestion results returned by the model will be
- relevant to the given search area.
-
- If this property is set to a \l {geocircle} its
- \l {geocircle}{radius} property may be left unset, in which case the \l Plugin
- will choose an appropriate radius for the search.
-*/
-
-/*!
- \qmlproperty int PlaceSearchSuggestionModel::offset
-
- This property holds the index of the first item in the model.
-
- \sa limit
-*/
-
-/*!
- \qmlproperty int PlaceSearchSuggestionModel::limit
-
- This property holds the limit of the number of items that will be returned.
-
- \sa offset
-*/
-
-/*!
- \qmlproperty enum PlaceSearchSuggestionModel::status
-
- This property holds the status of the model. It can be one of:
-
- \table
- \row
- \li PlaceSearchSuggestionModel.Null
- \li No search query has been executed. The model is empty.
- \row
- \li PlaceSearchSuggestionModel.Ready
- \li The search query has completed, and the results are available.
- \row
- \li PlaceSearchSuggestionModel.Loading
- \li A search query is currently being executed.
- \row
- \li PlaceSearchSuggestionModel.Error
- \li An error occurred when executing the previous search query.
- \endtable
-*/
-
-/*!
- \qmlmethod void PlaceSearchSuggestionModel::update()
-
- Updates the model based on the provided query parameters. The model will be populated with a
- list of search suggestions for the partial \l searchTerm and \l searchArea. If the \l plugin
- supports it, other parameters such as \l limit and \l offset may be specified. \c update()
- submits the set of parameters to the \l plugin to process.
-
-
- While the model is updating the \l status of the model is set to
- \c PlaceSearchSuggestionModel.Loading. If the model is successfully updated, the \l status is
- set to \c PlaceSearchSuggestionModel.Ready, while if it unsuccessfully completes, the \l status
- is set to \c PlaceSearchSuggestionModel.Error and the model cleared.
-
- This example shows use of the model
- \code
- PlaceSeachSuggestionModel {
- id: model
- plugin: backendPlugin
- searchArea: QtPositioning.circle(QtPositioning.coordinate(10, 10))
- ...
- }
-
- MouseArea {
- ...
- onClicked: {
- model.searchTerm = "piz"
- model.searchArea.center.latitude = -27.5;
- model.searchArea.cetner.longitude = 153;
- model.update();
- }
- }
- \endcode
-
- A more detailed example can be found in the in
- \l {Places (QML)#Presenting-Search-Suggestions}{Places (QML)} example.
-
- \sa cancel(), status
-*/
-
-/*!
- \qmlmethod void PlaceSearchSuggestionModel::cancel()
-
- Cancels an ongoing search suggestion operation immediately and sets the model
- status to PlaceSearchSuggestionModel.Ready. The model retains any search
- suggestions it had before the operation was started.
-
- If an operation is not ongoing, invoking cancel() has no effect.
-
- \sa update(), status
-*/
-
-/*!
- \qmlmethod void PlaceSearchSuggestionModel::reset()
-
- Resets the model. All search suggestions are cleared, any outstanding requests are aborted and
- possible errors are cleared. Model status will be set to PlaceSearchSuggestionModel.Null.
-*/
-
-
-/*!
- \qmlmethod string QtLocation::PlaceSearchSuggestionModel::errorString() const
-
- This read-only property holds the textual presentation of the latest search suggestion model error.
- If no error has occurred, or if the model was cleared, an empty string is returned.
-
- An empty string may also be returned if an error occurred which has no associated
- textual representation.
-*/
-
-QDeclarativeSearchSuggestionModel::QDeclarativeSearchSuggestionModel(QObject *parent)
-: QDeclarativeSearchModelBase(parent)
-{
-}
-
-QDeclarativeSearchSuggestionModel::~QDeclarativeSearchSuggestionModel()
-{
-}
-
-/*!
- \qmlproperty string PlaceSearchSuggestionModel::searchTerm
-
- This property holds the partial search term used in query.
-*/
-QString QDeclarativeSearchSuggestionModel::searchTerm() const
-{
- return m_request.searchTerm();
-}
-
-void QDeclarativeSearchSuggestionModel::setSearchTerm(const QString &searchTerm)
-{
- if (m_request.searchTerm() == searchTerm)
- return;
-
- m_request.setSearchTerm(searchTerm);
- emit searchTermChanged();
-}
-
-/*!
- \qmlproperty stringlist PlaceSearchSuggestionModel::suggestions
-
- This property holds the list of predicted search terms that the model currently has.
-*/
-QStringList QDeclarativeSearchSuggestionModel::suggestions() const
-{
- return m_suggestions;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchSuggestionModel::clearData(bool suppressSignal)
-{
- QDeclarativeSearchModelBase::clearData(suppressSignal);
-
- if (!m_suggestions.isEmpty()) {
- m_suggestions.clear();
-
- if (!suppressSignal)
- emit suggestionsChanged();
- }
-}
-
-/*!
- \internal
-*/
-int QDeclarativeSearchSuggestionModel::rowCount(const QModelIndex &parent) const
-{
- Q_UNUSED(parent)
-
- return m_suggestions.count();
-}
-
-/*!
- \internal
-*/
-QVariant QDeclarativeSearchSuggestionModel::data(const QModelIndex &index, int role) const
-{
- if (!index.isValid())
- return QVariant();
-
- if (index.row() >= rowCount(index.parent()) || index.row() < 0)
- return QVariant();
-
- switch (role) {
- case Qt::DisplayRole:
- case SearchSuggestionRole:
- return m_suggestions.at(index.row());
- }
-
- return QVariant();
-}
-
-QHash<int, QByteArray> QDeclarativeSearchSuggestionModel::roleNames() const
-{
- QHash<int, QByteArray> roleNames = QDeclarativeSearchModelBase::roleNames();
- roleNames.insert(SearchSuggestionRole, "suggestion");
- return roleNames;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSearchSuggestionModel::queryFinished()
-{
- if (!m_reply)
- return;
-
- QPlaceReply *reply = m_reply;
- m_reply = 0;
-
- int initialCount = m_suggestions.count();
- beginResetModel();
-
- clearData(true);
-
- QPlaceSearchSuggestionReply *suggestionReply = qobject_cast<QPlaceSearchSuggestionReply *>(reply);
- m_suggestions = suggestionReply->suggestions();
-
- if (initialCount != m_suggestions.count())
- emit suggestionsChanged();
-
- endResetModel();
-
- if (suggestionReply->error() != QPlaceReply::NoError)
- setStatus(Error, suggestionReply->errorString());
- else
- setStatus(Ready);
-
-
- reply->deleteLater();
-}
-
-/*!
- \internal
-*/
-QPlaceReply *QDeclarativeSearchSuggestionModel::sendQuery(QPlaceManager *manager,
- const QPlaceSearchRequest &request)
-{
- return manager->searchSuggestions(request);
-}
diff --git a/src/imports/location/declarativeplaces/qdeclarativesearchsuggestionmodel_p.h b/src/imports/location/declarativeplaces/qdeclarativesearchsuggestionmodel_p.h
deleted file mode 100644
index 49e09980..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativesearchsuggestionmodel_p.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVESEARCHSUGGESTIONMODEL_P_H
-#define QDECLARATIVESEARCHSUGGESTIONMODEL_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 "qdeclarativesearchmodelbase.h"
-
-#include <QtCore/QStringList>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoServiceProvider;
-class QGeoServiceProvider;
-
-class QDeclarativeSearchSuggestionModel : public QDeclarativeSearchModelBase
-{
- Q_OBJECT
-
- Q_PROPERTY(QString searchTerm READ searchTerm WRITE setSearchTerm NOTIFY searchTermChanged)
- Q_PROPERTY(QStringList suggestions READ suggestions NOTIFY suggestionsChanged)
-
-public:
- explicit QDeclarativeSearchSuggestionModel(QObject *parent = 0);
- ~QDeclarativeSearchSuggestionModel();
-
- QString searchTerm() const;
- void setSearchTerm(const QString &searchTerm);
-
- QStringList suggestions() const;
-
- void clearData(bool suppressSignal = false);
-
- // From QAbstractListModel
- int rowCount(const QModelIndex &parent) const;
- QVariant data(const QModelIndex &index, int role) const;
- QHash<int, QByteArray> roleNames() const;
-
- enum Roles {
- SearchSuggestionRole = Qt::UserRole
- };
-
-protected Q_SLOTS:
- virtual void queryFinished();
-
-Q_SIGNALS:
- void searchTermChanged();
- void suggestionsChanged();
-
-protected:
- QPlaceReply *sendQuery(QPlaceManager *manager, const QPlaceSearchRequest &request);
-
-private:
- QStringList m_suggestions;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/imports/location/declarativeplaces/qdeclarativesupplier.cpp b/src/imports/location/declarativeplaces/qdeclarativesupplier.cpp
deleted file mode 100644
index 8fca9e8c..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativesupplier.cpp
+++ /dev/null
@@ -1,219 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativesupplier_p.h"
-
-#include <QtCore/QUrl>
-
-QT_USE_NAMESPACE
-
-/*!
- \qmltype Supplier
- \instantiates QDeclarativeSupplier
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-places
- \ingroup qml-QtLocation5-places-data
- \since Qt Location 5.5
-
- \brief Holds data regarding the supplier of a place, a place's image, review, or editorial.
-
- Each instance represents a set of data about a supplier, which can include
- supplier's name, url and icon. The supplier is typically a business or organization.
-
- Note: The Places API only supports suppliers as 'retrieve-only' objects. Submitting
- suppliers to a provider is not a supported use case.
-
- \sa ImageModel, ReviewModel, EditorialModel
-
- \section1 Example
-
- The following example shows how to create and display a supplier in QML:
-
- \snippet declarative/places.qml QtQuick import
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/places.qml Supplier
-*/
-
-QDeclarativeSupplier::QDeclarativeSupplier(QObject *parent)
- : QObject(parent), m_icon(0)
-{
-}
-
-QDeclarativeSupplier::QDeclarativeSupplier(const QPlaceSupplier &src,
- QDeclarativeGeoServiceProvider *plugin,
- QObject *parent)
- : QObject(parent),
- m_src(src),
- m_icon(0)
-{
- setSupplier(src, plugin);
-}
-
-QDeclarativeSupplier::~QDeclarativeSupplier()
-{
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSupplier::componentComplete()
-{
- // delayed instantiation of QObject based properties.
- if (!m_icon)
- m_icon = new QDeclarativePlaceIcon(this);
-}
-
-/*!
- \qmlproperty QPlaceSupplier Supplier::supplier
-
- For details on how to use this property to interface between C++ and QML see
- "\l {Supplier - QPlaceSupplier} {Interfaces between C++ and QML Code}".
-*/
-void QDeclarativeSupplier::setSupplier(const QPlaceSupplier &src, QDeclarativeGeoServiceProvider *plugin)
-{
- QPlaceSupplier previous = m_src;
- m_src = src;
-
- if (previous.name() != m_src.name())
- emit nameChanged();
-
- if (previous.supplierId() != m_src.supplierId())
- emit supplierIdChanged();
-
- if (previous.url() != m_src.url())
- emit urlChanged();
-
- if (m_icon && m_icon->parent() == this) {
- m_icon->setPlugin(plugin);
- m_icon->setIcon(m_src.icon());
- } else if (!m_icon || m_icon->parent() != this) {
- m_icon = new QDeclarativePlaceIcon(m_src.icon(), plugin, this);
- emit iconChanged();
- }
-}
-
-QPlaceSupplier QDeclarativeSupplier::supplier()
-{
- m_src.setIcon(m_icon ? m_icon->icon() : QPlaceIcon());
- return m_src;
-}
-
-/*!
- \qmlproperty string Supplier::supplierId
-
- This property holds the identifier of the supplier. The identifier is unique
- to the Plugin backend which provided the supplier and is generally
- not suitable for displaying to the user.
-*/
-
-void QDeclarativeSupplier::setSupplierId(const QString &supplierId)
-{
- if (m_src.supplierId() != supplierId) {
- m_src.setSupplierId(supplierId);
- emit supplierIdChanged();
- }
-}
-
-QString QDeclarativeSupplier::supplierId() const
-{
- return m_src.supplierId();
-}
-
-/*!
- \qmlproperty string Supplier::name
-
- This property holds the name of the supplier which can be displayed
- to the user.
-
- The name can potentially be localized. The language is dependent on the
- entity that sets it, typically this is the \l Plugin. The \l {Plugin::locales}
- property defines what language is used.
-*/
-
-void QDeclarativeSupplier::setName(const QString &name)
-{
- if (m_src.name() != name) {
- m_src.setName(name);
- emit nameChanged();
- }
-}
-
-QString QDeclarativeSupplier::name() const
-{
- return m_src.name();
-}
-
-/*!
- \qmlproperty url Supplier::url
-
- This property holds the URL of the supplier's website.
-*/
-
-void QDeclarativeSupplier::setUrl(const QUrl &url)
-{
- if (m_src.url() != url) {
- m_src.setUrl(url);
- emit urlChanged();
- }
-}
-
-QUrl QDeclarativeSupplier::url() const
-{
- return m_src.url();
-}
-
-/*!
- \qmlproperty PlaceIcon Supplier::icon
-
- This property holds the icon of the supplier.
-*/
-QDeclarativePlaceIcon *QDeclarativeSupplier::icon() const
-{
- return m_icon;
-}
-
-void QDeclarativeSupplier::setIcon(QDeclarativePlaceIcon *icon)
-{
- if (m_icon == icon)
- return;
-
- if (m_icon && m_icon->parent() == this)
- delete m_icon;
-
- m_icon = icon;
- emit iconChanged();
-}
diff --git a/src/imports/location/declarativeplaces/qdeclarativesupplier_p.h b/src/imports/location/declarativeplaces/qdeclarativesupplier_p.h
deleted file mode 100644
index 35b1dbda..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativesupplier_p.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVESUPPLIER_P_H
-#define QDECLARATIVESUPPLIER_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 <QtCore/QUrl>
-#include <QtQml/qqml.h>
-#include <QtQml/QQmlParserStatus>
-#include <qplacesupplier.h>
-
-#include "qdeclarativeplaceicon_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeSupplier : public QObject, public QQmlParserStatus
-{
- Q_OBJECT
-
- Q_PROPERTY(QPlaceSupplier supplier READ supplier WRITE setSupplier)
- Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
- Q_PROPERTY(QString supplierId READ supplierId WRITE setSupplierId NOTIFY supplierIdChanged)
- Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged)
- Q_PROPERTY(QDeclarativePlaceIcon *icon READ icon WRITE setIcon NOTIFY iconChanged)
-
- Q_INTERFACES(QQmlParserStatus)
-
-public:
- explicit QDeclarativeSupplier(QObject *parent = 0);
- explicit QDeclarativeSupplier(const QPlaceSupplier &src, QDeclarativeGeoServiceProvider *plugin, QObject *parent = 0);
- ~QDeclarativeSupplier();
-
- // From QQmlParserStatus
- void classBegin() { }
- void componentComplete();
-
- QPlaceSupplier supplier();
- void setSupplier(const QPlaceSupplier &src, QDeclarativeGeoServiceProvider *plugin = 0);
-
- QString name() const;
- void setName(const QString &data);
- QString supplierId() const;
- void setSupplierId(const QString &data);
- QUrl url() const;
- void setUrl(const QUrl &data);
-
- QDeclarativePlaceIcon *icon() const;
- void setIcon(QDeclarativePlaceIcon *icon);
-
-Q_SIGNALS:
- void nameChanged();
- void supplierIdChanged();
- void urlChanged();
- void iconChanged();
-
-private:
- QPlaceSupplier m_src;
- QDeclarativePlaceIcon *m_icon;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeSupplier)
-
-#endif // QDECLARATIVESUPPLIER_P_H
diff --git a/src/imports/location/declarativeplaces/qdeclarativesupportedcategoriesmodel.cpp b/src/imports/location/declarativeplaces/qdeclarativesupportedcategoriesmodel.cpp
deleted file mode 100644
index 2865957b..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativesupportedcategoriesmodel.cpp
+++ /dev/null
@@ -1,687 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Aaron McCarthy <mccarthy.aaron@gmail.com>
-** Copyright (C) 2015 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 "qdeclarativesupportedcategoriesmodel_p.h"
-#include "qdeclarativeplaceicon_p.h"
-#include "qgeoserviceprovider.h"
-#include "error_messages.h"
-
-#include <QCoreApplication>
-#include <QtQml/QQmlInfo>
-#include <QtLocation/QPlaceManager>
-#include <QtLocation/QPlaceIcon>
-
-QT_USE_NAMESPACE
-
-/*!
- \qmltype CategoryModel
- \instantiates QDeclarativeSupportedCategoriesModel
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-places
- \ingroup qml-QtLocation5-places-models
- \since Qt Location 5.5
-
- \brief The CategoryModel type provides a model of the categories supported by a \l Plugin.
-
- The CategoryModel type provides a model of the categories that are available from the
- current \l Plugin. The model supports both a flat list of categories and a hierarchical tree
- representing category groupings. This can be controlled by the \l hierarchical property.
-
- The model supports the following roles:
-
- \table
- \header
- \li Role
- \li Type
- \li Description
- \row
- \li category
- \li \l Category
- \li Category object for the current item.
- \row
- \li parentCategory
- \li \l Category
- \li Parent category object for the current item.
- If there is no parent, null is returned.
- \endtable
-
- The following example displays a flat list of all available categories:
-
- \snippet declarative/places.qml QtQuick import
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/places.qml CategoryView
-
- To access the hierarchical category model it is necessary to use a \l DelegateModel to access
- the child items.
-*/
-
-/*!
- \qmlproperty Plugin CategoryModel::plugin
-
- This property holds the provider \l Plugin used by this model.
-*/
-
-/*!
- \qmlproperty bool CategoryModel::hierarchical
-
- This property holds whether the model provides a hierarchical tree of categories or a flat
- list. The default is true.
-*/
-
-/*!
- \qmlmethod string QtLocation::CategoryModel::data(ModelIndex index, int role)
- \internal
-
- This method retrieves the model's data per \a index and \a role.
-*/
-
-/*!
- \qmlmethod string QtLocation::CategoryModel::errorString() const
-
- This read-only property holds the textual presentation of the latest category model error.
- If no error has occurred, an empty string is returned.
-
- An empty string may also be returned if an error occurred which has no associated
- textual representation.
-*/
-
-/*!
- \internal
- \enum QDeclarativeSupportedCategoriesModel::Roles
-*/
-
-QDeclarativeSupportedCategoriesModel::QDeclarativeSupportedCategoriesModel(QObject *parent)
-: QAbstractItemModel(parent), m_response(0), m_plugin(0), m_hierarchical(true),
- m_complete(false), m_status(Null)
-{
-}
-
-QDeclarativeSupportedCategoriesModel::~QDeclarativeSupportedCategoriesModel()
-{
- qDeleteAll(m_categoriesTree);
-}
-
-/*!
- \internal
-*/
-// From QQmlParserStatus
-void QDeclarativeSupportedCategoriesModel::componentComplete()
-{
- m_complete = true;
-}
-
-/*!
- \internal
-*/
-int QDeclarativeSupportedCategoriesModel::rowCount(const QModelIndex &parent) const
-{
- if (m_categoriesTree.keys().isEmpty())
- return 0;
-
- PlaceCategoryNode *node = static_cast<PlaceCategoryNode *>(parent.internalPointer());
- if (!node)
- node = m_categoriesTree.value(QString());
- else if (m_categoriesTree.keys(node).isEmpty())
- return 0;
-
- return node->childIds.count();
-}
-
-/*!
- \internal
-*/
-int QDeclarativeSupportedCategoriesModel::columnCount(const QModelIndex &parent) const
-{
- Q_UNUSED(parent)
-
- return 1;
-}
-
-/*!
- \internal
-*/
-QModelIndex QDeclarativeSupportedCategoriesModel::index(int row, int column, const QModelIndex &parent) const
-{
- if (column != 0 || row < 0)
- return QModelIndex();
-
- PlaceCategoryNode *node = static_cast<PlaceCategoryNode *>(parent.internalPointer());
-
- if (!node)
- node = m_categoriesTree.value(QString());
- else if (m_categoriesTree.keys(node).isEmpty()) //return root index if parent is non-existent
- return QModelIndex();
-
- if (row > node->childIds.count())
- return QModelIndex();
-
- QString id = node->childIds.at(row);
- Q_ASSERT(m_categoriesTree.contains(id));
-
- return createIndex(row, 0, m_categoriesTree.value(id));
-}
-
-/*!
- \internal
-*/
-QModelIndex QDeclarativeSupportedCategoriesModel::parent(const QModelIndex &child) const
-{
- PlaceCategoryNode *childNode = static_cast<PlaceCategoryNode *>(child.internalPointer());
- if (m_categoriesTree.keys(childNode).isEmpty())
- return QModelIndex();
-
- return index(childNode->parentId);
-}
-
-/*!
- \internal
-*/
-QVariant QDeclarativeSupportedCategoriesModel::data(const QModelIndex &index, int role) const
-{
- PlaceCategoryNode *node = static_cast<PlaceCategoryNode *>(index.internalPointer());
- if (!node)
- node = m_categoriesTree.value(QString());
- else if (m_categoriesTree.keys(node).isEmpty())
- return QVariant();
-
- QDeclarativeCategory *category = node->declCategory.data();
-
- switch (role) {
- case Qt::DisplayRole:
- return category->name();
- case CategoryRole:
- return QVariant::fromValue(category);
- case ParentCategoryRole: {
- if (!m_categoriesTree.keys().contains(node->parentId))
- return QVariant();
- else
- return QVariant::fromValue(m_categoriesTree.value(node->parentId)->declCategory.data());
- }
- default:
- return QVariant();
- }
-}
-
-QHash<int, QByteArray> QDeclarativeSupportedCategoriesModel::roleNames() const
-{
- QHash<int, QByteArray> roles = QAbstractItemModel::roleNames();
- roles.insert(CategoryRole, "category");
- roles.insert(ParentCategoryRole, "parentCategory");
- return roles;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSupportedCategoriesModel::setPlugin(QDeclarativeGeoServiceProvider *plugin)
-{
- if (m_plugin == plugin)
- return;
-
- //disconnect the manager of the old plugin if we have one
- if (m_plugin) {
- QGeoServiceProvider *serviceProvider = m_plugin->sharedGeoServiceProvider();
- if (serviceProvider) {
- QPlaceManager *placeManager = serviceProvider->placeManager();
- if (placeManager) {
- disconnect(placeManager, SIGNAL(categoryAdded(QPlaceCategory,QString)),
- this, SLOT(addedCategory(QPlaceCategory,QString)));
- disconnect(placeManager, SIGNAL(categoryUpdated(QPlaceCategory,QString)),
- this, SLOT(updatedCategory(QPlaceCategory,QString)));
- disconnect(placeManager, SIGNAL(categoryRemoved(QString,QString)),
- this, SLOT(removedCategory(QString,QString)));
- disconnect(placeManager, SIGNAL(dataChanged()),
- this, SIGNAL(dataChanged()));
- }
- }
- }
-
- m_plugin = plugin;
-
- // handle plugin name changes -> update categories
- if (m_plugin) {
- connect(m_plugin, SIGNAL(nameChanged(QString)), this, SLOT(connectNotificationSignals()));
- connect(m_plugin, SIGNAL(nameChanged(QString)), this, SLOT(update()));
- }
-
- connectNotificationSignals();
-
- if (m_complete)
- emit pluginChanged();
-}
-
-/*!
- \internal
-*/
-QDeclarativeGeoServiceProvider *QDeclarativeSupportedCategoriesModel::plugin() const
-{
- return m_plugin;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSupportedCategoriesModel::setHierarchical(bool hierarchical)
-{
- if (m_hierarchical == hierarchical)
- return;
-
- m_hierarchical = hierarchical;
- emit hierarchicalChanged();
-
- updateLayout();
-}
-
-/*!
- \internal
-*/
-bool QDeclarativeSupportedCategoriesModel::hierarchical() const
-{
- return m_hierarchical;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSupportedCategoriesModel::replyFinished()
-{
- if (!m_response)
- return;
-
- m_response->deleteLater();
-
- if (m_response->error() == QPlaceReply::NoError) {
- m_errorString.clear();
-
- m_response = 0;
-
- updateLayout();
- setStatus(QDeclarativeSupportedCategoriesModel::Ready);
- } else {
- const QString errorString = m_response->errorString();
-
- m_response = 0;
-
- setStatus(Error, errorString);
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSupportedCategoriesModel::addedCategory(const QPlaceCategory &category,
- const QString &parentId)
-{
- if (m_response)
- return;
-
- if (!m_categoriesTree.contains(parentId))
- return;
-
- if (category.categoryId().isEmpty())
- return;
-
- PlaceCategoryNode *parentNode = m_categoriesTree.value(parentId);
- if (!parentNode)
- return;
-
- int rowToBeAdded = rowToAddChild(parentNode, category);
- QModelIndex parentIndex = index(parentId);
- beginInsertRows(parentIndex, rowToBeAdded, rowToBeAdded);
- PlaceCategoryNode *categoryNode = new PlaceCategoryNode;
- categoryNode->parentId = parentId;
- categoryNode->declCategory = QSharedPointer<QDeclarativeCategory>(new QDeclarativeCategory(category, m_plugin, this));
-
- m_categoriesTree.insert(category.categoryId(), categoryNode);
- parentNode->childIds.insert(rowToBeAdded,category.categoryId());
- endInsertRows();
-
- //this is a workaround to deal with the fact that the hasModelChildren field of DelegateModel
- //does not get updated when a child is added to a model
- beginResetModel();
- endResetModel();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSupportedCategoriesModel::updatedCategory(const QPlaceCategory &category,
- const QString &parentId)
-{
- if (m_response)
- return;
-
- QString categoryId = category.categoryId();
-
- if (!m_categoriesTree.contains(parentId))
- return;
-
- if (category.categoryId().isEmpty() || !m_categoriesTree.contains(categoryId))
- return;
-
- PlaceCategoryNode *newParentNode = m_categoriesTree.value(parentId);
- if (!newParentNode)
- return;
-
- PlaceCategoryNode *categoryNode = m_categoriesTree.value(categoryId);
- if (!categoryNode)
- return;
-
- categoryNode->declCategory->setCategory(category);
-
- if (categoryNode->parentId == parentId) { //reparenting to same parent
- QModelIndex parentIndex = index(parentId);
- int rowToBeAdded = rowToAddChild(newParentNode, category);
- int oldRow = newParentNode->childIds.indexOf(categoryId);
-
- //check if we are changing the position of the category
- if (qAbs(rowToBeAdded - newParentNode->childIds.indexOf(categoryId)) > 1) {
- //if the position has changed we are moving rows
- beginMoveRows(parentIndex, oldRow, oldRow,
- parentIndex, rowToBeAdded);
-
- newParentNode->childIds.removeAll(categoryId);
- newParentNode->childIds.insert(rowToBeAdded, categoryId);
- endMoveRows();
- } else {// if the position has not changed we modifying an existing row
- QModelIndex categoryIndex = index(categoryId);
- emit dataChanged(categoryIndex, categoryIndex);
- }
- } else { //reparenting to different parents
- QPlaceCategory oldCategory = categoryNode->declCategory->category();
- PlaceCategoryNode *oldParentNode = m_categoriesTree.value(categoryNode->parentId);
- if (!oldParentNode)
- return;
- QModelIndex oldParentIndex = index(categoryNode->parentId);
- QModelIndex newParentIndex = index(parentId);
-
- int rowToBeAdded = rowToAddChild(newParentNode, category);
- beginMoveRows(oldParentIndex, oldParentNode->childIds.indexOf(categoryId),
- oldParentNode->childIds.indexOf(categoryId), newParentIndex, rowToBeAdded);
- oldParentNode->childIds.removeAll(oldCategory.categoryId());
- newParentNode->childIds.insert(rowToBeAdded, categoryId);
- categoryNode->parentId = parentId;
- endMoveRows();
-
- //this is a workaround to deal with the fact that the hasModelChildren field of DelegateModel
- //does not get updated when an index is updated to contain children
- beginResetModel();
- endResetModel();
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSupportedCategoriesModel::removedCategory(const QString &categoryId, const QString &parentId)
-{
- if (m_response)
- return;
-
- if (!m_categoriesTree.contains(categoryId) || !m_categoriesTree.contains(parentId))
- return;
-
- QModelIndex parentIndex = index(parentId);
- QModelIndex categoryIndex = index(categoryId);
-
- beginRemoveRows(parentIndex, categoryIndex.row(), categoryIndex.row());
- PlaceCategoryNode *parentNode = m_categoriesTree.value(parentId);
- parentNode->childIds.removeAll(categoryId);
- delete m_categoriesTree.take(categoryId);
- endRemoveRows();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSupportedCategoriesModel::connectNotificationSignals()
-{
- if (!m_plugin)
- return;
-
- QGeoServiceProvider *serviceProvider = m_plugin->sharedGeoServiceProvider();
- if (!serviceProvider || serviceProvider->error() != QGeoServiceProvider::NoError)
- return;
-
- QPlaceManager *placeManager = serviceProvider->placeManager();
- if (!placeManager)
- return;
-
- // listen for any category notifications so that we can reupdate the categories
- // model.
- connect(placeManager, SIGNAL(categoryAdded(QPlaceCategory,QString)),
- this, SLOT(addedCategory(QPlaceCategory,QString)));
- connect(placeManager, SIGNAL(categoryUpdated(QPlaceCategory,QString)),
- this, SLOT(updatedCategory(QPlaceCategory,QString)));
- connect(placeManager, SIGNAL(categoryRemoved(QString,QString)),
- this, SLOT(removedCategory(QString,QString)));
- connect(placeManager, SIGNAL(dataChanged()),
- this, SIGNAL(dataChanged()));
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSupportedCategoriesModel::update()
-{
- if (m_response)
- return;
-
- setStatus(Loading);
-
- if (!m_plugin) {
- updateLayout();
- setStatus(Error, QCoreApplication::translate(CONTEXT_NAME, PLUGIN_PROPERTY_NOT_SET));
- return;
- }
-
- QGeoServiceProvider *serviceProvider = m_plugin->sharedGeoServiceProvider();
- if (!serviceProvider || serviceProvider->error() != QGeoServiceProvider::NoError) {
- updateLayout();
- setStatus(Error, QCoreApplication::translate(CONTEXT_NAME, PLUGIN_PROVIDER_ERROR)
- .arg(m_plugin->name()));
- return;
- }
-
- QPlaceManager *placeManager = serviceProvider->placeManager();
- if (!placeManager) {
- updateLayout();
- setStatus(Error, QCoreApplication::translate(CONTEXT_NAME, PLUGIN_ERROR)
- .arg(m_plugin->name()).arg(serviceProvider->errorString()));
- return;
- }
-
- m_response = placeManager->initializeCategories();
- if (m_response) {
- connect(m_response, SIGNAL(finished()), this, SLOT(replyFinished()));
- } else {
- updateLayout();
- setStatus(Error, QCoreApplication::translate(CONTEXT_NAME,
- CATEGORIES_NOT_INITIALIZED));
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativeSupportedCategoriesModel::updateLayout()
-{
- beginResetModel();
- qDeleteAll(m_categoriesTree);
- m_categoriesTree.clear();
-
- if (m_plugin) {
- QGeoServiceProvider *serviceProvider = m_plugin->sharedGeoServiceProvider();
- if (serviceProvider && serviceProvider->error() == QGeoServiceProvider::NoError) {
- QPlaceManager *placeManager = serviceProvider->placeManager();
- if (placeManager) {
- PlaceCategoryNode *node = new PlaceCategoryNode;
- node->childIds = populateCategories(placeManager, QPlaceCategory());
- m_categoriesTree.insert(QString(), node);
- node->declCategory = QSharedPointer<QDeclarativeCategory>
- (new QDeclarativeCategory(QPlaceCategory(), m_plugin, this));
- }
- }
- }
-
- endResetModel();
-}
-
-QString QDeclarativeSupportedCategoriesModel::errorString() const
-{
- return m_errorString;
-}
-
-/*!
- \qmlproperty enumeration CategoryModel::status
-
- This property holds the status of the model. It can be one of:
-
- \table
- \row
- \li CategoryModel.Null
- \li No category fetch query has been executed. The model is empty.
- \row
- \li CategoryModel.Ready
- \li No error occurred during the last operation, further operations may be performed on
- the model.
- \row
- \li CategoryModel.Loading
- \li The model is being updated, no other operations may be performed until complete.
- \row
- \li CategoryModel.Error
- \li An error occurred during the last operation, further operations can still be
- performed on the model.
- \endtable
-*/
-void QDeclarativeSupportedCategoriesModel::setStatus(Status status, const QString &errorString)
-{
- Status originalStatus = m_status;
- m_status = status;
- m_errorString = errorString;
-
- if (originalStatus != m_status)
- emit statusChanged();
-}
-
-QDeclarativeSupportedCategoriesModel::Status QDeclarativeSupportedCategoriesModel::status() const
-{
- return m_status;
-}
-
-/*!
- \internal
-*/
-QStringList QDeclarativeSupportedCategoriesModel::populateCategories(QPlaceManager *manager, const QPlaceCategory &parent)
-{
- Q_ASSERT(manager);
-
- QStringList childIds;
- PlaceCategoryNode *node;
-
- QMap<QString, QPlaceCategory> sortedCategories;
- foreach ( const QPlaceCategory &category, manager->childCategories(parent.categoryId()))
- sortedCategories.insert(category.name(), category);
-
- QMapIterator<QString, QPlaceCategory> iter(sortedCategories);
- while (iter.hasNext()) {
- iter.next();
- node = new PlaceCategoryNode;
- node->parentId = parent.categoryId();
- node->declCategory = QSharedPointer<QDeclarativeCategory>(new QDeclarativeCategory(iter.value(), m_plugin ,this));
-
- if (m_hierarchical)
- node->childIds = populateCategories(manager, iter.value());
-
- m_categoriesTree.insert(node->declCategory->categoryId(), node);
- childIds.append(iter.value().categoryId());
-
- if (!m_hierarchical) {
- childIds.append(populateCategories(manager,node->declCategory->category()));
- }
- }
- return childIds;
-}
-
-/*!
- \internal
-*/
-QModelIndex QDeclarativeSupportedCategoriesModel::index(const QString &categoryId) const
-{
- if (categoryId.isEmpty())
- return QModelIndex();
-
- if (!m_categoriesTree.contains(categoryId))
- return QModelIndex();
-
- PlaceCategoryNode *categoryNode = m_categoriesTree.value(categoryId);
- if (!categoryNode)
- return QModelIndex();
-
- QString parentCategoryId = categoryNode->parentId;
-
- PlaceCategoryNode *parentNode = m_categoriesTree.value(parentCategoryId);
-
- return createIndex(parentNode->childIds.indexOf(categoryId), 0, categoryNode);
-}
-
-/*!
- \internal
-*/
-int QDeclarativeSupportedCategoriesModel::rowToAddChild(PlaceCategoryNode *node, const QPlaceCategory &category)
-{
- Q_ASSERT(node);
- for (int i = 0; i < node->childIds.count(); ++i) {
- if (category.name() < m_categoriesTree.value(node->childIds.at(i))->declCategory->name())
- return i;
- }
- return node->childIds.count();
-}
-
-/*!
- \qmlsignal CategoryModel::dataChanged()
-
- This signal is emitted when significant changes have been made to the underlying datastore.
-
- Applications should act on this signal at their own discretion. The data
- provided by the model could be out of date and so the model should be reupdated
- sometime, however an immediate reupdate may be disconcerting to users if the categories
- change without any action on their part.
-
- The corresponding handler is \c onDataChanged.
-*/
diff --git a/src/imports/location/declarativeplaces/qdeclarativesupportedcategoriesmodel_p.h b/src/imports/location/declarativeplaces/qdeclarativesupportedcategoriesmodel_p.h
deleted file mode 100644
index 98167892..00000000
--- a/src/imports/location/declarativeplaces/qdeclarativesupportedcategoriesmodel_p.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVESUPPORTEDCATEGORIESMODEL_H
-#define QDECLARATIVESUPPORTEDCATEGORIESMODEL_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 <qdeclarativegeoserviceprovider_p.h>
-
-#include <QObject>
-#include <QtCore/QStringList>
-#include <QtCore/QSharedPointer>
-#include <QAbstractListModel>
-#include <QQmlListProperty>
-#include <QtQml/QQmlParserStatus>
-
-#include <QtLocation/QPlaceCategory>
-
-#include "qdeclarativecategory_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QGeoServiceProvider;
-class QPlaceManager;
-class QPlaceReply;
-
-class PlaceCategoryNode
-{
-public:
- QString parentId;
- QStringList childIds;
- QSharedPointer<QDeclarativeCategory> declCategory;
-};
-
-class QDeclarativeSupportedCategoriesModel : public QAbstractItemModel, public QQmlParserStatus
-{
- Q_OBJECT
-
- Q_ENUMS(Status)
-
- Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged)
- Q_PROPERTY(bool hierarchical READ hierarchical WRITE setHierarchical NOTIFY hierarchicalChanged)
- Q_PROPERTY(Status status READ status NOTIFY statusChanged)
-
- Q_INTERFACES(QQmlParserStatus)
- Q_ENUMS(Roles) //The Roles enum is for internal usage only.
-
-public:
- explicit QDeclarativeSupportedCategoriesModel(QObject *parent = 0);
- virtual ~QDeclarativeSupportedCategoriesModel();
-
- // From QQmlParserStatus
- virtual void classBegin() {}
- virtual void componentComplete();
-
- // From QAbstractItemModel
- int rowCount(const QModelIndex &parent) const;
- int columnCount(const QModelIndex &parent) const;
-
- QModelIndex index(int row, int column, const QModelIndex &parent) const;
- QModelIndex parent(const QModelIndex &child) const;
-
- Q_INVOKABLE QVariant data(const QModelIndex &index, int role) const;
- QHash<int, QByteArray> roleNames() const;
-
- enum Roles {
- CategoryRole = Qt::UserRole,
- ParentCategoryRole
- }; //for internal usage only
-
- enum Status {Null, Ready, Loading, Error};
-
- void setPlugin(QDeclarativeGeoServiceProvider *plugin);
- QDeclarativeGeoServiceProvider *plugin() const;
-
- void setHierarchical(bool hierarchical);
- bool hierarchical() const;
-
- Q_INVOKABLE QString errorString() const;
-
- Status status() const;
- void setStatus(Status status, const QString &errorString = QString());
-
- using QAbstractItemModel::dataChanged;
-Q_SIGNALS:
- void pluginChanged();
- void hierarchicalChanged();
- void statusChanged();
- void dataChanged();
-
-public Q_SLOTS:
- void update();
-
-private Q_SLOTS:
- void replyFinished();
- void addedCategory(const QPlaceCategory &category, const QString &parentId);
- void updatedCategory(const QPlaceCategory &category, const QString &parentId);
- void removedCategory(const QString &categoryId, const QString &parentId);
- void connectNotificationSignals();
-
-private:
- QStringList populateCategories(QPlaceManager *, const QPlaceCategory &parent);
- QModelIndex index(const QString &categoryId) const;
- int rowToAddChild(PlaceCategoryNode *, const QPlaceCategory &category);
- void updateLayout();
-
- QPlaceReply *m_response;
-
- QDeclarativeGeoServiceProvider *m_plugin;
- bool m_hierarchical;
- bool m_complete;
- Status m_status;
- QString m_errorString;
-
- QHash<QString, PlaceCategoryNode *> m_categoriesTree;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeSupportedCategoriesModel)
-
-#endif // QDECLARATIVESUPPORTEDCATEGORIESMODEL_H
diff --git a/src/imports/location/error_messages.cpp b/src/imports/location/error_messages.cpp
deleted file mode 100644
index a2557f79..00000000
--- a/src/imports/location/error_messages.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/***************************************************************************
-**
-** Copyright (C) 2015 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 "error_messages.h"
-
-QT_BEGIN_NAMESPACE
-
-const char CONTEXT_NAME[] = "QtLocationQML";
-
-//to-be-translated error string
-
-const char PLUGIN_PROPERTY_NOT_SET[] = QT_TRANSLATE_NOOP("QtLocationQML", "Plugin property is not set.");
-const char PLUGIN_ERROR[] = QT_TRANSLATE_NOOP("QtLocationQML", "Plugin Error (%1): %2");
-const char PLUGIN_PROVIDER_ERROR[] = QT_TRANSLATE_NOOP("QtLocationQML", "Plugin Error (%1): Could not instantiate provider");
-const char PLUGIN_NOT_VALID[] = QT_TRANSLATE_NOOP("QtLocationQML", "Plugin is not valid");
-const char CATEGORIES_NOT_INITIALIZED[] = QT_TRANSLATE_NOOP("QtLocationQML", "Unable to initialize categories");
-const char UNABLE_TO_MAKE_REQUEST[] = QT_TRANSLATE_NOOP("QtLocationQML", "Unable to create request");
-const char INDEX_OUT_OF_RANGE[] = QT_TRANSLATE_NOOP("QtLocationQML", "Index '%1' out of range");
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/error_messages.h b/src/imports/location/error_messages.h
deleted file mode 100644
index 81c43b34..00000000
--- a/src/imports/location/error_messages.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 ERROR_MESSAGES_H
-#define ERROR_MESSAGES_H
-
-#include <QtCore/qglobal.h>
-
-QT_BEGIN_NAMESPACE
-
-extern const char CONTEXT_NAME[];
-extern const char PLUGIN_PROPERTY_NOT_SET[];
-extern const char PLUGIN_ERROR[];
-extern const char PLUGIN_PROVIDER_ERROR[];
-extern const char PLUGIN_NOT_VALID[];
-extern const char CATEGORIES_NOT_INITIALIZED[];
-extern const char UNABLE_TO_MAKE_REQUEST[];
-extern const char INDEX_OUT_OF_RANGE[];
-
-QT_END_NAMESPACE
-
-#endif // ERROR_MESSAGES_H
diff --git a/src/imports/location/location.cpp b/src/imports/location/location.cpp
index f9b3545f..4536b371 100644
--- a/src/imports/location/location.cpp
+++ b/src/imports/location/location.cpp
@@ -34,37 +34,40 @@
**
****************************************************************************/
-#include "qdeclarativegeoserviceprovider_p.h"
-#include "qdeclarativegeomap_p.h"
-
-#include "qdeclarativegeoroute_p.h"
-#include "qdeclarativegeoroutemodel_p.h"
-#include "qdeclarativegeocodemodel_p.h"
-#include "qdeclarativegeomaneuver_p.h"
-#include "qdeclarativegeomapquickitem_p.h"
-#include "qdeclarativegeomapitemview_p.h"
-#include "qdeclarativegeomaptype_p.h"
-#include "qdeclarativerectanglemapitem_p.h"
-#include "qdeclarativecirclemapitem_p.h"
-#include "qdeclarativeroutemapitem_p.h"
-#include "qdeclarativepolylinemapitem_p.h"
-#include "qdeclarativepolygonmapitem_p.h"
-#include "qdeclarativegeomapparameter_p.h"
+#include <QtLocation/private/qdeclarativegeoserviceprovider_p.h>
+#include <QtLocation/private/qdeclarativegeomap_p.h>
+
+#include <QtLocation/private/qdeclarativegeoroute_p.h>
+#include <QtLocation/private/qdeclarativegeoroutemodel_p.h>
+#include <QtLocation/private/qdeclarativegeocodemodel_p.h>
+#include <QtLocation/private/qdeclarativegeomaneuver_p.h>
+#include <QtLocation/private/qdeclarativegeomapitembase_p.h>
+#include <QtLocation/private/qdeclarativegeomapquickitem_p.h>
+#include <QtLocation/private/qdeclarativegeomapitemview_p.h>
+#include <QtLocation/private/qdeclarativegeomaptype_p.h>
+#include <QtLocation/private/qdeclarativerectanglemapitem_p.h>
+#include <QtLocation/private/qdeclarativecirclemapitem_p.h>
+#include <QtLocation/private/qdeclarativeroutemapitem_p.h>
+#include <QtLocation/private/qdeclarativepolylinemapitem_p.h>
+#include <QtLocation/private/qdeclarativepolygonmapitem_p.h>
+#include <QtLocation/private/qdeclarativegeomapparameter_p.h>
+#include <QtLocation/private/qdeclarativegeomapcopyrightsnotice_p.h>
+#include <QtLocation/private/qdeclarativegeomapitemgroup_p.h>
//Place includes
-#include "qdeclarativecategory_p.h"
-#include "qdeclarativeplace_p.h"
-#include "qdeclarativeplaceattribute_p.h"
-#include "qdeclarativeplaceicon_p.h"
-#include "qdeclarativeratings_p.h"
-#include "qdeclarativesupplier_p.h"
-#include "qdeclarativeplaceuser_p.h"
-#include "qdeclarativecontactdetail_p.h"
-
-#include "qdeclarativesupportedcategoriesmodel_p.h"
-#include "qdeclarativesearchresultmodel_p.h"
-#include "qdeclarativesearchsuggestionmodel_p.h"
-#include "error_messages.h"
+#include <QtLocation/private/qdeclarativecategory_p.h>
+#include <QtLocation/private/qdeclarativeplace_p.h>
+#include <QtLocation/private/qdeclarativeplaceattribute_p.h>
+#include <QtLocation/private/qdeclarativeplaceicon_p.h>
+#include <QtLocation/private/qdeclarativeratings_p.h>
+#include <QtLocation/private/qdeclarativesupplier_p.h>
+#include <QtLocation/private/qdeclarativeplaceuser_p.h>
+#include <QtLocation/private/qdeclarativecontactdetail_p.h>
+
+#include <QtLocation/private/qdeclarativesupportedcategoriesmodel_p.h>
+#include <QtLocation/private/qdeclarativesearchresultmodel_p.h>
+#include <QtLocation/private/qdeclarativesearchsuggestionmodel_p.h>
+#include <QtLocation/error_messages.h>
#include <QtQml/qqmlextensionplugin.h>
@@ -170,7 +173,8 @@ public:
// Register the 5.9 types
minor = 9;
qmlRegisterType<QDeclarativeGeoMapParameter>(uri, major, minor, "MapParameter");
-
+ qmlRegisterType<QDeclarativeGeoMapCopyrightNotice>(uri, major, minor, "MapCopyrightNotice");
+ qmlRegisterType<QDeclarativeGeoMapItemGroup>(uri, major, minor, "MapItemGroup");
//registrations below are version independent
qRegisterMetaType<QPlaceCategory>();
diff --git a/src/imports/location/location.pro b/src/imports/location/location.pro
index e733a768..dec1149b 100644
--- a/src/imports/location/location.pro
+++ b/src/imports/location/location.pro
@@ -1,71 +1,10 @@
QT += quick-private network positioning-private location-private qml-private core-private gui-private
-INCLUDEPATH += ../../location
-INCLUDEPATH += ../../location/maps
-INCLUDEPATH += ../../positioning
-INCLUDEPATH += ../positioning
-INCLUDEPATH *= $$PWD
-
-HEADERS += \
- qdeclarativegeomapitemview_p.h \
- qdeclarativegeoserviceprovider_p.h \
- qdeclarativegeocodemodel_p.h \
- qdeclarativegeoroutemodel_p.h \
- qdeclarativegeoroute_p.h \
- qdeclarativegeoroutesegment_p.h \
- qdeclarativegeomaneuver_p.h \
- qdeclarativegeomap_p.h \
- qdeclarativegeomaptype_p.h \
- qdeclarativegeomapitembase_p.h \
- qdeclarativegeomapquickitem_p.h \
- qdeclarativecirclemapitem_p.h \
- qdeclarativerectanglemapitem_p.h \
- qdeclarativepolygonmapitem_p.h \
- qdeclarativepolylinemapitem_p.h \
- qdeclarativeroutemapitem_p.h \
- qgeomapitemgeometry_p.h \
- qdeclarativegeomapcopyrightsnotice_p.h \
- error_messages.h \
- locationvaluetypehelper_p.h\
- qquickgeomapgesturearea_p.h\
- ../positioning/qquickgeocoordinateanimation_p.h \
- mapitemviewdelegateincubator.h \
- qdeclarativegeomapitemview_p_p.h \
- qdeclarativegeomapparameter_p.h
-
SOURCES += \
- location.cpp \
- qdeclarativegeomapitemview.cpp \
- qdeclarativegeoserviceprovider.cpp \
- qdeclarativegeocodemodel.cpp \
- qdeclarativegeoroutemodel.cpp \
- qdeclarativegeoroute.cpp \
- qdeclarativegeoroutesegment.cpp \
- qdeclarativegeomaneuver.cpp \
- qdeclarativegeomap.cpp \
- qdeclarativegeomaptype.cpp \
- qdeclarativegeomapitembase.cpp \
- qdeclarativegeomapquickitem.cpp \
- qdeclarativecirclemapitem.cpp \
- qdeclarativerectanglemapitem.cpp \
- qdeclarativepolygonmapitem.cpp \
- qdeclarativepolylinemapitem.cpp \
- qdeclarativeroutemapitem.cpp \
- qgeomapitemgeometry.cpp \
- qdeclarativegeomapcopyrightsnotice.cpp \
- error_messages.cpp \
- locationvaluetypehelper.cpp \
- qquickgeomapgesturearea.cpp \
- ../positioning/qquickgeocoordinateanimation.cpp \
- mapitemviewdelegateincubator.cpp \
- qdeclarativegeomapparameter.cpp
-
-include(declarativeplaces/declarativeplaces.pri)
+ location.cpp
load(qml_plugin)
-LIBS_PRIVATE += -L$$MODULE_BASE_OUTDIR/lib -lpoly2tri$$qtPlatformTargetSuffix() -lclip2tri$$qtPlatformTargetSuffix()
-
OTHER_FILES += \
plugin.json \
qmldir
diff --git a/src/imports/location/locationvaluetypehelper.cpp b/src/imports/location/locationvaluetypehelper.cpp
deleted file mode 100644
index 4f39e0b4..00000000
--- a/src/imports/location/locationvaluetypehelper.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "locationvaluetypehelper_p.h"
-
-
-QGeoCoordinate parseCoordinate(const QJSValue &value, bool *ok)
-{
- QGeoCoordinate c;
-
- if (value.isObject()) {
- if (value.hasProperty(QStringLiteral("latitude")))
- c.setLatitude(value.property(QStringLiteral("latitude")).toNumber());
- if (value.hasProperty(QStringLiteral("longitude")))
- c.setLongitude(value.property(QStringLiteral("longitude")).toNumber());
- if (value.hasProperty(QStringLiteral("altitude")))
- c.setAltitude(value.property(QStringLiteral("altitude")).toNumber());
-
- if (ok)
- *ok = true;
- }
-
- return c;
-}
-
-QGeoRectangle parseRectangle(const QJSValue &value, bool *ok)
-{
- QGeoRectangle r;
-
- *ok = false;
-
- if (value.isObject()) {
- if (value.hasProperty(QStringLiteral("bottomLeft"))) {
- QGeoCoordinate c = parseCoordinate(value.property(QStringLiteral("bottomLeft")), ok);
- if (*ok)
- r.setBottomLeft(c);
- }
- if (value.hasProperty(QStringLiteral("bottomRight"))) {
- QGeoCoordinate c = parseCoordinate(value.property(QStringLiteral("bottomRight")), ok);
- if (*ok)
- r.setBottomRight(c);
- }
- if (value.hasProperty(QStringLiteral("topLeft"))) {
- QGeoCoordinate c = parseCoordinate(value.property(QStringLiteral("topLeft")), ok);
- if (*ok)
- r.setTopLeft(c);
- }
- if (value.hasProperty(QStringLiteral("topRight"))) {
- QGeoCoordinate c = parseCoordinate(value.property(QStringLiteral("topRight")), ok);
- if (*ok)
- r.setTopRight(c);
- }
- if (value.hasProperty(QStringLiteral("center"))) {
- QGeoCoordinate c = parseCoordinate(value.property(QStringLiteral("center")), ok);
- if (*ok)
- r.setCenter(c);
- }
- if (value.hasProperty(QStringLiteral("height")))
- r.setHeight(value.property(QStringLiteral("height")).toNumber());
- if (value.hasProperty(QStringLiteral("width")))
- r.setWidth(value.property(QStringLiteral("width")).toNumber());
- }
-
- return r;
-}
-
-QGeoCircle parseCircle(const QJSValue &value, bool *ok)
-{
- QGeoCircle c;
-
- *ok = false;
-
- if (value.isObject()) {
- if (value.hasProperty(QStringLiteral("center"))) {
- QGeoCoordinate coord = parseCoordinate(value.property(QStringLiteral("center")), ok);
- if (*ok)
- c.setCenter(coord);
- }
- if (value.hasProperty(QStringLiteral("radius")))
- c.setRadius(value.property(QStringLiteral("radius")).toNumber());
- }
-
- return c;
-}
diff --git a/src/imports/location/locationvaluetypehelper_p.h b/src/imports/location/locationvaluetypehelper_p.h
deleted file mode 100644
index 50038e88..00000000
--- a/src/imports/location/locationvaluetypehelper_p.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 LOCATION_VALUE_TYPE_HELPER
-#define LOCATION_VALUE_TYPE_HELPER
-
-//
-// 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 <QJSValue>
-#include <QGeoCoordinate>
-#include <QGeoRectangle>
-#include <QGeoCircle>
-
-QGeoCoordinate parseCoordinate(const QJSValue &value, bool *ok);
-QGeoRectangle parseRectangle(const QJSValue &value, bool *ok);
-QGeoCircle parseCircle(const QJSValue &value, bool *ok);
-
-#endif
diff --git a/src/imports/location/mapitemviewdelegateincubator.cpp b/src/imports/location/mapitemviewdelegateincubator.cpp
deleted file mode 100644
index 06dee7ba..00000000
--- a/src/imports/location/mapitemviewdelegateincubator.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Copyright (C) 2015 Jolla Ltd, author: Aaron McCarthy <aaron.mccarthy@jollamobile.com>
-** 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 "mapitemviewdelegateincubator.h"
-#include "qdeclarativegeomapitemview_p.h"
-#include "qdeclarativegeomapitemview_p_p.h"
-
-QT_BEGIN_NAMESPACE
-
-MapItemViewDelegateIncubator::MapItemViewDelegateIncubator(QDeclarativeGeoMapItemView *view, QDeclarativeGeoMapItemViewItemData *itemData, bool batched)
-: m_view(view), m_itemData(itemData), m_batched(batched)
-{
-}
-
-void MapItemViewDelegateIncubator::statusChanged(QQmlIncubator::Status status)
-{
- m_view->incubatorStatusChanged(this, status, m_batched);
-}
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/mapitemviewdelegateincubator.h b/src/imports/location/mapitemviewdelegateincubator.h
deleted file mode 100644
index 94c73252..00000000
--- a/src/imports/location/mapitemviewdelegateincubator.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Copyright (C) 2015 Jolla Ltd, author: Aaron McCarthy <aaron.mccarthy@jollamobile.com>
-** 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 MAPITEMVIEWDELEGATEINCUBATOR_H
-#define MAPITEMVIEWDELEGATEINCUBATOR_H
-
-#include <QtQml/QQmlIncubator>
-#include "qdeclarativegeomapitemview_p_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoMapItemView;
-
-class MapItemViewDelegateIncubator : public QQmlIncubator
-{
-public:
- MapItemViewDelegateIncubator(QDeclarativeGeoMapItemView *view, QDeclarativeGeoMapItemViewItemData *itemData, bool batched = true);
-
-protected:
- void statusChanged(Status status) Q_DECL_OVERRIDE;
-
-private:
- QDeclarativeGeoMapItemView *m_view;
- QDeclarativeGeoMapItemViewItemData *m_itemData;
- bool m_batched;
-
- friend class QDeclarativeGeoMapItemView;
-};
-
-QT_END_NAMESPACE
-
-#endif // MAPITEMVIEWDELEGATEINCUBATOR_H
diff --git a/src/imports/location/qdeclarativecirclemapitem.cpp b/src/imports/location/qdeclarativecirclemapitem.cpp
deleted file mode 100644
index e107091c..00000000
--- a/src/imports/location/qdeclarativecirclemapitem.cpp
+++ /dev/null
@@ -1,654 +0,0 @@
-/***************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativecirclemapitem_p.h"
-#include "qdeclarativepolygonmapitem_p.h"
-#include "qgeocameracapabilities_p.h"
-#include "qwebmercator_p.h"
-
-#include <cmath>
-
-#include <QtCore/QScopedValueRollback>
-#include <QPen>
-#include <QPainter>
-
-#include "qdoublevector2d_p.h"
-#include "qlocationutils_p.h"
-
-/* poly2tri triangulator includes */
-#include "../../3rdparty/poly2tri/common/shapes.h"
-#include "../../3rdparty/poly2tri/sweep/cdt.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype MapCircle
- \instantiates QDeclarativeCircleMapItem
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-maps
- \since Qt Location 5.5
-
- \brief The MapCircle type displays a geographic circle on a Map.
-
- The MapCircle type displays a geographic circle on a Map, which
- consists of all points that are within a set distance from one
- central point. Depending on map projection, a geographic circle
- may not always be a perfect circle on the screen: for instance, in
- the Mercator projection, circles become ovoid in shape as they near
- the poles. To display a perfect screen circle around a point, use a
- MapQuickItem containing a relevant Qt Quick type instead.
-
- By default, the circle is displayed as a 1 pixel black border with
- no fill. To change its appearance, use the color, border.color
- and border.width properties.
-
- Internally, a MapCircle is implemented as a many-sided polygon. To
- calculate the radius points it uses a spherical model of the Earth,
- similar to the atDistanceAndAzimuth method of the \l {coordinate}
- type. These two things can occasionally have implications for the
- accuracy of the circle's shape, depending on position and map
- projection.
-
- \note Dragging a MapCircle (through the use of \l MouseArea)
- causes new points to be generated at the same distance (in meters)
- from the center. This is in contrast to other map items which store
- their dimensions in terms of latitude and longitude differences between
- vertices.
-
- \section2 Performance
-
- MapCircle performance is almost equivalent to that of a MapPolygon with
- the same number of vertices. There is a small amount of additional
- overhead with respect to calculating the vertices first.
-
- Like the other map objects, MapCircle is normally drawn without a smooth
- appearance. Setting the opacity property will force the object to be
- blended, which decreases performance considerably depending on the graphics
- hardware in use.
-
- \section2 Example Usage
-
- The following snippet shows a map containing a MapCircle, centered at
- the coordinate (-27, 153) with a radius of 5km. The circle is
- filled in green, with a 3 pixel black border.
-
- \code
- Map {
- MapCircle {
- center {
- latitude: -27.5
- longitude: 153.0
- }
- radius: 5000.0
- color: 'green'
- border.width: 3
- }
- }
- \endcode
-
- \image api-mapcircle.png
-*/
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-static const int CircleSamples = 128;
-
-struct Vertex
-{
- QVector2D position;
-};
-
-QGeoMapCircleGeometry::QGeoMapCircleGeometry()
-{
-}
-
-/*!
- \internal
-*/
-void QGeoMapCircleGeometry::updateScreenPointsInvert(const QGeoMap &map)
-{
- if (!screenDirty_)
- return;
-
- if (map.viewportWidth() == 0 || map.viewportHeight() == 0) {
- clear();
- return;
- }
-
- QPointF origin = map.geoProjection().coordinateToItemPosition(srcOrigin_, false).toPointF();
-
- QPainterPath ppi = srcPath_;
-
- clear();
-
- // a circle requires at least 3 points;
- if (ppi.elementCount() < 3)
- return;
-
- // translate the path into top-left-centric coordinates
- QRectF bb = ppi.boundingRect();
- ppi.translate(-bb.left(), -bb.top());
- firstPointOffset_ = -1 * bb.topLeft();
-
- ppi.closeSubpath();
-
- // calculate actual width of map on screen in pixels
- QGeoCoordinate mapCenter(0, map.cameraData().center().longitude());
- QDoubleVector2D midPoint = map.geoProjection().coordinateToItemPosition(mapCenter, false);
- QDoubleVector2D midPointPlusOne = QDoubleVector2D(midPoint.x() + 1.0, midPoint.y());
- QGeoCoordinate coord1 = map.geoProjection().itemPositionToCoordinate(midPointPlusOne, false);
- double geoDistance = coord1.longitude() - map.cameraData().center().longitude();
- if ( geoDistance < 0 )
- geoDistance += 360.0;
- double mapWidth = 360.0 / geoDistance;
-
- qreal leftOffset = origin.x() - (map.viewportWidth()/2.0 - mapWidth/2.0) - firstPointOffset_.x();
- qreal topOffset = origin.y() - (midPoint.y() - mapWidth/2.0) - firstPointOffset_.y();
- QPainterPath ppiBorder;
- ppiBorder.moveTo(QPointF(-leftOffset, -topOffset));
- ppiBorder.lineTo(QPointF(mapWidth - leftOffset, -topOffset));
- ppiBorder.lineTo(QPointF(mapWidth - leftOffset, mapWidth - topOffset));
- ppiBorder.lineTo(QPointF(-leftOffset, mapWidth - topOffset));
-
- screenOutline_ = ppiBorder;
-
- std::vector<p2t::Point*> borderPts;
- borderPts.reserve(4);
-
- std::vector<p2t::Point*> curPts;
- curPts.reserve(ppi.elementCount());
- for (int i = 0; i < ppi.elementCount(); ++i) {
- const QPainterPath::Element e = ppi.elementAt(i);
- if (e.isMoveTo() || i == ppi.elementCount() - 1
- || (qAbs(e.x - curPts.front()->x) < 0.1
- && qAbs(e.y - curPts.front()->y) < 0.1)) {
- if (curPts.size() > 2) {
- for (int j = 0; j < 4; ++j) {
- const QPainterPath::Element e2 = ppiBorder.elementAt(j);
- borderPts.push_back(new p2t::Point(e2.x, e2.y));
- }
- p2t::CDT *cdt = new p2t::CDT(borderPts);
- cdt->AddHole(curPts);
- cdt->Triangulate();
- std::vector<p2t::Triangle*> tris = cdt->GetTriangles();
- screenVertices_.reserve(screenVertices_.size() + int(tris.size()));
- for (size_t i = 0; i < tris.size(); ++i) {
- p2t::Triangle *t = tris.at(i);
- for (int j = 0; j < 3; ++j) {
- p2t::Point *p = t->GetPoint(j);
- screenVertices_ << QPointF(p->x, p->y);
- }
- }
- delete cdt;
- }
- curPts.clear();
- curPts.reserve(ppi.elementCount() - i);
- curPts.push_back(new p2t::Point(e.x, e.y));
- } else if (e.isLineTo()) {
- curPts.push_back(new p2t::Point(e.x, e.y));
- } else {
- qWarning("Unhandled element type in circle painterpath");
- }
- }
-
- if (curPts.size() > 0) {
- qDeleteAll(curPts.begin(), curPts.end());
- curPts.clear();
- }
-
- if (borderPts.size() > 0) {
- qDeleteAll(borderPts.begin(), borderPts.end());
- borderPts.clear();
- }
-
- screenBounds_ = ppiBorder.boundingRect();
-
-}
-
-static const qreal qgeocoordinate_EARTH_MEAN_RADIUS = 6371.0072;
-
-inline static qreal qgeocoordinate_degToRad(qreal deg)
-{
- return deg * M_PI / 180;
-}
-inline static qreal qgeocoordinate_radToDeg(qreal rad)
-{
- return rad * 180 / M_PI;
-}
-
-static bool crossEarthPole(const QGeoCoordinate &center, qreal distance)
-{
- qreal poleLat = 90;
- QGeoCoordinate northPole = QGeoCoordinate(poleLat, center.longitude());
- QGeoCoordinate southPole = QGeoCoordinate(-poleLat, center.longitude());
- // approximate using great circle distance
- qreal distanceToNorthPole = center.distanceTo(northPole);
- qreal distanceToSouthPole = center.distanceTo(southPole);
- if (distanceToNorthPole < distance || distanceToSouthPole < distance)
- return true;
- return false;
-}
-
-static void calculatePeripheralPoints(QList<QGeoCoordinate> &path,
- const QGeoCoordinate &center,
- qreal distance,
- int steps,
- QGeoCoordinate &leftBound )
-{
- // Calculate points based on great-circle distance
- // Calculation is the same as GeoCoordinate's atDistanceAndAzimuth function
- // but tweaked here for computing multiple points
-
- // pre-calculations
- steps = qMax(steps, 3);
- qreal centerLon = center.longitude();
- qreal minLon = centerLon;
- qreal latRad = qgeocoordinate_degToRad(center.latitude());
- qreal lonRad = qgeocoordinate_degToRad(centerLon);
- qreal cosLatRad = std::cos(latRad);
- qreal sinLatRad = std::sin(latRad);
- qreal ratio = (distance / (qgeocoordinate_EARTH_MEAN_RADIUS * 1000.0));
- qreal cosRatio = std::cos(ratio);
- qreal sinRatio = std::sin(ratio);
- qreal sinLatRad_x_cosRatio = sinLatRad * cosRatio;
- qreal cosLatRad_x_sinRatio = cosLatRad * sinRatio;
- int idx = 0;
- for (int i = 0; i < steps; ++i) {
- qreal azimuthRad = 2 * M_PI * i / steps;
- qreal resultLatRad = std::asin(sinLatRad_x_cosRatio
- + cosLatRad_x_sinRatio * std::cos(azimuthRad));
- qreal resultLonRad = lonRad + std::atan2(std::sin(azimuthRad) * cosLatRad_x_sinRatio,
- cosRatio - sinLatRad * std::sin(resultLatRad));
- qreal lat2 = qgeocoordinate_radToDeg(resultLatRad);
- qreal lon2 = QLocationUtils::wrapLong(qgeocoordinate_radToDeg(resultLonRad));
-
- path << QGeoCoordinate(lat2, lon2, center.altitude());
- // Consider only points in the left half of the circle for the left bound.
- if (azimuthRad > M_PI) {
- if (lon2 > centerLon) // if point and center are on different hemispheres
- lon2 -= 360;
- if (lon2 < minLon) {
- minLon = lon2;
- idx = i;
- }
- }
- }
- leftBound = path.at(idx);
-}
-
-QDeclarativeCircleMapItem::QDeclarativeCircleMapItem(QQuickItem *parent)
-: QDeclarativeGeoMapItemBase(parent), color_(Qt::transparent), radius_(0), dirtyMaterial_(true),
- updatingGeometry_(false)
-{
- setFlag(ItemHasContents, true);
- QObject::connect(&border_, SIGNAL(colorChanged(QColor)),
- this, SLOT(markSourceDirtyAndUpdate()));
- QObject::connect(&border_, SIGNAL(widthChanged(qreal)),
- this, SLOT(markSourceDirtyAndUpdate()));
-
- // assume that circles are not self-intersecting
- // to speed up processing
- // FIXME: unfortunately they self-intersect at the poles due to current drawing method
- // so the line is commented out until fixed
- //geometry_.setAssumeSimple(true);
-
-}
-
-QDeclarativeCircleMapItem::~QDeclarativeCircleMapItem()
-{
-}
-
-/*!
- \qmlpropertygroup Location::MapCircle::border
- \qmlproperty int MapCircle::border.width
- \qmlproperty color MapCircle::border.color
-
- This property is part of the border group property.
- The border property holds the width and color used to draw the border of the circle.
- The width is in pixels and is independent of the zoom level of the map.
-
- The default values correspond to a black border with a width of 1 pixel.
- For no line, use a width of 0 or a transparent color.
-*/
-QDeclarativeMapLineProperties *QDeclarativeCircleMapItem::border()
-{
- return &border_;
-}
-
-void QDeclarativeCircleMapItem::markSourceDirtyAndUpdate()
-{
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- polishAndUpdate();
-}
-
-void QDeclarativeCircleMapItem::setMap(QDeclarativeGeoMap *quickMap, QGeoMap *map)
-{
- QDeclarativeGeoMapItemBase::setMap(quickMap,map);
- if (map)
- markSourceDirtyAndUpdate();
-}
-
-/*!
- \qmlproperty coordinate MapCircle::center
-
- This property holds the central point about which the circle is defined.
-
- \sa radius
-*/
-void QDeclarativeCircleMapItem::setCenter(const QGeoCoordinate &center)
-{
- if (center_ == center)
- return;
-
- center_ = center;
- markSourceDirtyAndUpdate();
- emit centerChanged(center_);
-}
-
-QGeoCoordinate QDeclarativeCircleMapItem::center()
-{
- return center_;
-}
-
-/*!
- \qmlproperty color MapCircle::color
-
- This property holds the fill color of the circle when drawn. For no fill,
- use a transparent color.
-*/
-void QDeclarativeCircleMapItem::setColor(const QColor &color)
-{
- if (color_ == color)
- return;
- color_ = color;
- dirtyMaterial_ = true;
- update();
- emit colorChanged(color_);
-}
-
-QColor QDeclarativeCircleMapItem::color() const
-{
- return color_;
-}
-
-/*!
- \qmlproperty real MapCircle::radius
-
- This property holds the radius of the circle, in meters on the ground.
-
- \sa center
-*/
-void QDeclarativeCircleMapItem::setRadius(qreal radius)
-{
- if (radius_ == radius)
- return;
-
- radius_ = radius;
- markSourceDirtyAndUpdate();
- emit radiusChanged(radius);
-}
-
-qreal QDeclarativeCircleMapItem::radius() const
-{
- return radius_;
-}
-
-/*!
- \qmlproperty real MapCircle::opacity
-
- This property holds the opacity of the item. Opacity is specified as a
- number between 0 (fully transparent) and 1 (fully opaque). The default is 1.
-
- An item with 0 opacity will still receive mouse events. To stop mouse events, set the
- visible property of the item to false.
-*/
-
-/*!
- \internal
-*/
-QSGNode *QDeclarativeCircleMapItem::updateMapItemPaintNode(QSGNode *oldNode, UpdatePaintNodeData *data)
-{
- Q_UNUSED(data);
-
- MapPolygonNode *node = static_cast<MapPolygonNode *>(oldNode);
-
- if (!node)
- node = new MapPolygonNode();
-
- //TODO: update only material
- if (geometry_.isScreenDirty() || borderGeometry_.isScreenDirty() || dirtyMaterial_) {
- node->update(color_, border_.color(), &geometry_, &borderGeometry_);
- geometry_.setPreserveGeometry(false);
- borderGeometry_.setPreserveGeometry(false);
- geometry_.markClean();
- borderGeometry_.markClean();
- dirtyMaterial_ = false;
- }
- return node;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeCircleMapItem::updatePolish()
-{
- if (!map() || !center().isValid() || qIsNaN(radius_) || radius_ <= 0.0)
- return;
-
- QScopedValueRollback<bool> rollback(updatingGeometry_);
- updatingGeometry_ = true;
-
- if (geometry_.isSourceDirty()) {
- circlePath_.clear();
- calculatePeripheralPoints(circlePath_, center_, radius_, CircleSamples, geoLeftBound_);
- }
-
- int pathCount = circlePath_.size();
- bool preserve = preserveCircleGeometry(circlePath_, center_, radius_);
- geometry_.setPreserveGeometry(preserve, geoLeftBound_);
- geometry_.updateSourcePoints(*map(), circlePath_);
- if (crossEarthPole(center_, radius_) && circlePath_.size() == pathCount)
- geometry_.updateScreenPointsInvert(*map()); // invert fill area for really huge circles
- else geometry_.updateScreenPoints(*map());
-
- if (border_.color() != Qt::transparent && border_.width() > 0) {
- QList<QGeoCoordinate> closedPath = circlePath_;
- closedPath << closedPath.first();
- borderGeometry_.setPreserveGeometry(preserve, geoLeftBound_);
- borderGeometry_.updateSourcePoints(*map(), closedPath, geoLeftBound_);
- borderGeometry_.updateScreenPoints(*map(), border_.width());
-
- QList<QGeoMapItemGeometry *> geoms;
- geoms << &geometry_ << &borderGeometry_;
- QRectF combined = QGeoMapItemGeometry::translateToCommonOrigin(geoms);
-
- setWidth(combined.width());
- setHeight(combined.height());
- } else {
- borderGeometry_.clear();
- setWidth(geometry_.screenBoundingBox().width());
- setHeight(geometry_.screenBoundingBox().height());
- }
-
- setPositionOnMap(circlePath_.at(0), geometry_.firstPointOffset());
-}
-
-/*!
- \internal
-*/
-void QDeclarativeCircleMapItem::afterViewportChanged(const QGeoMapViewportChangeEvent &event)
-{
- if (event.mapSize.width() <= 0 || event.mapSize.height() <= 0)
- return;
-
- // if the scene is tilted, we must regenerate our geometry every frame
- if (map()->cameraCapabilities().supportsTilting()
- && (event.cameraData.tilt() > 0.1
- || event.cameraData.tilt() < -0.1)) {
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- }
-
- // if the scene is rolled, we must regen too
- if (map()->cameraCapabilities().supportsRolling()
- && (event.cameraData.roll() > 0.1
- || event.cameraData.roll() < -0.1)) {
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- }
-
- // otherwise, only regen on rotate, resize and zoom
- if (event.bearingChanged || event.mapSizeChanged || event.zoomLevelChanged) {
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- }
-
- if (event.centerChanged && crossEarthPole(center_, radius_)) {
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- }
-
- geometry_.markScreenDirty();
- borderGeometry_.markScreenDirty();
- polishAndUpdate();
-}
-
-/*!
- \internal
-*/
-bool QDeclarativeCircleMapItem::contains(const QPointF &point) const
-{
- return (geometry_.contains(point) || borderGeometry_.contains(point));
-}
-
-/*!
- \internal
-*/
-void QDeclarativeCircleMapItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
-{
- if (updatingGeometry_ || newGeometry == oldGeometry) {
- QDeclarativeGeoMapItemBase::geometryChanged(newGeometry, oldGeometry);
- return;
- }
-
- QDoubleVector2D newPoint = QDoubleVector2D(x(),y()) + QDoubleVector2D(width(), height()) / 2;
- QGeoCoordinate newCoordinate = map()->geoProjection().itemPositionToCoordinate(newPoint, false);
- if (newCoordinate.isValid())
- setCenter(newCoordinate);
-
- // Not calling QDeclarativeGeoMapItemBase::geometryChanged() as it will be called from a nested
- // call to this function.
-}
-
-bool QDeclarativeCircleMapItem::preserveCircleGeometry (QList<QGeoCoordinate> &path,
- const QGeoCoordinate &center, qreal distance)
-{
- // if circle crosses north/south pole, then don't preserve circular shape,
- if ( crossEarthPole(center, distance)) {
- updateCirclePathForRendering(path, center, distance);
- return false;
- }
- return true;
-
-}
-
-
-// A workaround for circle path to be drawn correctly using a polygon geometry
-void QDeclarativeCircleMapItem::updateCirclePathForRendering(QList<QGeoCoordinate> &path,
- const QGeoCoordinate &center,
- qreal distance)
-{
- qreal poleLat = 90;
- qreal distanceToNorthPole = center.distanceTo(QGeoCoordinate(poleLat, 0));
- qreal distanceToSouthPole = center.distanceTo(QGeoCoordinate(-poleLat, 0));
- bool crossNorthPole = distanceToNorthPole < distance;
- bool crossSouthPole = distanceToSouthPole < distance;
- if (!crossNorthPole && !crossSouthPole)
- return;
- QList<int> wrapPathIndex;
- // calculate actual width of map on screen in pixels
- QDoubleVector2D midPoint = map()->geoProjection().coordinateToItemPosition(map()->cameraData().center(), false);
- QDoubleVector2D midPointPlusOne(midPoint.x() + 1.0, midPoint.y());
- QGeoCoordinate coord1 = map()->geoProjection().itemPositionToCoordinate(midPointPlusOne, false);
- qreal geoDistance = coord1.longitude() - map()->cameraData().center().longitude();
- if ( geoDistance < 0 )
- geoDistance += 360;
- qreal mapWidth = 360.0 / geoDistance;
- mapWidth = qMin(static_cast<int>(mapWidth), map()->viewportWidth());
- QDoubleVector2D prev = map()->geoProjection().coordinateToItemPosition(path.at(0), false);
- // find the points in path where wrapping occurs
- for (int i = 1; i <= path.count(); ++i) {
- int index = i % path.count();
- QDoubleVector2D point = map()->geoProjection().coordinateToItemPosition(path.at(index), false);
- if ( (qAbs(point.x() - prev.x())) >= mapWidth/2.0 ) {
- wrapPathIndex << index;
- if (wrapPathIndex.size() == 2 || !(crossNorthPole && crossSouthPole))
- break;
- }
- prev = point;
- }
- // insert two additional coords at top/bottom map corners of the map for shape
- // to be drawn correctly
- if (wrapPathIndex.size() > 0) {
- qreal newPoleLat = 90;
- QGeoCoordinate wrapCoord = path.at(wrapPathIndex[0]);
- if (wrapPathIndex.size() == 2) {
- QGeoCoordinate wrapCoord2 = path.at(wrapPathIndex[1]);
- if (wrapCoord2.latitude() > wrapCoord.latitude())
- newPoleLat = -90;
- } else if (center.latitude() < 0) {
- newPoleLat = -90;
- }
- for (int i = 0; i < wrapPathIndex.size(); ++i) {
- int index = wrapPathIndex[i] == 0 ? 0 : wrapPathIndex[i] + i*2;
- int prevIndex = (index - 1) < 0 ? (path.count() - 1): index - 1;
- QGeoCoordinate coord0 = path.at(prevIndex);
- QGeoCoordinate coord1 = path.at(index);
- coord0.setLatitude(newPoleLat);
- coord1.setLatitude(newPoleLat);
- path.insert(index ,coord1);
- path.insert(index, coord0);
- newPoleLat = -newPoleLat;
- }
- }
-}
-
-//////////////////////////////////////////////////////////////////////
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativecirclemapitem_p.h b/src/imports/location/qdeclarativecirclemapitem_p.h
deleted file mode 100644
index c91d1606..00000000
--- a/src/imports/location/qdeclarativecirclemapitem_p.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVECIRCLEMAPITEM_H
-#define QDECLARATIVECIRCLEMAPITEM_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 "qdeclarativegeomapitembase_p.h"
-#include "qdeclarativepolylinemapitem_p.h"
-#include "qdeclarativepolygonmapitem_p.h"
-#include <QSGGeometryNode>
-#include <QSGFlatColorMaterial>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoMapCircleGeometry : public QGeoMapPolygonGeometry
-{
-public:
- QGeoMapCircleGeometry();
-
- void updateScreenPointsInvert(const QGeoMap &map);
-};
-
-class QDeclarativeCircleMapItem : public QDeclarativeGeoMapItemBase
-{
- Q_OBJECT
- Q_PROPERTY(QGeoCoordinate center READ center WRITE setCenter NOTIFY centerChanged)
- Q_PROPERTY(qreal radius READ radius WRITE setRadius NOTIFY radiusChanged)
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
- Q_PROPERTY(QDeclarativeMapLineProperties *border READ border CONSTANT)
-
-public:
- explicit QDeclarativeCircleMapItem(QQuickItem *parent = 0);
- ~QDeclarativeCircleMapItem();
-
- virtual void setMap(QDeclarativeGeoMap *quickMap, QGeoMap *map) Q_DECL_OVERRIDE;
- virtual QSGNode *updateMapItemPaintNode(QSGNode *, UpdatePaintNodeData *) Q_DECL_OVERRIDE;
-
- QGeoCoordinate center();
- void setCenter(const QGeoCoordinate &center);
-
- qreal radius() const;
- void setRadius(qreal radius);
-
- QColor color() const;
- void setColor(const QColor &color);
-
- QDeclarativeMapLineProperties *border();
-
- bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
-
-Q_SIGNALS:
- void centerChanged(const QGeoCoordinate &center);
- void radiusChanged(qreal radius);
- void colorChanged(const QColor &color);
-
-protected:
- void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE;
- void updatePolish() Q_DECL_OVERRIDE;
-
-protected Q_SLOTS:
- void markSourceDirtyAndUpdate();
- virtual void afterViewportChanged(const QGeoMapViewportChangeEvent &event) Q_DECL_OVERRIDE;
-
-private:
- bool preserveCircleGeometry(QList<QGeoCoordinate> &path, const QGeoCoordinate &center,
- qreal distance);
- void updateCirclePathForRendering(QList<QGeoCoordinate> &path, const QGeoCoordinate &center,
- qreal distance);
-
-private:
- QGeoCoordinate center_;
- QDeclarativeMapLineProperties border_;
- QColor color_;
- qreal radius_;
- QGeoCoordinate geoLeftBound_;
- QList<QGeoCoordinate> circlePath_;
- bool dirtyMaterial_;
- QGeoMapCircleGeometry geometry_;
- QGeoMapPolylineGeometry borderGeometry_;
- bool updatingGeometry_;
-};
-
-//////////////////////////////////////////////////////////////////////
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeCircleMapItem)
-
-#endif /* QDECLARATIVECIRCLEMAPITEM_H */
diff --git a/src/imports/location/qdeclarativegeocodemodel.cpp b/src/imports/location/qdeclarativegeocodemodel.cpp
deleted file mode 100644
index e92949ee..00000000
--- a/src/imports/location/qdeclarativegeocodemodel.cpp
+++ /dev/null
@@ -1,727 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativegeocodemodel_p.h"
-#include "error_messages.h"
-
-#include <QtCore/QCoreApplication>
-#include <QtQml/QQmlInfo>
-#include <QtPositioning/QGeoCircle>
-#include <QtLocation/QGeoServiceProvider>
-#include <QtLocation/QGeoCodingManager>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype GeocodeModel
- \instantiates QDeclarativeGeocodeModel
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-geocoding
- \since Qt Location 5.5
-
- \brief The GeocodeModel type provides support for searching operations
- related to geographic information.
-
- The GeocodeModel type is used as part of a model/view grouping to
- match addresses or search strings with geographic locations. How the
- geographic locations generated are used or displayed is decided by any
- Views attached to the GeocodeModel (for example a \l MapItemView or \l{ListView}).
-
- Like \l Map and \l RouteModel, all the data for a GeocodeModel to work
- comes from a services plugin. This is contained in the \l{plugin} property,
- and this must be set before the GeocodeModel can do any useful work.
-
- Once the plugin is set, the \l{query} property can be used to specify the
- address or search string to match. If \l{autoUpdate} is enabled, the Model
- will update its output automatically. Otherwise, the \l{update} method may
- be used. By default, autoUpdate is disabled.
-
- The data stored and returned in the GeocodeModel consists of \l{Location}
- objects, as a list with the role name "locationData". See the documentation
- for \l{Location} for further details on its structure and contents.
-
- \section2 Example Usage
-
- The following snippet is two-part, showing firstly the declaration of
- objects, and secondly a short piece of procedural code using it. We set
- the geocodeModel's \l{autoUpdate} property to false, and call \l{update} once
- the query is set up. In this case, as we use a string value in \l{query},
- only one update would occur, even with autoUpdate enabled. However, if we
- provided an \l{Address} object we may inadvertently trigger multiple
- requests whilst setting its properties.
-
- \code
- Plugin {
- id: aPlugin
- }
-
- GeocodeModel {
- id: geocodeModel
- plugin: aPlugin
- autoUpdate: false
- }
- \endcode
-
- \code
- {
- geocodeModel.query = "53 Brandl St, Eight Mile Plains, Australia"
- geocodeModel.update()
- }
- \endcode
-*/
-
-/*!
- \qmlsignal QtLocation::GeocodeModel::locationsChanged()
-
- This signal is emitted when locations in the model have changed.
-
- \sa count
-*/
-
-
-QDeclarativeGeocodeModel::QDeclarativeGeocodeModel(QObject *parent)
-: QAbstractListModel(parent), autoUpdate_(false), complete_(false), reply_(0), plugin_(0),
- status_(QDeclarativeGeocodeModel::Null), error_(QDeclarativeGeocodeModel::NoError),
- address_(0), limit_(-1), offset_(0)
-{
-}
-
-QDeclarativeGeocodeModel::~QDeclarativeGeocodeModel()
-{
- qDeleteAll(declarativeLocations_);
- declarativeLocations_.clear();
- delete reply_;
-}
-
-/*!
- \internal
- From QQmlParserStatus
-*/
-void QDeclarativeGeocodeModel::componentComplete()
-{
- complete_ = true;
- if (autoUpdate_)
- update();
-}
-
-/*!
- \qmlmethod void QtLocation::GeocodeModel::update()
-
- Instructs the GeocodeModel to update its data. This is most useful
- when \l autoUpdate is disabled, to force a refresh when the query
- has been changed.
-*/
-void QDeclarativeGeocodeModel::update()
-{
- if (!complete_)
- return;
-
- if (!plugin_) {
- setError(EngineNotSetError, tr("Cannot geocode, plugin not set."));
- return;
- }
-
- QGeoServiceProvider *serviceProvider = plugin_->sharedGeoServiceProvider();
- if (!serviceProvider)
- return;
-
- QGeoCodingManager *geocodingManager = serviceProvider->geocodingManager();
- if (!geocodingManager) {
- setError(EngineNotSetError, tr("Cannot geocode, geocode manager not set."));
- return;
- }
- if (!coordinate_.isValid() && (!address_ || address_->address().isEmpty()) &&
- (searchString_.isEmpty())) {
- setError(ParseError, tr("Cannot geocode, valid query not set."));
- return;
- }
- abortRequest(); // abort possible previous requests
- setError(NoError, QString());
-
- if (coordinate_.isValid()) {
- setStatus(QDeclarativeGeocodeModel::Loading);
- reply_ = geocodingManager->reverseGeocode(coordinate_, boundingArea_);
- if (reply_->isFinished()) {
- if (reply_->error() == QGeoCodeReply::NoError) {
- geocodeFinished(reply_);
- } else {
- geocodeError(reply_, reply_->error(), reply_->errorString());
- }
- }
- } else if (address_) {
- setStatus(QDeclarativeGeocodeModel::Loading);
- reply_ = geocodingManager->geocode(address_->address(), boundingArea_);
- if (reply_->isFinished()) {
- if (reply_->error() == QGeoCodeReply::NoError) {
- geocodeFinished(reply_);
- } else {
- geocodeError(reply_, reply_->error(), reply_->errorString());
- }
- }
- } else if (!searchString_.isEmpty()) {
- setStatus(QDeclarativeGeocodeModel::Loading);
- reply_ = geocodingManager->geocode(searchString_, limit_, offset_, boundingArea_);
- if (reply_->isFinished()) {
- if (reply_->error() == QGeoCodeReply::NoError) {
- geocodeFinished(reply_);
- } else {
- geocodeError(reply_, reply_->error(), reply_->errorString());
- }
- }
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeocodeModel::abortRequest()
-{
- if (reply_) {
- reply_->abort();
- reply_->deleteLater();
- reply_ = 0;
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeocodeModel::queryContentChanged()
-{
- if (autoUpdate_)
- update();
-}
-
-/*!
- \internal
- From QAbstractListModel
-*/
-int QDeclarativeGeocodeModel::rowCount(const QModelIndex &parent) const
-{
- Q_UNUSED(parent)
- return declarativeLocations_.count();
-}
-
-/*!
- \internal
-*/
-QVariant QDeclarativeGeocodeModel::data(const QModelIndex &index, int role) const
-{
- if (!index.isValid())
- return QVariant();
- if (index.row() >= declarativeLocations_.count())
- return QVariant();
- if (role == QDeclarativeGeocodeModel::LocationRole) {
- QObject *locationObject = declarativeLocations_.at(index.row());
- Q_ASSERT(locationObject);
- return QVariant::fromValue(locationObject);
- }
- return QVariant();
-}
-
-QHash<int, QByteArray> QDeclarativeGeocodeModel::roleNames() const
-{
- QHash<int, QByteArray> roleNames = QAbstractItemModel::roleNames();
- roleNames.insert(LocationRole, "locationData");
- return roleNames;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeocodeModel::setPlugin(QDeclarativeGeoServiceProvider *plugin)
-{
- if (plugin_ == plugin)
- return;
-
- reset(); // reset the model
- plugin_ = plugin;
- if (complete_)
- emit pluginChanged();
-
- if (!plugin)
- return;
-
- if (plugin_->isAttached()) {
- pluginReady();
- } else {
- connect(plugin_, SIGNAL(attached()),
- this, SLOT(pluginReady()));
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeocodeModel::pluginReady()
-{
- QGeoServiceProvider *serviceProvider = plugin_->sharedGeoServiceProvider();
- QGeoCodingManager *geocodingManager = serviceProvider->geocodingManager();
-
- if (serviceProvider->error() != QGeoServiceProvider::NoError) {
- QDeclarativeGeocodeModel::GeocodeError newError = UnknownError;
- switch (serviceProvider->error()) {
- case QGeoServiceProvider::NotSupportedError:
- newError = EngineNotSetError; break;
- case QGeoServiceProvider::UnknownParameterError:
- newError = UnknownParameterError; break;
- case QGeoServiceProvider::MissingRequiredParameterError:
- newError = MissingRequiredParameterError; break;
- case QGeoServiceProvider::ConnectionError:
- newError = CommunicationError; break;
- default:
- break;
- }
-
- setError(newError, serviceProvider->errorString());
- return;
- }
-
- if (!geocodingManager) {
- setError(EngineNotSetError,tr("Plugin does not support (reverse) geocoding."));
- return;
- }
-
- connect(geocodingManager, SIGNAL(finished(QGeoCodeReply*)),
- this, SLOT(geocodeFinished(QGeoCodeReply*)));
- connect(geocodingManager, SIGNAL(error(QGeoCodeReply*,QGeoCodeReply::Error,QString)),
- this, SLOT(geocodeError(QGeoCodeReply*,QGeoCodeReply::Error,QString)));
-}
-
-/*!
- \qmlproperty Plugin QtLocation::GeocodeModel::plugin
-
- This property holds the plugin that provides the actual geocoding service.
- Note that all plugins do not necessarily provide geocoding (could for example provide
- only routing or maps).
-
- \sa Plugin
-*/
-
-QDeclarativeGeoServiceProvider *QDeclarativeGeocodeModel::plugin() const
-{
- return plugin_;
-}
-
-void QDeclarativeGeocodeModel::setBounds(const QVariant &boundingArea)
-{
- QGeoShape s;
-
- if (boundingArea.userType() == qMetaTypeId<QGeoRectangle>())
- s = boundingArea.value<QGeoRectangle>();
- else if (boundingArea.userType() == qMetaTypeId<QGeoCircle>())
- s = boundingArea.value<QGeoCircle>();
- else if (boundingArea.userType() == qMetaTypeId<QGeoShape>())
- s = boundingArea.value<QGeoShape>();
-
-
- if (boundingArea_ == s)
- return;
-
- boundingArea_ = s;
- emit boundsChanged();
-}
-
-/*!
- \qmlproperty geoshape QtLocation::GeocodeModel::bounds
-
- This property holds the bounding area used to limit the results to those
- within the area. This is particularly useful if query is only partially filled out,
- as the service will attempt to (reverse) geocode all matches for the specified data.
-
- Accepted types are \l {georectangle} and
- \l {geocircle}.
-*/
-QVariant QDeclarativeGeocodeModel::bounds() const
-{
- if (boundingArea_.type() == QGeoShape::RectangleType)
- return QVariant::fromValue(QGeoRectangle(boundingArea_));
- else if (boundingArea_.type() == QGeoShape::CircleType)
- return QVariant::fromValue(QGeoCircle(boundingArea_));
- else
- return QVariant::fromValue(boundingArea_);
-}
-
-void QDeclarativeGeocodeModel::geocodeFinished(QGeoCodeReply *reply)
-{
- if (reply != reply_ || reply->error() != QGeoCodeReply::NoError)
- return;
- int oldCount = declarativeLocations_.count();
- setLocations(reply->locations());
- setError(NoError, QString());
- setStatus(QDeclarativeGeocodeModel::Ready);
- reply->deleteLater();
- reply_ = 0;
- emit locationsChanged();
- if (oldCount != declarativeLocations_.count())
- emit countChanged();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeocodeModel::geocodeError(QGeoCodeReply *reply,
- QGeoCodeReply::Error error,
- const QString &errorString)
-{
- if (reply != reply_)
- return;
- Q_UNUSED(error);
- int oldCount = declarativeLocations_.count();
- if (oldCount > 0) {
- // Reset the model
- setLocations(reply->locations());
- emit locationsChanged();
- emit countChanged();
- }
- setError(static_cast<QDeclarativeGeocodeModel::GeocodeError>(error), errorString);
- setStatus(QDeclarativeGeocodeModel::Error);
- reply->deleteLater();
- reply_ = 0;
-}
-
-/*!
- \qmlproperty enumeration QtLocation::GeocodeModel::status
-
- This read-only property holds the current status of the model.
-
- \list
- \li GeocodeModel.Null - No geocode requests have been issued or \l reset has been called.
- \li GeocodeModel.Ready - Geocode request(s) have finished successfully.
- \li GeocodeModel.Loading - Geocode request has been issued but not yet finished
- \li GeocodeModel.Error - Geocoding error has occurred, details are in \l error and \l errorString
- \endlist
-*/
-
-QDeclarativeGeocodeModel::Status QDeclarativeGeocodeModel::status() const
-{
- return status_;
-}
-
-void QDeclarativeGeocodeModel::setStatus(QDeclarativeGeocodeModel::Status status)
-{
- if (status_ == status)
- return;
- status_ = status;
- emit statusChanged();
-}
-
-/*!
- \qmlproperty enumeration QtLocation::GeocodeModel::error
-
- This read-only property holds the latest error value of the geocoding request.
-
- \list
- \li GeocodeModel.NoError - No error has occurred.
- \li GeocodeModel.CombinationError - An error occurred while results where being combined from multiple sources.
- \li GeocodeModel.CommunicationError - An error occurred while communicating with the service provider.
- \li GeocodeModel.EngineNotSetError - The model's plugin property was not set or there is no geocoding manager associated with the plugin.
- \li GeocodeModel.MissingRequiredParameterError - A required parameter was not specified.
- \li GeocodeModel.ParseError - The response from the service provider was in an unrecognizable format.
- \li GeocodeModel.UnknownError - An error occurred which does not fit into any of the other categories.
- \li GeocodeModel.UnknownParameterError - The plugin did not recognize one of the parameters it was given.
- \li GeocodeModel.UnsupportedOptionError - The requested operation is not supported by the geocoding provider.
- This may happen when the loaded engine does not support a particular geocoding request
- such as reverse geocoding.
- \endlist
-*/
-
-QDeclarativeGeocodeModel::GeocodeError QDeclarativeGeocodeModel::error() const
-{
- return error_;
-}
-
-void QDeclarativeGeocodeModel::setError(GeocodeError error, const QString &errorString)
-{
- if (error_ == error && errorString_ == errorString)
- return;
- error_ = error;
- errorString_ = errorString;
- emit errorChanged();
-}
-
-/*!
- \qmlproperty string QtLocation::GeocodeModel::errorString
-
- This read-only property holds the textual presentation of the latest geocoding error.
- If no error has occurred or the model has been reset, an empty string is returned.
-
- An empty string may also be returned if an error occurred which has no associated
- textual representation.
-*/
-
-QString QDeclarativeGeocodeModel::errorString() const
-{
- return errorString_;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeocodeModel::setLocations(const QList<QGeoLocation> &locations)
-{
- beginResetModel();
- qDeleteAll(declarativeLocations_);
- declarativeLocations_.clear();
- for (int i = 0; i < locations.count(); ++i) {
- QDeclarativeGeoLocation *location = new QDeclarativeGeoLocation(locations.at(i), this);
- declarativeLocations_.append(location);
- }
- endResetModel();
-}
-
-/*!
- \qmlproperty int QtLocation::GeocodeModel::count
-
- This property holds how many locations the model currently has.
- Amongst other uses, you can use this value when accessing locations
- via the GeocodeModel::get -method.
-*/
-
-int QDeclarativeGeocodeModel::count() const
-{
- return declarativeLocations_.count();
-}
-
-/*!
- \qmlmethod Location QtLocation::GeocodeModel::get(int)
-
- Returns the Location at given index. Use \l count property to check the
- amount of locations available. The locations are indexed from zero, so the accessible range
- is 0...(count - 1).
-
- If you access out of bounds, a zero (null object) is returned and a warning is issued.
-*/
-
-QDeclarativeGeoLocation *QDeclarativeGeocodeModel::get(int index)
-{
- if (index < 0 || index >= declarativeLocations_.count()) {
- qmlWarning(this) << QStringLiteral("Index '%1' out of range").arg(index);
- return 0;
- }
- return declarativeLocations_.at(index);
-}
-
-/*!
- \qmlproperty int QtLocation::GeocodeModel::limit
-
- This property holds the maximum number of results. The limit and \l offset values are only
- applicable with free string geocoding (that is they are not considered when using addresses
- or coordinates in the search query).
-
- If limit is -1 the entire result set will be returned, otherwise at most limit results will be
- returned. The limit and \l offset results can be used together to implement paging.
-*/
-
-int QDeclarativeGeocodeModel::limit() const
-{
- return limit_;
-}
-
-void QDeclarativeGeocodeModel::setLimit(int limit)
-{
- if (limit == limit_)
- return;
- limit_ = limit;
- if (autoUpdate_) {
- update();
- }
- emit limitChanged();
-}
-
-/*!
- \qmlproperty int QtLocation::GeocodeModel::offset
-
- This property tells not to return the first 'offset' number of the results. The \l limit and
- offset values are only applicable with free string geocoding (that is they are not considered
- when using addresses or coordinates in the search query).
-
- The \l limit and offset results can be used together to implement paging.
-*/
-
-int QDeclarativeGeocodeModel::offset() const
-{
- return offset_;
-}
-
-void QDeclarativeGeocodeModel::setOffset(int offset)
-{
- if (offset == offset_)
- return;
- offset_ = offset;
- if (autoUpdate_) {
- update();
- }
- emit offsetChanged();
-}
-
-/*!
- \qmlmethod void QtLocation::GeocodeModel::reset()
-
- Resets the model. All location data is cleared, any outstanding requests
- are aborted and possible errors are cleared. Model status will be set
- to GeocodeModel.Null
-*/
-
-void QDeclarativeGeocodeModel::reset()
-{
- beginResetModel();
- if (!declarativeLocations_.isEmpty()) {
- setLocations(QList<QGeoLocation>());
- emit countChanged();
- }
- endResetModel();
-
- abortRequest();
- setError(NoError, QString());
- setStatus(QDeclarativeGeocodeModel::Null);
-}
-
-/*!
- \qmlmethod void QtLocation::GeocodeModel::cancel()
-
- Cancels any outstanding requests and clears errors. Model status will be set to either
- GeocodeModel.Null or GeocodeModel.Ready.
-*/
-void QDeclarativeGeocodeModel::cancel()
-{
- abortRequest();
- setError(NoError, QString());
- setStatus(declarativeLocations_.isEmpty() ? Null : Ready);
-}
-
-/*!
- \qmlproperty QVariant QtLocation::GeocodeModel::query
-
- This property holds the data of the geocoding request.
- The property accepts three types of queries which determine both the data and
- the type of action to be performed:
-
- \list
- \li Address - Geocoding (address to coordinate)
- \li \l {coordinate} - Reverse geocoding (coordinate to address)
- \li string - Geocoding (address to coordinate)
- \endlist
-*/
-
-QVariant QDeclarativeGeocodeModel::query() const
-{
- return queryVariant_;
-}
-
-void QDeclarativeGeocodeModel::setQuery(const QVariant &query)
-{
- if (query == queryVariant_)
- return;
-
- if (query.userType() == qMetaTypeId<QGeoCoordinate>()) {
- if (address_) {
- address_->disconnect(this);
- address_ = 0;
- }
- searchString_.clear();
-
- coordinate_ = query.value<QGeoCoordinate>();
- } else if (query.type() == QVariant::String) {
- searchString_ = query.toString();
- if (address_) {
- address_->disconnect(this);
- address_ = 0;
- }
- coordinate_ = QGeoCoordinate();
- } else if (QObject *object = query.value<QObject *>()) {
- if (QDeclarativeGeoAddress *address = qobject_cast<QDeclarativeGeoAddress *>(object)) {
- if (address_)
- address_->disconnect(this);
- coordinate_ = QGeoCoordinate();
- searchString_.clear();
-
- address_ = address;
- connect(address_, SIGNAL(countryChanged()), this, SLOT(queryContentChanged()));
- connect(address_, SIGNAL(countryCodeChanged()), this, SLOT(queryContentChanged()));
- connect(address_, SIGNAL(stateChanged()), this, SLOT(queryContentChanged()));
- connect(address_, SIGNAL(countyChanged()), this, SLOT(queryContentChanged()));
- connect(address_, SIGNAL(cityChanged()), this, SLOT(queryContentChanged()));
- connect(address_, SIGNAL(districtChanged()), this, SLOT(queryContentChanged()));
- connect(address_, SIGNAL(streetChanged()), this, SLOT(queryContentChanged()));
- connect(address_, SIGNAL(postalCodeChanged()), this, SLOT(queryContentChanged()));
- } else {
- qmlWarning(this) << QStringLiteral("Unsupported query type for geocode model ")
- << QStringLiteral("(coordinate, string and Address supported).");
- return;
- }
- } else {
- qmlWarning(this) << QStringLiteral("Unsupported query type for geocode model ")
- << QStringLiteral("(coordinate, string and Address supported).");
- return;
- }
-
- queryVariant_ = query;
- emit queryChanged();
- if (autoUpdate_)
- update();
-}
-
-/*!
- \qmlproperty bool QtLocation::GeocodeModel::autoUpdate
-
- This property controls whether the Model automatically updates in response
- to changes in its attached query. The default value of this property
- is false.
-
- If setting this value to 'true' and using an Address or
- \l {coordinate} as the query, note that any change at all in the
- object's properties will trigger a new request to be sent. If you are adjusting many
- properties of the object whilst autoUpdate is enabled, this can generate large numbers of
- useless (and later discarded) requests.
-*/
-
-bool QDeclarativeGeocodeModel::autoUpdate() const
-{
- return autoUpdate_;
-}
-
-void QDeclarativeGeocodeModel::setAutoUpdate(bool update)
-{
- if (autoUpdate_ == update)
- return;
- autoUpdate_ = update;
- emit autoUpdateChanged();
-}
-
-#include "moc_qdeclarativegeocodemodel_p.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeocodemodel_p.h b/src/imports/location/qdeclarativegeocodemodel_p.h
deleted file mode 100644
index 2fbe9937..00000000
--- a/src/imports/location/qdeclarativegeocodemodel_p.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEGEOCODEMODEL_H
-#define QDECLARATIVEGEOCODEMODEL_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 "qdeclarativegeoserviceprovider_p.h"
-
-#include <qgeocodereply.h>
-#include <QtPositioning/private/qdeclarativegeoaddress_p.h>
-#include <QtPositioning/private/qdeclarativegeolocation_p.h>
-
-#include <QtQml/qqml.h>
-#include <QtQml/QQmlParserStatus>
-#include <QAbstractListModel>
-#include <QPointer>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoServiceProvider;
-class QGeoCodingManager;
-class QDeclarativeGeoLocation;
-
-class QDeclarativeGeocodeModel : public QAbstractListModel, public QQmlParserStatus
-{
- Q_OBJECT
- Q_ENUMS(Status)
- Q_ENUMS(GeocodeError)
-
- Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged)
- Q_PROPERTY(bool autoUpdate READ autoUpdate WRITE setAutoUpdate NOTIFY autoUpdateChanged)
- Q_PROPERTY(Status status READ status NOTIFY statusChanged)
- Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
- Q_PROPERTY(int count READ count NOTIFY countChanged)
- Q_PROPERTY(int limit READ limit WRITE setLimit NOTIFY limitChanged)
- Q_PROPERTY(int offset READ offset WRITE setOffset NOTIFY offsetChanged)
- Q_PROPERTY(QVariant query READ query WRITE setQuery NOTIFY queryChanged)
- Q_PROPERTY(QVariant bounds READ bounds WRITE setBounds NOTIFY boundsChanged)
- Q_PROPERTY(GeocodeError error READ error NOTIFY errorChanged)
- Q_INTERFACES(QQmlParserStatus)
-
-public:
- enum Status {
- Null,
- Ready,
- Loading,
- Error
- };
-
- enum GeocodeError {
- NoError = QGeoCodeReply::NoError,
- EngineNotSetError = QGeoCodeReply::EngineNotSetError, //TODO Qt6 consider merge with NotSupportedError
- CommunicationError = QGeoCodeReply::CommunicationError, //TODO Qt6 merge with Map's ConnectionError
- ParseError = QGeoCodeReply::ParseError,
- UnsupportedOptionError = QGeoCodeReply::UnsupportedOptionError, //TODO Qt6 consider rename UnsupportedOperationError
- CombinationError = QGeoCodeReply::CombinationError,
- UnknownError = QGeoCodeReply::UnknownError,
- //we leave gap for future QGeoCodeReply errors
-
- //QGeoServiceProvider related errors start here
- UnknownParameterError = 100,
- MissingRequiredParameterError
- };
-
- enum Roles {
- LocationRole = Qt::UserRole + 1
- };
-
- explicit QDeclarativeGeocodeModel(QObject *parent = 0);
- virtual ~QDeclarativeGeocodeModel();
-
- // From QQmlParserStatus
- virtual void classBegin() {}
- virtual void componentComplete();
-
- // From QAbstractListModel
- virtual int rowCount(const QModelIndex &parent) const;
- virtual QVariant data(const QModelIndex &index, int role) const;
- virtual QHash<int,QByteArray> roleNames() const;
-
- void setPlugin(QDeclarativeGeoServiceProvider *plugin);
- QDeclarativeGeoServiceProvider *plugin() const;
-
- void setBounds(const QVariant &boundingArea);
- QVariant bounds() const;
-
- Status status() const;
- QString errorString() const;
- GeocodeError error() const;
-
- bool autoUpdate() const;
- void setAutoUpdate(bool update);
-
- int count() const;
- Q_INVOKABLE QDeclarativeGeoLocation *get(int index);
-
- int limit() const;
- void setLimit(int limit);
- int offset() const;
- void setOffset(int offset);
-
- QVariant query() const;
- void setQuery(const QVariant &query);
- Q_INVOKABLE void reset();
- Q_INVOKABLE void cancel();
-
-Q_SIGNALS:
- void countChanged();
- void pluginChanged();
- void statusChanged();
- void errorChanged(); //emitted also for errorString notification
- void locationsChanged();
- void autoUpdateChanged();
- void boundsChanged();
- void queryChanged();
- void limitChanged();
- void offsetChanged();
-
-public Q_SLOTS:
- void update();
-
-protected Q_SLOTS:
- void queryContentChanged();
- void geocodeFinished(QGeoCodeReply *reply);
- void geocodeError(QGeoCodeReply *reply,
- QGeoCodeReply::Error error,
- const QString &errorString);
- void pluginReady();
-
-protected:
- QGeoCodingManager *searchManager();
- void setStatus(Status status);
- void setError(GeocodeError error, const QString &errorString);
- bool autoUpdate_;
- bool complete_;
-
-private:
- void setLocations(const QList<QGeoLocation> &locations);
- void abortRequest();
- QGeoCodeReply *reply_;
-
- QDeclarativeGeoServiceProvider *plugin_;
- QGeoShape boundingArea_;
-
- QList<QDeclarativeGeoLocation *> declarativeLocations_;
-
- Status status_;
- QString errorString_;
- GeocodeError error_;
- QVariant queryVariant_;
- QGeoCoordinate coordinate_;
- QDeclarativeGeoAddress *address_;
- QString searchString_;
-
- int limit_;
- int offset_;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/imports/location/qdeclarativegeomaneuver.cpp b/src/imports/location/qdeclarativegeomaneuver.cpp
deleted file mode 100644
index 72c38865..00000000
--- a/src/imports/location/qdeclarativegeomaneuver.cpp
+++ /dev/null
@@ -1,201 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativegeomaneuver_p.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype RouteManeuver
- \instantiates QDeclarativeGeoManeuver
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-routing
- \since Qt Location 5.5
-
- \brief The RouteManeuver type represents the information relevant to the
- point at which two RouteSegments meet.
-
- RouteSegment instances can be thought of as edges on a routing
- graph, with RouteManeuver instances as optional labels attached to the
- vertices of the graph.
-
- The most interesting information held in a RouteManeuver instance is
- normally the textual navigation to provide and the position at which to
- provide it, accessible by \l instructionText and \l position respectively.
-
- \section1 Example
-
- The following QML snippet demonstrates how to print information about a
- route maneuver:
-
- \snippet declarative/routing.qml QtQuick import
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/routing.qml RouteManeuver
-*/
-
-QDeclarativeGeoManeuver::QDeclarativeGeoManeuver(QObject *parent)
- : QObject(parent)
-{
-}
-
-QDeclarativeGeoManeuver::QDeclarativeGeoManeuver(const QGeoManeuver &maneuver, QObject *parent)
- : QObject(parent),
- maneuver_(maneuver)
-{
-}
-
-QDeclarativeGeoManeuver::~QDeclarativeGeoManeuver() {}
-
-/*!
- \qmlproperty bool RouteManeuver::valid
-
- This read-only property holds whether this maneuver is valid or not.
-
- Invalid maneuvers are used when there is no information
- that needs to be attached to the endpoint of a QGeoRouteSegment instance.
-*/
-
-bool QDeclarativeGeoManeuver::valid() const
-{
- return maneuver_.isValid();
-}
-
-/*!
- \qmlproperty coordinate RouteManeuver::position
-
- This read-only property holds where the \l instructionText should be displayed.
-
-*/
-
-QGeoCoordinate QDeclarativeGeoManeuver::position() const
-{
- return maneuver_.position();
-}
-
-/*!
- \qmlproperty string RouteManeuver::instructionText
-
- This read-only property holds textual navigation instruction.
-*/
-
-QString QDeclarativeGeoManeuver::instructionText() const
-{
- return maneuver_.instructionText();
-}
-
-/*!
- \qmlproperty enumeration RouteManeuver::direction
-
- Describes the change in direction associated with the instruction text
- that is associated with a RouteManeuver.
-
- \list
- \li RouteManeuver.NoDirection - There is no direction associated with the instruction text
- \li RouteManeuver.DirectionForward - The instruction indicates that the direction of travel does not need to change
- \li RouteManeuver.DirectionBearRight - The instruction indicates that the direction of travel should bear to the right
- \li RouteManeuver.DirectionLightRight - The instruction indicates that a light turn to the right is required
- \li RouteManeuver.DirectionRight - The instruction indicates that a turn to the right is required
- \li RouteManeuver.DirectionHardRight - The instruction indicates that a hard turn to the right is required
- \li RouteManeuver.DirectionUTurnRight - The instruction indicates that a u-turn to the right is required
- \li RouteManeuver.DirectionUTurnLeft - The instruction indicates that a u-turn to the left is required
- \li RouteManeuver.DirectionHardLeft - The instruction indicates that a hard turn to the left is required
- \li RouteManeuver.DirectionLeft - The instruction indicates that a turn to the left is required
- \li RouteManeuver.DirectionLightLeft - The instruction indicates that a light turn to the left is required
- \li RouteManeuver.DirectionBearLeft - The instruction indicates that the direction of travel should bear to the left
- \endlist
-*/
-
-QDeclarativeGeoManeuver::Direction QDeclarativeGeoManeuver::direction() const
-{
- return QDeclarativeGeoManeuver::Direction(maneuver_.direction());
-}
-
-/*!
- \qmlproperty int RouteManeuver::timeToNextInstruction
-
- This read-only property holds the estimated time it will take to travel
- from the point at which the associated instruction was issued and the
- point that the next instruction should be issued, in seconds.
-*/
-
-int QDeclarativeGeoManeuver::timeToNextInstruction() const
-{
- return maneuver_.timeToNextInstruction();
-}
-
-/*!
- \qmlproperty real RouteManeuver::distanceToNextInstruction
-
- This read-only property holds the distance, in meters, between the point at which
- the associated instruction was issued and the point that the next instruction should
- be issued.
-*/
-
-qreal QDeclarativeGeoManeuver::distanceToNextInstruction() const
-{
- return maneuver_.distanceToNextInstruction();
-}
-
-/*!
- \qmlproperty coordinate RouteManeuver::waypoint
-
- This property holds the waypoint associated with this maneuver.
- All maneuvers do not have a waypoint associated with them, this
- can be checked with \l waypointValid.
-
-*/
-
-QGeoCoordinate QDeclarativeGeoManeuver::waypoint() const
-{
- return maneuver_.waypoint();
-}
-
-/*!
- \qmlproperty bool RouteManeuver::waypointValid
-
- This read-only property holds whether this \l waypoint, associated with this
- maneuver, is valid or not.
-*/
-
-bool QDeclarativeGeoManeuver::waypointValid() const
-{
- return maneuver_.waypoint().isValid();
-}
-
-#include "moc_qdeclarativegeomaneuver_p.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeomaneuver_p.h b/src/imports/location/qdeclarativegeomaneuver_p.h
deleted file mode 100644
index b189d83f..00000000
--- a/src/imports/location/qdeclarativegeomaneuver_p.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEGEOMANEUVER_H
-#define QDECLARATIVEGEOMANEUVER_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 <qgeomaneuver.h>
-
-#include <QtPositioning/QGeoCoordinate>
-
-#include <QObject>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoManeuver : public QObject
-{
- Q_OBJECT
- Q_ENUMS(Direction)
-
- Q_PROPERTY(bool valid READ valid CONSTANT)
- Q_PROPERTY(QGeoCoordinate position READ position CONSTANT)
- Q_PROPERTY(QString instructionText READ instructionText CONSTANT)
- Q_PROPERTY(Direction direction READ direction CONSTANT)
- Q_PROPERTY(int timeToNextInstruction READ timeToNextInstruction CONSTANT)
- Q_PROPERTY(qreal distanceToNextInstruction READ distanceToNextInstruction CONSTANT)
- Q_PROPERTY(QGeoCoordinate waypoint READ waypoint CONSTANT)
- Q_PROPERTY(bool waypointValid READ waypointValid CONSTANT)
-
-public:
- enum Direction {
- NoDirection = QGeoManeuver::NoDirection,
- DirectionForward = QGeoManeuver::DirectionForward,
- DirectionBearRight = QGeoManeuver::DirectionBearRight,
- DirectionLightRight = QGeoManeuver::DirectionLightRight,
- DirectionRight = QGeoManeuver::DirectionRight,
- DirectionHardRight = QGeoManeuver::DirectionHardRight,
- DirectionUTurnRight = QGeoManeuver::DirectionUTurnRight,
- DirectionUTurnLeft = QGeoManeuver::DirectionUTurnLeft,
- DirectionHardLeft = QGeoManeuver::DirectionHardLeft,
- DirectionLeft = QGeoManeuver::DirectionLeft,
- DirectionLightLeft = QGeoManeuver::DirectionLightLeft,
- DirectionBearLeft = QGeoManeuver::DirectionBearLeft
- };
-
- explicit QDeclarativeGeoManeuver(QObject *parent = 0);
- QDeclarativeGeoManeuver(const QGeoManeuver &maneuver, QObject *parent = 0);
- ~QDeclarativeGeoManeuver();
-
- bool valid() const;
- bool waypointValid() const;
-
- QGeoCoordinate position() const;
- QString instructionText() const;
- Direction direction() const;
- int timeToNextInstruction() const;
- qreal distanceToNextInstruction() const;
- QGeoCoordinate waypoint() const;
-
-private:
- QGeoManeuver maneuver_;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/imports/location/qdeclarativegeomap.cpp b/src/imports/location/qdeclarativegeomap.cpp
deleted file mode 100644
index d19f6929..00000000
--- a/src/imports/location/qdeclarativegeomap.cpp
+++ /dev/null
@@ -1,1668 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativegeomap_p.h"
-#include "qdeclarativegeomapquickitem_p.h"
-#include "qdeclarativegeomapcopyrightsnotice_p.h"
-#include "qdeclarativegeoserviceprovider_p.h"
-#include "qdeclarativegeomaptype_p.h"
-#include "qgeomappingmanager_p.h"
-#include "qgeocameracapabilities_p.h"
-#include "qgeomap_p.h"
-#include "qdeclarativegeomapparameter_p.h"
-#include <QtPositioning/QGeoCircle>
-#include <QtPositioning/QGeoRectangle>
-#include <QtQuick/QQuickWindow>
-#include <QtQuick/QSGRectangleNode>
-#include <QtQuick/private/qquickwindow_p.h>
-#include <QtQml/qqmlinfo.h>
-#include <cmath>
-
-#ifndef M_PI
-#define M_PI 3.141592653589793238463
-#endif
-
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype Map
- \instantiates QDeclarativeGeoMap
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-maps
- \since Qt Location 5.0
-
- \brief The Map type displays a map.
-
- The Map type is used to display a map or image of the Earth, with
- the capability to also display interactive objects tied to the map's
- surface.
-
- There are a variety of different ways to visualize the Earth's surface
- in a 2-dimensional manner, but all of them involve some kind of projection:
- a mathematical relationship between the 3D coordinates (latitude, longitude
- and altitude) and 2D coordinates (X and Y in pixels) on the screen.
-
- Different sources of map data can use different projections, and from the
- point of view of the Map type, we treat these as one replaceable unit:
- the Map plugin. A Map plugin consists of a data source, as well as all other
- details needed to display its data on-screen.
-
- The current Map plugin in use is contained in the \l plugin property of
- the Map item. In order to display any image in a Map item, you will need
- to set this property. See the \l Plugin type for a description of how
- to retrieve an appropriate plugin for use.
-
- The geographic region displayed in the Map item is referred to as its
- viewport, and this is defined by the properties \l center, and
- \l zoomLevel. The \l center property contains a \l {coordinate}
- specifying the center of the viewport, while \l zoomLevel controls the scale of the
- map. See each of these properties for further details about their values.
-
- When the map is displayed, each possible geographic coordinate that is
- visible will map to some pixel X and Y coordinate on the screen. To perform
- conversions between these two, Map provides the \l toCoordinate and
- \l fromCoordinate functions, which are of general utility.
-
- \section2 Map Objects
-
- Map related objects can be declared within the body of a Map object in Qt Quick and will
- automatically appear on the Map. To add objects programmatically, first be
- sure they are created with the Map as their parent (for example in an argument to
- Component::createObject), and then call the \l addMapItem method on the Map.
- A corresponding \l removeMapItem method also exists to do the opposite and
- remove an object from the Map.
-
- Moving Map objects around, resizing them or changing their shape normally
- does not involve any special interaction with Map itself -- changing these
- details about a map object will automatically update the display.
-
- \section2 Interaction
-
- The Map type includes support for pinch and flick gestures to control
- zooming and panning. These are enabled by default, and available at any
- time by using the \l gesture object. The actual GestureArea is constructed
- specially at startup and cannot be replaced or destroyed. Its properties
- can be altered, however, to control its behavior.
-
- \section2 Performance
-
- Maps are rendered using OpenGL (ES) and the Qt Scene Graph stack, and as
- a result perform quite well where GL accelerated hardware is available.
-
- For "online" Map plugins, network bandwidth and latency can be major
- contributors to the user's perception of performance. Extensive caching is
- performed to mitigate this, but such mitigation is not always perfect. For
- "offline" plugins, the time spent retrieving the stored geographic data
- and rendering the basic map features can often play a dominant role. Some
- offline plugins may use hardware acceleration themselves to (partially)
- avert this.
-
- In general, large and complex Map items such as polygons and polylines with
- large numbers of vertices can have an adverse effect on UI performance.
- Further, more detailed notes on this are in the documentation for each
- map item type.
-
- \section2 Example Usage
-
- The following snippet shows a simple Map and the necessary Plugin type
- to use it. The map is centered over Oslo, Norway, with zoom level 10.
-
- \quotefromfile minimal_map/main.qml
- \skipto import
- \printuntil }
- \printline }
- \skipto Map
- \printuntil }
- \printline }
-
- \image minimal_map.png
-*/
-
-/*!
- \qmlsignal QtLocation::Map::copyrightLinkActivated(string link)
-
- This signal is emitted when the user clicks on a \a link in the copyright notice. The
- application should open the link in a browser or display its contents to the user.
-*/
-
-static const qreal EARTH_MEAN_RADIUS = 6371007.2;
-
-QDeclarativeGeoMap::QDeclarativeGeoMap(QQuickItem *parent)
- : QQuickItem(parent),
- m_plugin(0),
- m_mappingManager(0),
- m_activeMapType(0),
- m_gestureArea(new QQuickGeoMapGestureArea(this)),
- m_map(0),
- m_error(QGeoServiceProvider::NoError),
- m_color(QColor::fromRgbF(0.9, 0.9, 0.9)),
- m_componentCompleted(false),
- m_pendingFitViewport(false),
- m_copyrightsVisible(true),
- m_maximumViewportLatitude(0.0),
- m_initialized(false),
- m_validRegion(false)
-{
- setAcceptHoverEvents(false);
- setAcceptedMouseButtons(Qt::LeftButton);
- setFlags(QQuickItem::ItemHasContents | QQuickItem::ItemClipsChildrenToShape);
- setFiltersChildMouseEvents(true);
-
- connect(this, SIGNAL(childrenChanged()), this, SLOT(onMapChildrenChanged()), Qt::QueuedConnection);
-
- m_activeMapType = new QDeclarativeGeoMapType(QGeoMapType(QGeoMapType::NoMap,
- tr("No Map"),
- tr("No Map"), false, false, 0), this);
- m_cameraData.setCenter(QGeoCoordinate(51.5073,-0.1277)); //London city center
- m_cameraData.setZoomLevel(8.0);
-}
-
-QDeclarativeGeoMap::~QDeclarativeGeoMap()
-{
- if (!m_mapViews.isEmpty())
- qDeleteAll(m_mapViews);
- // remove any map items associations
- for (int i = 0; i < m_mapItems.count(); ++i) {
- if (m_mapItems.at(i))
- m_mapItems.at(i).data()->setMap(0,0);
- }
- m_mapItems.clear();
-
- delete m_copyrights.data();
- m_copyrights.clear();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMap::onMapChildrenChanged()
-{
- if (!m_componentCompleted || !m_map)
- return;
-
- int maxChildZ = 0;
- QObjectList kids = children();
- bool foundCopyrights = false;
-
- for (int i = 0; i < kids.size(); ++i) {
- QDeclarativeGeoMapCopyrightNotice *copyrights = qobject_cast<QDeclarativeGeoMapCopyrightNotice *>(kids.at(i));
- if (copyrights) {
- foundCopyrights = true;
- } else {
- QDeclarativeGeoMapItemBase *mapItem = qobject_cast<QDeclarativeGeoMapItemBase *>(kids.at(i));
- if (mapItem) {
- if (mapItem->z() > maxChildZ)
- maxChildZ = mapItem->z();
- }
- }
- }
-
- QDeclarativeGeoMapCopyrightNotice *copyrights = m_copyrights.data();
- // if copyrights object not found within the map's children
- if (!foundCopyrights) {
- // if copyrights object was deleted!
- if (!copyrights) {
- // create a new one and set its parent, re-assign it to the weak pointer, then connect the copyrights-change signal
- m_copyrights = new QDeclarativeGeoMapCopyrightNotice(this);
- copyrights = m_copyrights.data();
- connect(m_map, SIGNAL(copyrightsChanged(QImage)),
- copyrights, SLOT(copyrightsChanged(QImage)));
- connect(m_map, SIGNAL(copyrightsChanged(QString)),
- copyrights, SLOT(copyrightsChanged(QString)));
- connect(copyrights, SIGNAL(linkActivated(QString)),
- this, SIGNAL(copyrightLinkActivated(QString)));
-
- // set visibility of copyright notice
- copyrights->setCopyrightsVisible(m_copyrightsVisible);
-
- } else {
- // just re-set its parent.
- copyrights->setParent(this);
- }
- }
-
- // put the copyrights notice object at the highest z order
- copyrights->setCopyrightsZ(maxChildZ + 1);
-}
-
-static QDeclarativeGeoMapType *findMapType(const QList<QDeclarativeGeoMapType *> &types, const QGeoMapType &type)
-{
- for (int i = 0; i < types.size(); ++i)
- if (types[i]->mapType() == type)
- return types[i];
- return Q_NULLPTR;
-}
-
-void QDeclarativeGeoMap::onSupportedMapTypesChanged()
-{
- QList<QDeclarativeGeoMapType *> supportedMapTypes;
- QList<QGeoMapType> types = m_mappingManager->supportedMapTypes();
- for (int i = 0; i < types.size(); ++i) {
- // types that are present and get removed will be deleted at QObject destruction
- QDeclarativeGeoMapType *type = findMapType(m_supportedMapTypes, types[i]);
- if (!type)
- type = new QDeclarativeGeoMapType(types[i], this);
- supportedMapTypes.append(type);
- }
- m_supportedMapTypes.swap(supportedMapTypes);
- if (m_supportedMapTypes.isEmpty()) {
- m_map->setActiveMapType(QGeoMapType()); // no supported map types: setting an invalid one
- } else {
- bool hasMapType = false;
- foreach (QDeclarativeGeoMapType *declarativeType, m_supportedMapTypes) {
- if (declarativeType->mapType() == m_map->activeMapType())
- hasMapType = true;
- }
- if (!hasMapType) {
- QDeclarativeGeoMapType *type = m_supportedMapTypes.at(0);
- m_activeMapType = type;
- m_map->setActiveMapType(type->mapType());
- }
- }
-
- emit supportedMapTypesChanged();
-}
-
-void QDeclarativeGeoMap::setError(QGeoServiceProvider::Error error, const QString &errorString)
-{
- if (m_error == error && m_errorString == errorString)
- return;
- m_error = error;
- m_errorString = errorString;
- emit errorChanged();
-}
-
-void QDeclarativeGeoMap::initialize()
-{
- // try to keep center change signal in the end
- bool centerHasChanged = false;
-
- setMinimumZoomLevel(m_map->minimumZoom());
-
- // set latitude bundary check
- m_maximumViewportLatitude = m_map->maximumCenterLatitudeAtZoom(m_cameraData.zoomLevel());
- QGeoCoordinate center = m_cameraData.center();
- center.setLatitude(qBound(-m_maximumViewportLatitude, center.latitude(), m_maximumViewportLatitude));
-
- if (center != m_cameraData.center()) {
- centerHasChanged = true;
- m_cameraData.setCenter(center);
- }
-
- m_map->setCameraData(m_cameraData);
-
- m_initialized = true;
-
- if (centerHasChanged)
- emit centerChanged(m_cameraData.center());
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMap::pluginReady()
-{
- QGeoServiceProvider *provider = m_plugin->sharedGeoServiceProvider();
- m_mappingManager = provider->mappingManager();
-
- if (provider->error() != QGeoServiceProvider::NoError) {
- setError(provider->error(), provider->errorString());
- return;
- }
-
- if (!m_mappingManager) {
- //TODO Should really be EngineNotSetError (see QML GeoCodeModel)
- setError(QGeoServiceProvider::NotSupportedError, tr("Plugin does not support mapping."));
- return;
- }
-
- if (!m_mappingManager->isInitialized())
- connect(m_mappingManager, SIGNAL(initialized()), this, SLOT(mappingManagerInitialized()));
- else
- mappingManagerInitialized();
-
- // make sure this is only called once
- disconnect(this, SLOT(pluginReady()));
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMap::componentComplete()
-{
- m_componentCompleted = true;
- populateParameters();
- populateMap();
- QQuickItem::componentComplete();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMap::mousePressEvent(QMouseEvent *event)
-{
- if (isInteractive())
- m_gestureArea->handleMousePressEvent(event);
- else
- QQuickItem::mousePressEvent(event);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMap::mouseMoveEvent(QMouseEvent *event)
-{
- if (isInteractive())
- m_gestureArea->handleMouseMoveEvent(event);
- else
- QQuickItem::mouseMoveEvent(event);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMap::mouseReleaseEvent(QMouseEvent *event)
-{
- if (isInteractive()) {
- m_gestureArea->handleMouseReleaseEvent(event);
- } else {
- QQuickItem::mouseReleaseEvent(event);
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMap::mouseUngrabEvent()
-{
- if (isInteractive())
- m_gestureArea->handleMouseUngrabEvent();
- else
- QQuickItem::mouseUngrabEvent();
-}
-
-void QDeclarativeGeoMap::touchUngrabEvent()
-{
- if (isInteractive())
- m_gestureArea->handleTouchUngrabEvent();
- else
- QQuickItem::touchUngrabEvent();
-}
-
-/*!
- \qmlproperty MapGestureArea QtLocation::Map::gesture
-
- Contains the MapGestureArea created with the Map. This covers pan, flick and pinch gestures.
- Use \c{gesture.enabled: true} to enable basic gestures, or see \l{MapGestureArea} for
- further details.
-*/
-
-QQuickGeoMapGestureArea *QDeclarativeGeoMap::gesture()
-{
- return m_gestureArea;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMap::populateMap()
-{
- QObjectList kids = children();
- QList<QQuickItem *> quickKids = childItems();
- for (int i=0; i < quickKids.count(); ++i)
- kids.append(quickKids.at(i));
-
- for (int i = 0; i < kids.size(); ++i) {
- // dispatch items appropriately
- QDeclarativeGeoMapItemView *mapView = qobject_cast<QDeclarativeGeoMapItemView *>(kids.at(i));
- if (mapView) {
- m_mapViews.append(mapView);
- setupMapView(mapView);
- continue;
- }
- QDeclarativeGeoMapItemBase *mapItem = qobject_cast<QDeclarativeGeoMapItemBase *>(kids.at(i));
- if (mapItem) {
- addMapItem(mapItem);
- }
- }
-}
-
-void QDeclarativeGeoMap::populateParameters()
-{
- QObjectList kids = children();
- QList<QQuickItem *> quickKids = childItems();
- for (int i = 0; i < quickKids.count(); ++i)
- kids.append(quickKids.at(i));
- for (int i = 0; i < kids.size(); ++i) {
- QDeclarativeGeoMapParameter *mapParameter = qobject_cast<QDeclarativeGeoMapParameter *>(kids.at(i));
- if (mapParameter)
- addMapParameter(mapParameter);
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMap::setupMapView(QDeclarativeGeoMapItemView *view)
-{
- Q_UNUSED(view)
- view->setMap(this);
- view->repopulate();
-}
-
-/*!
- * \internal
- */
-QSGNode *QDeclarativeGeoMap::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
-{
- if (!m_map) {
- delete oldNode;
- return 0;
- }
-
- QSGRectangleNode *root = static_cast<QSGRectangleNode *>(oldNode);
- if (!root)
- root = window()->createRectangleNode();
-
- root->setRect(boundingRect());
- root->setColor(m_color);
-
- QSGNode *content = root->childCount() ? root->firstChild() : 0;
- content = m_map->updateSceneGraph(content, window());
- if (content && root->childCount() == 0)
- root->appendChildNode(content);
-
- return root;
-}
-
-/*!
- \qmlproperty Plugin QtLocation::Map::plugin
-
- This property holds the plugin which provides the mapping functionality.
-
- This is a write-once property. Once the map has a plugin associated with
- it, any attempted modifications of the plugin will be ignored.
-*/
-
-void QDeclarativeGeoMap::setPlugin(QDeclarativeGeoServiceProvider *plugin)
-{
- if (m_plugin) {
- qmlWarning(this) << QStringLiteral("Plugin is a write-once property, and cannot be set again.");
- return;
- }
- m_plugin = plugin;
- emit pluginChanged(m_plugin);
-
- if (m_plugin->isAttached()) {
- pluginReady();
- } else {
- connect(m_plugin, SIGNAL(attached()),
- this, SLOT(pluginReady()));
- }
-}
-
-/*!
- \internal
- this function will only be ever called once
-*/
-void QDeclarativeGeoMap::mappingManagerInitialized()
-{
- m_map = m_mappingManager->createMap(this);
-
- if (!m_map)
- return;
-
- m_gestureArea->setMap(m_map);
-
- QList<QGeoMapType> types = m_mappingManager->supportedMapTypes();
- for (int i = 0; i < types.size(); ++i) {
- QDeclarativeGeoMapType *type = new QDeclarativeGeoMapType(types[i], this);
- m_supportedMapTypes.append(type);
- }
-
- if (!m_supportedMapTypes.isEmpty()) {
- QDeclarativeGeoMapType *type = m_supportedMapTypes.at(0);
- m_activeMapType = type;
- m_map->setActiveMapType(type->mapType());
- } else {
- m_map->setActiveMapType(m_activeMapType->mapType());
- }
-
- //The zoom level limits are only restricted by the plugins values, if the user has set a more
- //strict zoom level limit before initialization nothing is done here.
- //minimum zoom level might be changed to limit gray bundaries
-
- if (m_gestureArea->maximumZoomLevel() < 0
- || m_mappingManager->cameraCapabilities().maximumZoomLevelAt256() < m_gestureArea->maximumZoomLevel())
- setMaximumZoomLevel(m_mappingManager->cameraCapabilities().maximumZoomLevelAt256());
-
- if (m_mappingManager->cameraCapabilities().minimumZoomLevelAt256() > m_gestureArea->minimumZoomLevel())
- setMinimumZoomLevel(m_mappingManager->cameraCapabilities().minimumZoomLevelAt256());
-
-
- // Map tiles are built in this call. m_map->minimumZoom() becomes operational
- // after this has been called at least once, after creation.
-
- if (!m_initialized && width() > 0 && height() > 0) {
- m_map->setViewportSize(QSize(width(), height()));
- initialize();
- }
-
- m_copyrights = new QDeclarativeGeoMapCopyrightNotice(this);
- connect(m_map, SIGNAL(copyrightsChanged(QImage)),
- m_copyrights.data(), SLOT(copyrightsChanged(QImage)));
- connect(m_map, SIGNAL(copyrightsChanged(QString)),
- m_copyrights.data(), SLOT(copyrightsChanged(QString)));
- connect(m_copyrights.data(), SIGNAL(linkActivated(QString)),
- this, SIGNAL(copyrightLinkActivated(QString)));
- connect(m_map, &QGeoMap::sgNodeChanged, this, &QQuickItem::update);
-
- // set visibility of copyright notice
- m_copyrights->setCopyrightsVisible(m_copyrightsVisible);
-
- // This prefetches a buffer around the map
- m_map->prefetchData();
-
- connect(m_mappingManager, SIGNAL(supportedMapTypesChanged()), this, SLOT(onSupportedMapTypesChanged()));
- emit minimumZoomLevelChanged();
- emit maximumZoomLevelChanged();
- emit supportedMapTypesChanged();
- emit activeMapTypeChanged();
-
- // Any map items that were added before the plugin was ready
- // need to have setMap called again
- foreach (const QPointer<QDeclarativeGeoMapItemBase> &item, m_mapItems) {
- if (item)
- item.data()->setMap(this, m_map);
- }
-
- // All map parameters that were added before the plugin was ready
- // need to be added to m_map
- for (QDeclarativeGeoMapParameter *p : m_mapParameters)
- m_map->addParameter(p);
-}
-
-/*!
- \internal
-*/
-QDeclarativeGeoServiceProvider *QDeclarativeGeoMap::plugin() const
-{
- return m_plugin;
-}
-
-/*!
- \internal
- Sets the gesture areas minimum zoom level. If the camera capabilities
- has been set this method honors the boundaries set by it.
- The minimum zoom level will also have a lower bound dependent on the size
- of the canvas, effectively preventing to display out of bounds areas.
-*/
-void QDeclarativeGeoMap::setMinimumZoomLevel(qreal minimumZoomLevel)
-{
-
- if (minimumZoomLevel >= 0) {
- qreal oldMinimumZoomLevel = this->minimumZoomLevel();
-
- if (m_map) {
-
- minimumZoomLevel = qBound(qreal(m_map->cameraCapabilities().minimumZoomLevelAt256()), minimumZoomLevel, maximumZoomLevel());
- double minimumViewportZoomLevel = m_map->minimumZoom();
- if (minimumZoomLevel < minimumViewportZoomLevel)
- minimumZoomLevel = minimumViewportZoomLevel;
- }
-
- m_gestureArea->setMinimumZoomLevel(minimumZoomLevel);
-
- if (zoomLevel() < minimumZoomLevel)
- setZoomLevel(minimumZoomLevel);
-
- if (oldMinimumZoomLevel != minimumZoomLevel)
- emit minimumZoomLevelChanged();
- }
-}
-
-/*!
- \qmlproperty real QtLocation::Map::minimumZoomLevel
-
- This property holds the minimum valid zoom level for the map.
-
- The minimum zoom level defined by the \l plugin used is a lower bound for
- this property. However, the returned value is also canvas-size-dependent, and
- can be higher than the user-specified value, or than the minimum zoom level
- defined by the plugin used, to prevent the map from being smaller than the
- viewport in either dimension.
-
- If a plugin supporting mapping is not set, -1.0 is returned.
-*/
-
-qreal QDeclarativeGeoMap::minimumZoomLevel() const
-{
- if (m_gestureArea->minimumZoomLevel() != -1)
- return m_gestureArea->minimumZoomLevel();
- else if (m_map)
- return m_map->cameraCapabilities().minimumZoomLevelAt256();
- else
- return -1.0;
-}
-
-/*!
- \internal
- Sets the gesture areas maximum zoom level. If the camera capabilities
- has been set this method honors the boundaries set by it.
-*/
-void QDeclarativeGeoMap::setMaximumZoomLevel(qreal maximumZoomLevel)
-{
- if (maximumZoomLevel >= 0) {
- qreal oldMaximumZoomLevel = this->maximumZoomLevel();
-
- if (m_map)
- maximumZoomLevel = qBound(minimumZoomLevel(), maximumZoomLevel, qreal(m_map->cameraCapabilities().maximumZoomLevelAt256()));
-
- m_gestureArea->setMaximumZoomLevel(maximumZoomLevel);
-
- if (zoomLevel() > maximumZoomLevel)
- setZoomLevel(maximumZoomLevel);
-
- if (oldMaximumZoomLevel != maximumZoomLevel)
- emit maximumZoomLevelChanged();
- }
-}
-
-/*!
- \qmlproperty real QtLocation::Map::maximumZoomLevel
-
- This property holds the maximum valid zoom level for the map.
-
- The maximum zoom level is defined by the \l plugin used.
- If a plugin supporting mapping is not set, -1.0 is returned.
-*/
-
-qreal QDeclarativeGeoMap::maximumZoomLevel() const
-{
- if (m_gestureArea->maximumZoomLevel() != -1)
- return m_gestureArea->maximumZoomLevel();
- else if (m_map)
- return m_map->cameraCapabilities().minimumZoomLevelAt256();
- else
- return -1.0;
-}
-
-/*!
- \qmlproperty real QtLocation::Map::zoomLevel
-
- This property holds the zoom level for the map.
-
- Larger values for the zoom level provide more detail. Zoom levels
- are always non-negative. The default value is 8.0.
-*/
-void QDeclarativeGeoMap::setZoomLevel(qreal zoomLevel)
-{
- if (m_cameraData.zoomLevel() == zoomLevel || zoomLevel < 0)
- return;
-
- //small optiomatization to avoid double setCameraData
- bool centerHasChanged = false;
-
- if (m_initialized) {
- m_cameraData.setZoomLevel(qBound(minimumZoomLevel(), zoomLevel, maximumZoomLevel()));
- m_maximumViewportLatitude = m_map->maximumCenterLatitudeAtZoom(m_cameraData.zoomLevel());
- QGeoCoordinate coord = m_cameraData.center();
- coord.setLatitude(qBound(-m_maximumViewportLatitude, coord.latitude(), m_maximumViewportLatitude));
- if (coord != m_cameraData.center()) {
- centerHasChanged = true;
- m_cameraData.setCenter(coord);
- }
- m_map->setCameraData(m_cameraData);
- } else {
- m_cameraData.setZoomLevel(zoomLevel);
- }
-
- m_validRegion = false;
-
- if (centerHasChanged)
- emit centerChanged(m_cameraData.center());
- emit zoomLevelChanged(m_cameraData.zoomLevel());
-}
-
-qreal QDeclarativeGeoMap::zoomLevel() const
-{
- return m_cameraData.zoomLevel();
-}
-
-/*!
- \qmlproperty coordinate QtLocation::Map::center
-
- This property holds the coordinate which occupies the center of the
- mapping viewport. Invalid center coordinates are ignored.
-
- The default value is an arbitrary valid coordinate.
-*/
-void QDeclarativeGeoMap::setCenter(const QGeoCoordinate &center)
-{
- if (center == m_cameraData.center())
- return;
-
- if (!center.isValid())
- return;
-
- if (m_initialized) {
- QGeoCoordinate coord(center);
- coord.setLatitude(qBound(-m_maximumViewportLatitude, center.latitude(), m_maximumViewportLatitude));
- m_cameraData.setCenter(coord);
- m_map->setCameraData(m_cameraData);
- } else {
- m_cameraData.setCenter(center);
- }
-
- m_validRegion = false;
- emit centerChanged(m_cameraData.center());
-}
-
-QGeoCoordinate QDeclarativeGeoMap::center() const
-{
- return m_cameraData.center();
-}
-
-
-/*!
- \qmlproperty geoshape QtLocation::Map::visibleRegion
-
- This property holds the region which occupies the viewport of
- the map. The camera is positioned in the center of the shape, and
- at the largest integral zoom level possible which allows the
- whole shape to be visible on the screen. This implies that
- reading this property back shortly after having been set the
- returned area is equal or larger than the set area.
-
- Setting this property implicitly changes the \l center and
- \l zoomLevel of the map. Any previously set value to those
- properties will be overridden.
-
- This property does not provide any change notifications.
-
- \since 5.6
-*/
-void QDeclarativeGeoMap::setVisibleRegion(const QGeoShape &shape)
-{
- if (shape == m_region && m_validRegion)
- return;
-
- m_region = shape;
- if (!shape.isValid()) {
- // shape invalidated -> nothing to fit anymore
- m_pendingFitViewport = false;
- return;
- }
-
- if (!m_map || !width() || !height()) {
- m_pendingFitViewport = true;
- return;
- }
-
- fitViewportToGeoShape();
-}
-
-QGeoShape QDeclarativeGeoMap::visibleRegion() const
-{
- if (!m_map || !width() || !height())
- return m_region;
-
- QGeoCoordinate tl = m_map->geoProjection().itemPositionToCoordinate(QDoubleVector2D(0, 0));
- QGeoCoordinate br = m_map->geoProjection().itemPositionToCoordinate(QDoubleVector2D(width(), height()));
-
- return QGeoRectangle(tl, br);
-}
-
-/*!
- \qmlproperty bool QtLocation::Map::copyrightsVisible
-
- This property holds the visibility of the copyrights notice. The notice is usually
- displayed in the bottom left corner. By default, this property is set to \c true.
-
- \note Many map providers require the notice to be visible as part of the terms and conditions.
- Please consult the relevant provider documentation before turning this notice off.
-
- \since 5.7
-*/
-void QDeclarativeGeoMap::setCopyrightsVisible(bool visible)
-{
- if (m_copyrightsVisible == visible)
- return;
-
- if (!m_copyrights.isNull())
- m_copyrights->setCopyrightsVisible(visible);
-
- m_copyrightsVisible = visible;
- emit copyrightsVisibleChanged(visible);
-}
-
-bool QDeclarativeGeoMap::copyrightsVisible() const
-{
- return m_copyrightsVisible;
-}
-
-
-
-/*!
- \qmlproperty color QtLocation::Map::color
-
- This property holds the background color of the map element.
-
- \since 5.6
-*/
-void QDeclarativeGeoMap::setColor(const QColor &color)
-{
- if (color != m_color) {
- m_color = color;
- update();
- emit colorChanged(m_color);
- }
-}
-
-QColor QDeclarativeGeoMap::color() const
-{
- return m_color;
-}
-
-void QDeclarativeGeoMap::fitViewportToGeoShape()
-{
- int margins = 10;
- if (!m_map || width() <= margins || height() <= margins)
- return;
-
- QGeoCoordinate topLeft;
- QGeoCoordinate bottomRight;
-
- switch (m_region.type()) {
- case QGeoShape::RectangleType:
- {
- QGeoRectangle rect = m_region;
- topLeft = rect.topLeft();
- bottomRight = rect.bottomRight();
- if (bottomRight.longitude() < topLeft.longitude())
- bottomRight.setLongitude(bottomRight.longitude() + 360.0);
-
- break;
- }
- case QGeoShape::CircleType:
- {
- const double pi = M_PI;
- QGeoCircle circle = m_region;
- QGeoCoordinate centerCoordinate = circle.center();
-
- // calculate geo bounding box of the circle
- // circle tangential points with meridians and the north pole create
- // spherical triangle, we use spherical law of sines
- // sin(lon_delta_in_rad)/sin(r_in_rad) =
- // sin(alpha_in_rad)/sin(pi/2 - lat_in_rad), where:
- // * lon_delta_in_rad - delta of longitudes of circle center
- // and tangential points
- // * r_in_rad - angular radius of the circle
- // * lat_in_rad - latitude of circle center
- // * alpha_in_rad - angle between meridian and radius to the circle =>
- // this is tangential point => sin(alpha) = 1
- // * lat_delta_in_rad - delta of latitudes of circle center and
- // latitude of points where great circle (going through circle
- // center) crosses circle and the pole
-
- double r_in_rad = circle.radius() / EARTH_MEAN_RADIUS; // angular r
- double lat_delta_in_deg = r_in_rad * 180 / pi;
- double lon_delta_in_deg = std::asin(std::sin(r_in_rad) /
- std::cos(centerCoordinate.latitude() * pi / 180)) * 180 / pi;
-
- topLeft.setLatitude(centerCoordinate.latitude() + lat_delta_in_deg);
- topLeft.setLongitude(centerCoordinate.longitude() - lon_delta_in_deg);
- bottomRight.setLatitude(centerCoordinate.latitude()
- - lat_delta_in_deg);
- bottomRight.setLongitude(centerCoordinate.longitude()
- + lon_delta_in_deg);
-
- // adjust if circle reaches poles => cross all meridians and
- // fit into Mercator projection bounds
- if (topLeft.latitude() > 90 || bottomRight.latitude() < -90) {
- topLeft.setLatitude(qMin(topLeft.latitude(), 85.05113));
- topLeft.setLongitude(-180.0);
- bottomRight.setLatitude(qMax(bottomRight.latitude(),
- -85.05113));
- bottomRight.setLongitude(180.0);
- }
- break;
- }
- case QGeoShape::UnknownType:
- //Fallthrough to default
- default:
- return;
- }
-
- QDoubleVector2D topLeftPoint = m_map->geoProjection().geoToMapProjection(topLeft);
- QDoubleVector2D bottomRightPoint = m_map->geoProjection().geoToMapProjection(bottomRight);
- if (bottomRightPoint.x() < topLeftPoint.x()) // crossing the dateline
- bottomRightPoint.setX(bottomRightPoint.x() + 1.0);
-
-
- double bboxWidth = bottomRightPoint.x() - topLeftPoint.x();
- double bboxHeight = bottomRightPoint.y() - topLeftPoint.y();
- bboxWidth *= m_map->mapWidth();
- bboxHeight *= m_map->mapHeight();
-
- // find center of the bounding box
- QDoubleVector2D center = (topLeftPoint + bottomRightPoint) * 0.5;
- center.setX(center.x() > 1.0 ? center.x() - 1.0 : center.x());
- QGeoCoordinate centerCoordinate = m_map->geoProjection().mapProjectionToGeo(center);
-
- // position camera to the center of bounding box
- setCenter(centerCoordinate);
-
- // if the shape is empty we just change center position, not zoom
- if (bboxHeight == 0 && bboxWidth == 0)
- return;
-
- double zoomRatio = qMax(bboxWidth / (width() - margins),
- bboxHeight / (height() - margins));
- // fixme: use log2 with c++11
- zoomRatio = std::log(zoomRatio) / std::log(2.0);
- double newZoom = qMax<double>(minimumZoomLevel(), zoomLevel() - zoomRatio);
- setZoomLevel(newZoom);
- m_validRegion = true;
-}
-
-
-/*!
- \qmlproperty list<MapType> QtLocation::Map::supportedMapTypes
-
- This read-only property holds the set of \l{MapType}{map types} supported by this map.
-
- \sa activeMapType
-*/
-QQmlListProperty<QDeclarativeGeoMapType> QDeclarativeGeoMap::supportedMapTypes()
-{
- return QQmlListProperty<QDeclarativeGeoMapType>(this, m_supportedMapTypes);
-}
-
-/*!
- \qmlmethod coordinate QtLocation::Map::toCoordinate(QPointF position, bool clipToViewPort)
-
- Returns the coordinate which corresponds to the \a position relative to the map item.
-
- If \a cliptoViewPort is \c true, or not supplied then returns an invalid coordinate if
- \a position is not within the current viewport.
-*/
-QGeoCoordinate QDeclarativeGeoMap::toCoordinate(const QPointF &position, bool clipToViewPort) const
-{
- if (m_map)
- return m_map->geoProjection().itemPositionToCoordinate(QDoubleVector2D(position), clipToViewPort);
- else
- return QGeoCoordinate();
-}
-
-/*!
- \qmlmethod point QtLocation::Map::fromCoordinate(coordinate coordinate, bool clipToViewPort)
-
- Returns the position relative to the map item which corresponds to the \a coordinate.
-
- If \a cliptoViewPort is \c true, or not supplied then returns an invalid QPointF if
- \a coordinate is not within the current viewport.
-*/
-QPointF QDeclarativeGeoMap::fromCoordinate(const QGeoCoordinate &coordinate, bool clipToViewPort) const
-{
- if (m_map)
- return m_map->geoProjection().coordinateToItemPosition(coordinate, clipToViewPort).toPointF();
- else
- return QPointF(qQNaN(), qQNaN());
-}
-
-/*!
- \qmlmethod void QtLocation::Map::pan(int dx, int dy)
-
- Starts panning the map by \a dx pixels along the x-axis and
- by \a dy pixels along the y-axis.
-
- Positive values for \a dx move the map right, negative values left.
- Positive values for \a dy move the map down, negative values up.
-
- During panning the \l center, and \l zoomLevel may change.
-*/
-void QDeclarativeGeoMap::pan(int dx, int dy)
-{
- if (!m_map)
- return;
- if (dx == 0 && dy == 0)
- return;
-
- QGeoCoordinate coord = m_map->geoProjection().itemPositionToCoordinate(
- QDoubleVector2D(m_map->viewportWidth() / 2 + dx,
- m_map->viewportHeight() / 2 + dy));
- setCenter(coord);
-}
-
-
-/*!
- \qmlmethod void QtLocation::Map::prefetchData()
-
- Optional hint that allows the map to prefetch during this idle period
-*/
-void QDeclarativeGeoMap::prefetchData()
-{
- if (!m_map)
- return;
- m_map->prefetchData();
-}
-
-/*!
- \qmlmethod void QtLocation::Map::clearData()
-
- Clears map data collected by the currently selected plugin.
- \note This method will delete cached files.
- \sa plugin
-*/
-void QDeclarativeGeoMap::clearData()
-{
- m_map->clearData();
-}
-
-/*!
- \qmlproperty string QtLocation::Map::errorString
-
- This read-only property holds the textual presentation of the latest mapping provider error.
- If no error has occurred, an empty string is returned.
-
- An empty string may also be returned if an error occurred which has no associated
- textual representation.
-
- \sa QGeoServiceProvider::errorString()
-*/
-
-QString QDeclarativeGeoMap::errorString() const
-{
- return m_errorString;
-}
-
-/*!
- \qmlproperty enumeration QtLocation::Map::error
-
- This read-only property holds the last occurred mapping service provider error.
-
- \list
- \li Map.NoError - No error has occurred.
- \li Map.NotSupportedError -The maps plugin property was not set or there is no mapping manager associated with the plugin.
- \li Map.UnknownParameterError -The plugin did not recognize one of the parameters it was given.
- \li Map.MissingRequiredParameterError - The plugin did not find one of the parameters it was expecting.
- \li Map.ConnectionError - The plugin could not connect to its backend service or database.
- \endlist
-
- \sa QGeoServiceProvider::Error
-*/
-
-QGeoServiceProvider::Error QDeclarativeGeoMap::error() const
-{
- return m_error;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMap::touchEvent(QTouchEvent *event)
-{
- if (isInteractive()) {
- m_gestureArea->handleTouchEvent(event);
- } else {
- //ignore event so sythesized event is generated;
- QQuickItem::touchEvent(event);
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMap::wheelEvent(QWheelEvent *event)
-{
- if (isInteractive())
- m_gestureArea->handleWheelEvent(event);
- else
- QQuickItem::wheelEvent(event);
-
-}
-
-bool QDeclarativeGeoMap::isInteractive()
-{
- return (m_gestureArea->enabled() && m_gestureArea->acceptedGestures()) || m_gestureArea->isActive();
-}
-
-/*!
- \internal
-*/
-bool QDeclarativeGeoMap::childMouseEventFilter(QQuickItem *item, QEvent *event)
-{
- Q_UNUSED(item)
- if (!isVisible() || !isEnabled() || !isInteractive())
- return QQuickItem::childMouseEventFilter(item, event);
-
- switch (event->type()) {
- case QEvent::MouseButtonPress:
- case QEvent::MouseMove:
- case QEvent::MouseButtonRelease:
- return sendMouseEvent(static_cast<QMouseEvent *>(event));
- case QEvent::UngrabMouse: {
- QQuickWindow *win = window();
- if (!win) break;
- if (!win->mouseGrabberItem() ||
- (win->mouseGrabberItem() &&
- win->mouseGrabberItem() != this)) {
- // child lost grab, we could even lost
- // some events if grab already belongs for example
- // in item in diffrent window , clear up states
- mouseUngrabEvent();
- }
- break;
- }
- case QEvent::TouchBegin:
- case QEvent::TouchUpdate:
- case QEvent::TouchEnd:
- case QEvent::TouchCancel:
- if (static_cast<QTouchEvent *>(event)->touchPoints().count() >= 2) {
- // 1 touch point = handle with MouseEvent (event is always synthesized)
- // let the synthesized mouse event grab the mouse,
- // note there is no mouse grabber at this point since
- // touch event comes first (see Qt::AA_SynthesizeMouseForUnhandledTouchEvents)
- return sendTouchEvent(static_cast<QTouchEvent *>(event));
- }
- default:
- break;
- }
- return QQuickItem::childMouseEventFilter(item, event);
-}
-
-/*!
- \qmlmethod void QtLocation::Map::addMapItem(MapItem item)
-
- Adds the given \a item to the Map (for example MapQuickItem, MapCircle). If the object
- already is on the Map, it will not be added again.
-
- As an example, consider the case where you have a MapCircle representing your current position:
-
- \snippet declarative/maps.qml QtQuick import
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/maps.qml Map addMapItem MapCircle at current position
-
- \note MapItemViews cannot be added with this method.
-
- \sa mapItems, removeMapItem, clearMapItems
-*/
-
-void QDeclarativeGeoMap::addMapItem(QDeclarativeGeoMapItemBase *item)
-{
- if (!item || item->quickMap())
- return;
- item->setParentItem(this);
- if (m_map)
- item->setMap(this, m_map);
- m_mapItems.append(item);
- emit mapItemsChanged();
-}
-
-/*!
- \qmlmethod void QtLocation::Map::addMapParameter(MapParameter parameter)
-
- Adds a MapParameter object to the map. The effect of this call is dependent
- on the combination of the content of the MapParameter and the type of
- underlying QGeoMap. If a MapParameter that is not supported by the underlying
- QGeoMap gets added, the call has no effect.
-
- The release of this API with Qt 5.9 is a Technology Preview.
-
- \sa MapParameter, removeMapParameter, mapParameters, clearMapParameters
-
- \since 5.9
-*/
-void QDeclarativeGeoMap::addMapParameter(QDeclarativeGeoMapParameter *parameter)
-{
- if (!parameter->isComponentComplete()) {
- connect(parameter, &QDeclarativeGeoMapParameter::completed, this, &QDeclarativeGeoMap::addMapParameter);
- return;
- }
-
- disconnect(parameter);
- if (m_mapParameters.contains(parameter))
- return;
- parameter->setParent(this);
- m_mapParameters.insert(parameter); // parameter now owned by QDeclarativeGeoMap
- if (m_map)
- m_map->addParameter(parameter);
-}
-
-/*!
- \qmlmethod void QtLocation::Map::removeMapParameter(MapParameter parameter)
-
- Removes the given MapParameter object from the map.
-
- The release of this API with Qt 5.9 is a Technology Preview.
-
- \sa MapParameter, addMapParameter, mapParameters, clearMapParameters
-
- \since 5.9
-*/
-void QDeclarativeGeoMap::removeMapParameter(QDeclarativeGeoMapParameter *parameter)
-{
- if (!m_mapParameters.contains(parameter))
- return;
- if (m_map)
- m_map->removeParameter(parameter);
- m_mapParameters.remove(parameter);
-}
-
-/*!
- \qmlmethod void QtLocation::Map::clearMapParameters()
-
- Removes all map parameters from the map.
-
- The release of this API with Qt 5.9 is a Technology Preview.
-
- \sa MapParameter, mapParameters, addMapParameter, removeMapParameter, clearMapParameters
-
- \since 5.9
-*/
-void QDeclarativeGeoMap::clearMapParameters()
-{
- if (m_map)
- m_map->clearParameters();
- m_mapParameters.clear();
-}
-
-/*!
- \qmlproperty list<MapParameters> QtLocation::Map::mapParameters
-
- Returns the list of all map parameters in no particular order.
- These items include map parameters that were declared statically as part of
- the type declaration, as well as dynamical map parameters (\l addMapParameter).
-
- The release of this API with Qt 5.9 is a Technology Preview.
-
- \sa MapParameter, addMapParameter, removeMapParameter, clearMapParameters
-
- \since 5.9
-*/
-QList<QObject *> QDeclarativeGeoMap::mapParameters()
-{
- QList<QObject *> ret;
- for (QDeclarativeGeoMapParameter *p : m_mapParameters)
- ret << p;
- return ret;
-}
-
-/*!
- \qmlproperty list<MapItem> QtLocation::Map::mapItems
-
- Returns the list of all map items in no particular order.
- These items include items that were declared statically as part of
- the type declaration, as well as dynamical items (\l addMapItem,
- \l MapItemView).
-
- \sa addMapItem, removeMapItem, clearMapItems
-*/
-
-QList<QObject *> QDeclarativeGeoMap::mapItems()
-{
- QList<QObject *> ret;
- foreach (const QPointer<QDeclarativeGeoMapItemBase> &ptr, m_mapItems) {
- if (ptr)
- ret << ptr.data();
- }
- return ret;
-}
-
-/*!
- \qmlmethod void QtLocation::Map::removeMapItem(MapItem item)
-
- Removes the given \a item from the Map (for example MapQuickItem, MapCircle). If
- the MapItem does not exist or was not previously added to the map, the
- method does nothing.
-
- \sa mapItems, addMapItem, clearMapItems
-*/
-void QDeclarativeGeoMap::removeMapItem(QDeclarativeGeoMapItemBase *ptr)
-{
- if (!ptr || !m_map)
- return;
- QPointer<QDeclarativeGeoMapItemBase> item(ptr);
- if (!m_mapItems.contains(item))
- return;
- item.data()->setParentItem(0);
- item.data()->setMap(0, 0);
- // these can be optimized for perf, as we already check the 'contains' above
- m_mapItems.removeOne(item);
- emit mapItemsChanged();
-}
-
-/*!
- \qmlmethod void QtLocation::Map::clearMapItems()
-
- Removes all items from the map.
-
- \sa mapItems, addMapItem, removeMapItem
-*/
-void QDeclarativeGeoMap::clearMapItems()
-{
- if (m_mapItems.isEmpty())
- return;
- for (int i = 0; i < m_mapItems.count(); ++i) {
- if (m_mapItems.at(i)) {
- m_mapItems.at(i).data()->setParentItem(0);
- m_mapItems.at(i).data()->setMap(0, 0);
- }
- }
- m_mapItems.clear();
- emit mapItemsChanged();
-}
-
-/*!
- \qmlproperty MapType QtLocation::Map::activeMapType
-
- \brief Access to the currently active \l{MapType}{map type}.
-
- This property can be set to change the active \l{MapType}{map type}.
- See the \l{Map::supportedMapTypes}{supportedMapTypes} property for possible values.
-
- \sa MapType
-*/
-void QDeclarativeGeoMap::setActiveMapType(QDeclarativeGeoMapType *mapType)
-{
- if (m_activeMapType->mapType() != mapType->mapType()) {
- m_activeMapType = mapType;
- if (m_map)
- m_map->setActiveMapType(mapType->mapType());
- emit activeMapTypeChanged();
- }
-}
-
-QDeclarativeGeoMapType * QDeclarativeGeoMap::activeMapType() const
-{
- return m_activeMapType;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMap::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
-{
- m_gestureArea->setSize(newGeometry.size());
- QQuickItem::geometryChanged(newGeometry, oldGeometry);
-
- if (!m_map || !newGeometry.size().isValid())
- return;
-
- m_map->setViewportSize(newGeometry.size().toSize());
-
- if (!m_initialized) {
- initialize();
- } else {
- setMinimumZoomLevel(m_map->minimumZoom());
-
- // Update the center latitudinal threshold
- double maximumCenterLatitudeAtZoom = m_map->maximumCenterLatitudeAtZoom(m_cameraData.zoomLevel());
- if (maximumCenterLatitudeAtZoom != m_maximumViewportLatitude) {
- m_maximumViewportLatitude = maximumCenterLatitudeAtZoom;
- QGeoCoordinate coord = m_cameraData.center();
- coord.setLatitude(qBound(-m_maximumViewportLatitude, coord.latitude(), m_maximumViewportLatitude));
-
- if (coord != m_cameraData.center()) {
- m_cameraData.setCenter(coord);
- m_map->setCameraData(m_cameraData);
- emit centerChanged(m_cameraData.center());
- }
- }
- }
-
- /*!
- The fitViewportTo*() functions depend on a valid map geometry.
- If they were called prior to the first resize they cause
- the zoomlevel to jump to 0 (showing the world). Therefore the
- calls were queued up until now.
-
- Multiple fitViewportTo*() calls replace each other.
- */
- if (m_pendingFitViewport && width() && height()) {
- fitViewportToGeoShape();
- m_pendingFitViewport = false;
- }
-
-}
-
-/*!
- \qmlmethod void QtLocation::Map::fitViewportToMapItems()
-
- Fits the current viewport to the boundary of all map items. The camera is positioned
- in the center of the map items, and at the largest integral zoom level possible which
- allows all map items to be visible on screen
-
-*/
-void QDeclarativeGeoMap::fitViewportToMapItems()
-{
- fitViewportToMapItemsRefine(true);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMap::fitViewportToMapItemsRefine(bool refine)
-{
- if (!m_map)
- return;
-
- if (m_mapItems.size() == 0)
- return;
-
- double minX = 0;
- double maxX = 0;
- double minY = 0;
- double maxY = 0;
- double topLeftX = 0;
- double topLeftY = 0;
- double bottomRightX = 0;
- double bottomRightY = 0;
- bool haveQuickItem = false;
-
- // find bounds of all map items
- int itemCount = 0;
- for (int i = 0; i < m_mapItems.count(); ++i) {
- if (!m_mapItems.at(i))
- continue;
- QDeclarativeGeoMapItemBase *item = m_mapItems.at(i).data();
- if (!item)
- continue;
-
- // skip quick items in the first pass and refine the fit later
- if (refine) {
- QDeclarativeGeoMapQuickItem *quickItem =
- qobject_cast<QDeclarativeGeoMapQuickItem*>(item);
- if (quickItem) {
- haveQuickItem = true;
- continue;
- }
- }
- // Force map items to update immediately. Needed to ensure correct item size and positions
- // when recursively calling this function.
- if (item->isPolishScheduled())
- item->updatePolish();
-
- topLeftX = item->position().x();
- topLeftY = item->position().y();
- bottomRightX = topLeftX + item->width();
- bottomRightY = topLeftY + item->height();
-
- if (itemCount == 0) {
- minX = topLeftX;
- maxX = bottomRightX;
- minY = topLeftY;
- maxY = bottomRightY;
- } else {
- minX = qMin(minX, topLeftX);
- maxX = qMax(maxX, bottomRightX);
- minY = qMin(minY, topLeftY);
- maxY = qMax(maxY, bottomRightY);
- }
- ++itemCount;
- }
-
- if (itemCount == 0) {
- if (haveQuickItem)
- fitViewportToMapItemsRefine(false);
- return;
- }
- double bboxWidth = maxX - minX;
- double bboxHeight = maxY - minY;
- double bboxCenterX = minX + (bboxWidth / 2.0);
- double bboxCenterY = minY + (bboxHeight / 2.0);
-
- // position camera to the center of bounding box
- QGeoCoordinate coordinate;
- coordinate = m_map->geoProjection().itemPositionToCoordinate(QDoubleVector2D(bboxCenterX, bboxCenterY), false);
- setProperty("center", QVariant::fromValue(coordinate));
-
- // adjust zoom
- double bboxWidthRatio = bboxWidth / (bboxWidth + bboxHeight);
- double mapWidthRatio = width() / (width() + height());
- double zoomRatio;
-
- if (bboxWidthRatio > mapWidthRatio)
- zoomRatio = bboxWidth / width();
- else
- zoomRatio = bboxHeight / height();
-
- qreal newZoom = std::log10(zoomRatio) / std::log10(0.5);
- newZoom = std::floor(qMax(minimumZoomLevel(), (zoomLevel() + newZoom)));
- setProperty("zoomLevel", QVariant::fromValue(newZoom));
-
- // as map quick items retain the same screen size after the camera zooms in/out
- // we refine the viewport again to achieve better results
- if (refine)
- fitViewportToMapItemsRefine(false);
-}
-
-bool QDeclarativeGeoMap::sendMouseEvent(QMouseEvent *event)
-{
- QPointF localPos = mapFromScene(event->windowPos());
- QQuickWindow *win = window();
- QQuickItem *grabber = win ? win->mouseGrabberItem() : 0;
- bool stealEvent = m_gestureArea->isActive();
-
- if ((stealEvent || contains(localPos)) && (!grabber || !grabber->keepMouseGrab())) {
- QScopedPointer<QMouseEvent> mouseEvent(QQuickWindowPrivate::cloneMouseEvent(event, &localPos));
- mouseEvent->setAccepted(false);
-
- switch (mouseEvent->type()) {
- case QEvent::MouseMove:
- m_gestureArea->handleMouseMoveEvent(mouseEvent.data());
- break;
- case QEvent::MouseButtonPress:
- m_gestureArea->handleMousePressEvent(mouseEvent.data());
- break;
- case QEvent::MouseButtonRelease:
- m_gestureArea->handleMouseReleaseEvent(mouseEvent.data());
- break;
- default:
- break;
- }
-
- stealEvent = m_gestureArea->isActive();
- grabber = win ? win->mouseGrabberItem() : 0;
-
- if (grabber && stealEvent && !grabber->keepMouseGrab() && grabber != this)
- grabMouse();
-
- if (stealEvent) {
- //do not deliver
- event->setAccepted(true);
- return true;
- } else {
- return false;
- }
- }
-
- return false;
-}
-
-bool QDeclarativeGeoMap::sendTouchEvent(QTouchEvent *event)
-{
- const QQuickPointerDevice *touchDevice = QQuickPointerDevice::touchDevice(event->device());
- const QTouchEvent::TouchPoint &point = event->touchPoints().first();
-
- auto touchPointGrabberItem = [touchDevice](const QTouchEvent::TouchPoint &point) -> QQuickItem* {
- if (QQuickEventPoint *eventPointer = touchDevice->pointerEvent()->pointById(point.id()))
- return eventPointer->grabber();
- return nullptr;
- };
-
- QQuickItem *grabber = touchPointGrabberItem(point);
-
- bool stealEvent = m_gestureArea->isActive();
- bool containsPoint = contains(mapFromScene(point.scenePos()));
-
- if ((stealEvent || containsPoint) && (!grabber || !grabber->keepTouchGrab())) {
- QScopedPointer<QTouchEvent> touchEvent(new QTouchEvent(event->type(), event->device(), event->modifiers(), event->touchPointStates(), event->touchPoints()));
- touchEvent->setTimestamp(event->timestamp());
- touchEvent->setAccepted(false);
-
- m_gestureArea->handleTouchEvent(touchEvent.data());
- stealEvent = m_gestureArea->isActive();
- grabber = touchPointGrabberItem(point);
-
- if (grabber && stealEvent && !grabber->keepTouchGrab() && grabber != this) {
- QVector<int> ids;
- foreach (const QTouchEvent::TouchPoint &tp, event->touchPoints()) {
- if (!(tp.state() & Qt::TouchPointReleased)) {
- ids.append(tp.id());
- }
- }
- grabTouchPoints(ids);
- }
-
- if (stealEvent) {
- //do not deliver
- event->setAccepted(true);
- return true;
- } else {
- return false;
- }
- }
-
- return false;
-}
-
-#include "moc_qdeclarativegeomap_p.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeomap_p.h b/src/imports/location/qdeclarativegeomap_p.h
deleted file mode 100644
index e0940f97..00000000
--- a/src/imports/location/qdeclarativegeomap_p.h
+++ /dev/null
@@ -1,228 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEGEOMAP_H
-#define QDECLARATIVEGEOMAP_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 "qgeoserviceprovider.h"
-#include "qdeclarativegeomapitemview_p.h"
-#include "qquickgeomapgesturearea_p.h"
-#include "qgeocameradata_p.h"
-#include <QtQuick/QQuickItem>
-#include <QtCore/QPointer>
-#include <QtCore/QSet>
-#include <QtGui/QColor>
-#include <QtPositioning/qgeoshape.h>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoServiceProvider;
-class QDeclarativeGeoMapType;
-class QDeclarativeGeoMapCopyrightNotice;
-class QDeclarativeGeoMapParameter;
-
-class QDeclarativeGeoMap : public QQuickItem
-{
- Q_OBJECT
- Q_ENUMS(QGeoServiceProvider::Error)
- Q_PROPERTY(QQuickGeoMapGestureArea *gesture READ gesture CONSTANT)
- Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged)
- Q_PROPERTY(qreal minimumZoomLevel READ minimumZoomLevel WRITE setMinimumZoomLevel NOTIFY minimumZoomLevelChanged)
- Q_PROPERTY(qreal maximumZoomLevel READ maximumZoomLevel WRITE setMaximumZoomLevel NOTIFY maximumZoomLevelChanged)
- Q_PROPERTY(qreal zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged)
- Q_PROPERTY(QDeclarativeGeoMapType *activeMapType READ activeMapType WRITE setActiveMapType NOTIFY activeMapTypeChanged)
- Q_PROPERTY(QQmlListProperty<QDeclarativeGeoMapType> supportedMapTypes READ supportedMapTypes NOTIFY supportedMapTypesChanged)
- Q_PROPERTY(QGeoCoordinate center READ center WRITE setCenter NOTIFY centerChanged)
- Q_PROPERTY(QList<QObject *> mapItems READ mapItems NOTIFY mapItemsChanged)
- Q_PROPERTY(QList<QObject *> mapParameters READ mapParameters)
- Q_PROPERTY(QGeoServiceProvider::Error error READ error NOTIFY errorChanged)
- Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
- Q_PROPERTY(QGeoShape visibleRegion READ visibleRegion WRITE setVisibleRegion)
- Q_PROPERTY(bool copyrightsVisible READ copyrightsVisible WRITE setCopyrightsVisible NOTIFY copyrightsVisibleChanged)
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
- Q_INTERFACES(QQmlParserStatus)
-
-public:
-
- explicit QDeclarativeGeoMap(QQuickItem *parent = 0);
- ~QDeclarativeGeoMap();
-
- void setPlugin(QDeclarativeGeoServiceProvider *plugin);
- QDeclarativeGeoServiceProvider *plugin() const;
-
- void setActiveMapType(QDeclarativeGeoMapType *mapType);
- QDeclarativeGeoMapType *activeMapType() const;
-
- void setMinimumZoomLevel(qreal minimumZoomLevel);
- qreal minimumZoomLevel() const;
-
- void setMaximumZoomLevel(qreal maximumZoomLevel);
- qreal maximumZoomLevel() const;
-
- void setZoomLevel(qreal zoomLevel);
- qreal zoomLevel() const;
-
- void setCenter(const QGeoCoordinate &center);
- QGeoCoordinate center() const;
-
- void setVisibleRegion(const QGeoShape &shape);
- QGeoShape visibleRegion() const;
-
- void setCopyrightsVisible(bool visible);
- bool copyrightsVisible() const;
-
- void setColor(const QColor &color);
- QColor color() const;
-
- QQmlListProperty<QDeclarativeGeoMapType> supportedMapTypes();
-
- Q_INVOKABLE void removeMapItem(QDeclarativeGeoMapItemBase *item);
- Q_INVOKABLE void addMapItem(QDeclarativeGeoMapItemBase *item);
-
- Q_INVOKABLE void clearMapItems();
- QList<QObject *> mapItems();
-
- Q_INVOKABLE void addMapParameter(QDeclarativeGeoMapParameter *parameter);
- Q_INVOKABLE void removeMapParameter(QDeclarativeGeoMapParameter *parameter);
- Q_INVOKABLE void clearMapParameters();
- QList<QObject *> mapParameters();
-
- Q_INVOKABLE QGeoCoordinate toCoordinate(const QPointF &position, bool clipToViewPort = true) const;
- Q_INVOKABLE QPointF fromCoordinate(const QGeoCoordinate &coordinate, bool clipToViewPort = true) const;
-
- QQuickGeoMapGestureArea *gesture();
-
- Q_INVOKABLE void fitViewportToMapItems();
- Q_INVOKABLE void pan(int dx, int dy);
- Q_INVOKABLE void prefetchData(); // optional hint for prefetch
- Q_INVOKABLE void clearData();
-
- QString errorString() const;
- QGeoServiceProvider::Error error() const;
-
-Q_SIGNALS:
- void pluginChanged(QDeclarativeGeoServiceProvider *plugin);
- void zoomLevelChanged(qreal zoomLevel);
- void centerChanged(const QGeoCoordinate &coordinate);
- void activeMapTypeChanged();
- void supportedMapTypesChanged();
- void minimumZoomLevelChanged();
- void maximumZoomLevelChanged();
- void mapItemsChanged();
- void errorChanged();
- void copyrightLinkActivated(const QString &link);
- void copyrightsVisibleChanged(bool visible);
- void colorChanged(const QColor &color);
-
-protected:
- void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE ;
- void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE ;
- void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE ;
- void mouseUngrabEvent() Q_DECL_OVERRIDE ;
- void touchUngrabEvent() Q_DECL_OVERRIDE;
- void touchEvent(QTouchEvent *event) Q_DECL_OVERRIDE ;
- void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE ;
-
- bool childMouseEventFilter(QQuickItem *item, QEvent *event) Q_DECL_OVERRIDE;
- bool sendMouseEvent(QMouseEvent *event);
- bool sendTouchEvent(QTouchEvent *event);
-
- void componentComplete() Q_DECL_OVERRIDE;
- QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) Q_DECL_OVERRIDE;
- void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE;
-
- void setError(QGeoServiceProvider::Error error, const QString &errorString);
- void initialize();
-private Q_SLOTS:
- void mappingManagerInitialized();
- void pluginReady();
- void onMapChildrenChanged();
- void onSupportedMapTypesChanged();
-
-private:
- void setupMapView(QDeclarativeGeoMapItemView *view);
- void populateMap();
- void populateParameters();
- void fitViewportToMapItemsRefine(bool refine);
- void fitViewportToGeoShape();
- bool isInteractive();
-
-private:
- QDeclarativeGeoServiceProvider *m_plugin;
- QGeoMappingManager *m_mappingManager;
- QDeclarativeGeoMapType *m_activeMapType;
- QList<QDeclarativeGeoMapType *> m_supportedMapTypes;
- QList<QDeclarativeGeoMapItemView *> m_mapViews;
- QQuickGeoMapGestureArea *m_gestureArea;
- QGeoMap *m_map;
- QPointer<QDeclarativeGeoMapCopyrightNotice> m_copyrights;
- QList<QPointer<QDeclarativeGeoMapItemBase> > m_mapItems;
- QString m_errorString;
- QGeoServiceProvider::Error m_error;
- QGeoShape m_region;
- QColor m_color;
- QGeoCameraData m_cameraData;
- bool m_componentCompleted;
- bool m_pendingFitViewport;
- bool m_copyrightsVisible;
- double m_maximumViewportLatitude;
- bool m_initialized;
- bool m_validRegion;
- QSet<QDeclarativeGeoMapParameter *> m_mapParameters;
-
- friend class QDeclarativeGeoMapItem;
- friend class QDeclarativeGeoMapItemView;
- friend class QQuickGeoMapGestureArea;
- Q_DISABLE_COPY(QDeclarativeGeoMap)
-};
-
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeGeoMap)
-
-#endif
diff --git a/src/imports/location/qdeclarativegeomapcopyrightsnotice.cpp b/src/imports/location/qdeclarativegeomapcopyrightsnotice.cpp
deleted file mode 100644
index 7b5a5765..00000000
--- a/src/imports/location/qdeclarativegeomapcopyrightsnotice.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Aaron McCarthy <mccarthy.aaron@gmail.com>
-** Copyright (C) 2015 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 "qdeclarativegeomapcopyrightsnotice_p.h"
-
-#include <QtGui/QTextDocument>
-#include <QtGui/QAbstractTextDocumentLayout>
-#include <QtGui/QPainter>
-#include <QtQuick/private/qquickanchors_p.h>
-#include <QtQuick/private/qquickanchors_p_p.h>
-
-QT_BEGIN_NAMESPACE
-
-QDeclarativeGeoMapCopyrightNotice::QDeclarativeGeoMapCopyrightNotice(QQuickItem *parent)
-: QQuickPaintedItem(parent), m_copyrightsHtml(0), m_copyrightsVisible(true)
-{
- QQuickAnchors *anchors = property("anchors").value<QQuickAnchors *>();
- if (anchors) {
- anchors->setLeft(QQuickAnchorLine(parent, QQuickAnchors::LeftAnchor));
- anchors->setBottom(QQuickAnchorLine(parent, QQuickAnchors::BottomAnchor));
- }
-}
-
-QDeclarativeGeoMapCopyrightNotice::~QDeclarativeGeoMapCopyrightNotice()
-{
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapCopyrightNotice::paint(QPainter *painter)
-{
- painter->drawImage(0, 0, m_copyrightsImage);
-}
-
-void QDeclarativeGeoMapCopyrightNotice::mousePressEvent(QMouseEvent *event)
-{
- if (m_copyrightsHtml) {
- m_activeAnchor = m_copyrightsHtml->documentLayout()->anchorAt(event->pos());
- if (!m_activeAnchor.isEmpty())
- return;
- }
-
- QQuickPaintedItem::mousePressEvent(event);
-}
-
-void QDeclarativeGeoMapCopyrightNotice::mouseReleaseEvent(QMouseEvent *event)
-{
- if (m_copyrightsHtml) {
- QString anchor = m_copyrightsHtml->documentLayout()->anchorAt(event->pos());
- if (anchor == m_activeAnchor && !anchor.isEmpty()) {
- emit linkActivated(anchor);
- m_activeAnchor.clear();
- }
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapCopyrightNotice::setCopyrightsVisible(bool visible)
-{
- m_copyrightsVisible = visible;
-
- setVisible(!m_copyrightsImage.isNull() && visible);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapCopyrightNotice::setCopyrightsZ(int copyrightsZ)
-{
- setZ(copyrightsZ);
- update();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapCopyrightNotice::copyrightsChanged(const QImage &copyrightsImage)
-{
- delete m_copyrightsHtml;
- m_copyrightsHtml = 0;
-
- m_copyrightsImage = copyrightsImage;
-
- setWidth(m_copyrightsImage.width());
- setHeight(m_copyrightsImage.height());
-
- setKeepMouseGrab(false);
- setAcceptedMouseButtons(Qt::NoButton);
- setVisible(m_copyrightsVisible);
-
- update();
-}
-
-void QDeclarativeGeoMapCopyrightNotice::copyrightsChanged(const QString &copyrightsHtml)
-{
- if (copyrightsHtml.isEmpty() || !m_copyrightsVisible) {
- m_copyrightsImage = QImage();
- setVisible(false);
- return;
- } else {
- setVisible(true);
- }
-
- if (!m_copyrightsHtml)
- m_copyrightsHtml = new QTextDocument(this);
-
- m_copyrightsHtml->setHtml(copyrightsHtml);
-
- m_copyrightsImage = QImage(m_copyrightsHtml->size().toSize(),
- QImage::Format_ARGB32_Premultiplied);
- m_copyrightsImage.fill(qPremultiply(qRgba(255, 255, 255, 128)));
-
- QPainter painter(&m_copyrightsImage);
- //m_copyrightsHtml->drawContents(&painter); // <- this uses the default application palette, that might have, f.ex., white text
- QAbstractTextDocumentLayout::PaintContext ctx;
- ctx.palette.setColor(QPalette::Text, QColor(QStringLiteral("black")));
- ctx.palette.setColor(QPalette::Link, QColor(QStringLiteral("blue")));
- m_copyrightsHtml->documentLayout()->draw(&painter, ctx);
-
- setWidth(m_copyrightsImage.width());
- setHeight(m_copyrightsImage.height());
-
- setContentsSize(m_copyrightsImage.size());
-
- setKeepMouseGrab(true);
- setAcceptedMouseButtons(Qt::LeftButton);
-
- update();
-}
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeomapcopyrightsnotice_p.h b/src/imports/location/qdeclarativegeomapcopyrightsnotice_p.h
deleted file mode 100644
index 771ced6c..00000000
--- a/src/imports/location/qdeclarativegeomapcopyrightsnotice_p.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Aaron McCarthy <mccarthy.aaron@gmail.com>
-** Copyright (C) 2015 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 QDECLARATIVEGEOMAPCOPYRIGHTSNOTICE_H
-#define QDECLARATIVEGEOMAPCOPYRIGHTSNOTICE_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 <QtGui/QImage>
-#include <QtQuick/QQuickPaintedItem>
-
-QT_BEGIN_NAMESPACE
-
-class QTextDocument;
-
-class QDeclarativeGeoMapCopyrightNotice : public QQuickPaintedItem
-{
- Q_OBJECT
-
-public:
- explicit QDeclarativeGeoMapCopyrightNotice(QQuickItem *parent);
- ~QDeclarativeGeoMapCopyrightNotice();
-
- void setCopyrightsZ(int copyrightsZ);
-
- void setCopyrightsVisible(bool visible);
-
-public Q_SLOTS:
- void copyrightsChanged(const QImage &copyrightsImage);
- void copyrightsChanged(const QString &copyrightsHtml);
-
-signals:
- void linkActivated(const QString &link);
-
-protected:
- void paint(QPainter *painter) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
- void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
-
-private:
- QTextDocument *m_copyrightsHtml;
- QImage m_copyrightsImage;
- QString m_activeAnchor;
- bool m_copyrightsVisible;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/imports/location/qdeclarativegeomapitembase.cpp b/src/imports/location/qdeclarativegeomapitembase.cpp
deleted file mode 100644
index 84bf757d..00000000
--- a/src/imports/location/qdeclarativegeomapitembase.cpp
+++ /dev/null
@@ -1,263 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativegeomapitembase_p.h"
-#include "qgeocameradata_p.h"
-#include <QtQml/QQmlInfo>
-#include <QtQuick/QSGOpacityNode>
-#include <QtQuick/private/qquickmousearea_p.h>
-#include <QtQuick/private/qquickitem_p.h>
-
-QT_BEGIN_NAMESPACE
-
-QGeoMapViewportChangeEvent::QGeoMapViewportChangeEvent()
- : zoomLevelChanged(false),
- centerChanged(false),
- mapSizeChanged(false),
- tiltChanged(false),
- bearingChanged(false),
- rollChanged(false)
-{
-}
-
-QGeoMapViewportChangeEvent::QGeoMapViewportChangeEvent(const QGeoMapViewportChangeEvent &other)
-{
- this->operator=(other);
-}
-
-QGeoMapViewportChangeEvent &QGeoMapViewportChangeEvent::operator=(const QGeoMapViewportChangeEvent &other)
-{
- if (this == &other)
- return (*this);
-
- cameraData = other.cameraData;
- mapSize = other.mapSize;
- zoomLevelChanged = other.zoomLevelChanged;
- centerChanged = other.centerChanged;
- mapSizeChanged = other.mapSizeChanged;
- tiltChanged = other.tiltChanged;
- bearingChanged = other.bearingChanged;
- rollChanged = other.rollChanged;
-
- return (*this);
-}
-
-QDeclarativeGeoMapItemBase::QDeclarativeGeoMapItemBase(QQuickItem *parent)
-: QQuickItem(parent), map_(0), quickMap_(0)
-{
- setFiltersChildMouseEvents(true);
- connect(this, SIGNAL(childrenChanged()),
- this, SLOT(afterChildrenChanged()));
-}
-
-QDeclarativeGeoMapItemBase::~QDeclarativeGeoMapItemBase()
-{
- disconnect(this, SLOT(afterChildrenChanged()));
- if (quickMap_)
- quickMap_->removeMapItem(this);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapItemBase::afterChildrenChanged()
-{
- QList<QQuickItem *> kids = childItems();
- if (kids.size() > 0) {
- bool printedWarning = false;
- foreach (QQuickItem *i, kids) {
- if (i->flags() & QQuickItem::ItemHasContents
- && !qobject_cast<QQuickMouseArea *>(i)) {
- if (!printedWarning) {
- qmlWarning(this) << "Geographic map items do not support child items";
- printedWarning = true;
- }
-
- qmlWarning(i) << "deleting this child";
- i->deleteLater();
- }
- }
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapItemBase::setMap(QDeclarativeGeoMap *quickMap, QGeoMap *map)
-{
- if (quickMap == quickMap_)
- return;
- if (quickMap && quickMap_)
- return; // don't allow association to more than one map
- if (quickMap_)
- quickMap_->disconnect(this);
- if (map_)
- map_->disconnect(this);
-
- quickMap_ = quickMap;
- map_ = map;
-
- if (map_ && quickMap_) {
- connect(map_, SIGNAL(cameraDataChanged(QGeoCameraData)),
- this, SLOT(baseCameraDataChanged(QGeoCameraData)));
- connect(quickMap, SIGNAL(heightChanged()), this, SLOT(polishAndUpdate()));
- connect(quickMap, SIGNAL(widthChanged()), this, SLOT(polishAndUpdate()));
- lastSize_ = QSizeF(quickMap_->width(), quickMap_->height());
- lastCameraData_ = map_->cameraData();
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapItemBase::baseCameraDataChanged(const QGeoCameraData &cameraData)
-{
- QGeoMapViewportChangeEvent evt;
- evt.cameraData = cameraData;
- evt.mapSize = QSizeF(quickMap_->width(), quickMap_->height());
-
- if (evt.mapSize != lastSize_)
- evt.mapSizeChanged = true;
-
- if (cameraData.bearing() != lastCameraData_.bearing())
- evt.bearingChanged = true;
- if (cameraData.center() != lastCameraData_.center())
- evt.centerChanged = true;
- if (cameraData.roll() != lastCameraData_.roll())
- evt.rollChanged = true;
- if (cameraData.tilt() != lastCameraData_.tilt())
- evt.tiltChanged = true;
- if (cameraData.zoomLevel() != lastCameraData_.zoomLevel())
- evt.zoomLevelChanged = true;
-
- lastSize_ = evt.mapSize;
- lastCameraData_ = cameraData;
-
- afterViewportChanged(evt);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapItemBase::setPositionOnMap(const QGeoCoordinate &coordinate, const QPointF &offset)
-{
- if (!map_ || !quickMap_)
- return;
-
- QPointF topLeft = map_->geoProjection().coordinateToItemPosition(coordinate, false).toPointF() - offset;
-
- setPosition(topLeft);
-}
-
-/*!
- \internal
-*/
-float QDeclarativeGeoMapItemBase::zoomLevelOpacity() const
-{
- if (quickMap_->zoomLevel() > 3.0)
- return 1.0;
- else if (quickMap_->zoomLevel() > 2.0)
- return quickMap_->zoomLevel() - 2.0;
- else
- return 0.0;
-}
-
-bool QDeclarativeGeoMapItemBase::childMouseEventFilter(QQuickItem *item, QEvent *event)
-{
- Q_UNUSED(item)
- if (event->type() == QEvent::MouseButtonPress && !contains(static_cast<QMouseEvent*>(event)->pos())) {
- // This is an evil hack: in case of items that are not rectangles, we never accept the event.
- // Instead the events are now delivered to QDeclarativeGeoMapItemBase which doesn't to anything with them.
- // The map below it still works since it filters events and steals the events at some point.
- event->setAccepted(false);
- return true;
- }
- return false;
-}
-
-/*!
- \internal
-*/
-QSGNode *QDeclarativeGeoMapItemBase::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *pd)
-{
- if (!map_ || !quickMap_) {
- delete oldNode;
- return 0;
- }
-
- QSGOpacityNode *opn = static_cast<QSGOpacityNode *>(oldNode);
- if (!opn)
- opn = new QSGOpacityNode();
-
- opn->setOpacity(zoomLevelOpacity());
-
- QSGNode *oldN = opn->childCount() ? opn->firstChild() : 0;
- opn->removeAllChildNodes();
- if (opn->opacity() > 0.0) {
- QSGNode *n = this->updateMapItemPaintNode(oldN, pd);
- if (n)
- opn->appendChildNode(n);
- } else {
- delete oldN;
- }
-
- return opn;
-}
-
-/*!
- \internal
-*/
-QSGNode *QDeclarativeGeoMapItemBase::updateMapItemPaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
-{
- delete oldNode;
- return 0;
-}
-
-bool QDeclarativeGeoMapItemBase::isPolishScheduled() const
-{
- return QQuickItemPrivate::get(this)->polishScheduled;
-}
-
-void QDeclarativeGeoMapItemBase::polishAndUpdate()
-{
- polish();
- update();
-}
-
-
-#include "moc_qdeclarativegeomapitembase_p.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeomapitembase_p.h b/src/imports/location/qdeclarativegeomapitembase_p.h
deleted file mode 100644
index c7793fbd..00000000
--- a/src/imports/location/qdeclarativegeomapitembase_p.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEGEOMAPITEMBASE_H
-#define QDECLARATIVEGEOMAPITEMBASE_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 <QtQuick/QQuickItem>
-
-#include "qdeclarativegeomap_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QGeoMapViewportChangeEvent
-{
-public:
- explicit QGeoMapViewportChangeEvent();
- QGeoMapViewportChangeEvent(const QGeoMapViewportChangeEvent &other);
- QGeoMapViewportChangeEvent &operator=(const QGeoMapViewportChangeEvent &other);
-
- QGeoCameraData cameraData;
- QSizeF mapSize;
-
- bool zoomLevelChanged;
- bool centerChanged;
- bool mapSizeChanged;
- bool tiltChanged;
- bool bearingChanged;
- bool rollChanged;
-};
-
-class QDeclarativeGeoMapItemBase : public QQuickItem
-{
- Q_OBJECT
-public:
- explicit QDeclarativeGeoMapItemBase(QQuickItem *parent = 0);
- virtual ~QDeclarativeGeoMapItemBase();
-
- virtual void setMap(QDeclarativeGeoMap *quickMap, QGeoMap *map);
- virtual void setPositionOnMap(const QGeoCoordinate &coordinate, const QPointF &offset);
-
- QDeclarativeGeoMap *quickMap() { return quickMap_; }
- QGeoMap *map() { return map_; }
-
- QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *);
- virtual QSGNode *updateMapItemPaintNode(QSGNode *, UpdatePaintNodeData *);
-
-protected Q_SLOTS:
- virtual void afterChildrenChanged();
- virtual void afterViewportChanged(const QGeoMapViewportChangeEvent &event) = 0;
- void polishAndUpdate();
-
-protected:
- float zoomLevelOpacity() const;
- bool childMouseEventFilter(QQuickItem *item, QEvent *event);
- bool isPolishScheduled() const;
-
-private Q_SLOTS:
- void baseCameraDataChanged(const QGeoCameraData &camera);
-
-private:
- QGeoMap *map_;
- QDeclarativeGeoMap *quickMap_;
-
- QSizeF lastSize_;
- QGeoCameraData lastCameraData_;
-
- friend class QDeclarativeGeoMap;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/imports/location/qdeclarativegeomapitemview.cpp b/src/imports/location/qdeclarativegeomapitemview.cpp
deleted file mode 100644
index 0a9128f3..00000000
--- a/src/imports/location/qdeclarativegeomapitemview.cpp
+++ /dev/null
@@ -1,540 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 Jolla Ltd.
-** Contact: Aaron McCarthy <aaron.mccarthy@jollamobile.com>
-** Copyright (C) 2015 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 "qdeclarativegeomapitemview_p.h"
-#include "qdeclarativegeomap_p.h"
-#include "qdeclarativegeomapitembase_p.h"
-#include "mapitemviewdelegateincubator.h"
-
-#include <QtCore/QAbstractItemModel>
-#include <QtQml/QQmlContext>
-#include <QtQml/QQmlIncubator>
-#include <QtQml/private/qqmlopenmetaobject_p.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype MapItemView
- \instantiates QDeclarativeGeoMapItemView
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-maps
- \since Qt Location 5.5
- \inherits QObject
-
- \brief The MapItemView is used to populate Map from a model.
-
- The MapItemView is used to populate Map with MapItems from a model.
- The MapItemView type only makes sense when contained in a Map,
- meaning that it has no standalone presentation.
-
- \section2 Example Usage
-
- This example demonstrates how to use the MapViewItem object to display
- a \l{Route}{route} on a \l{Map}{map}:
-
- \snippet declarative/maps.qml QtQuick import
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/maps.qml MapRoute
-*/
-
-QDeclarativeGeoMapItemView::QDeclarativeGeoMapItemView(QQuickItem *parent)
- : QObject(parent), componentCompleted_(false), delegate_(0),
- itemModel_(0), map_(0), fitViewport_(false), m_metaObjectType(0),
- m_readyIncubators(0), m_repopulating(false)
-{
-}
-
-QDeclarativeGeoMapItemView::~QDeclarativeGeoMapItemView()
-{
- removeInstantiatedItems();
- if (m_metaObjectType)
- m_metaObjectType->release();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapItemView::componentComplete()
-{
- componentCompleted_ = true;
-}
-
-void QDeclarativeGeoMapItemView::incubatorStatusChanged(MapItemViewDelegateIncubator *incubator,
- QQmlIncubator::Status status,
- bool batched)
-{
- if (status == QQmlIncubator::Loading)
- return;
-
- QDeclarativeGeoMapItemViewItemData *itemData = incubator->m_itemData;
- if (!itemData) {
- // Should never get here
- qWarning() << "MapItemViewDelegateIncubator incubating invalid itemData";
- return;
- }
-
- switch (status) {
- case QQmlIncubator::Ready:
- {
- QDeclarativeGeoMapItemBase *item = qobject_cast<QDeclarativeGeoMapItemBase *>(incubator->object());
- if (!item)
- break;
- itemData->item = item;
- if (!itemData->item) {
- qWarning() << "QDeclarativeGeoMapItemView map item delegate is of unsupported type.";
- delete incubator->object();
- } else {
- if (!batched) {
- map_->addMapItem(itemData->item);
- fitViewport();
- } else {
- ++m_readyIncubators; // QSemaphore not needed as multiple threads not involved
-
- if (m_readyIncubators == m_itemDataBatched.size()) {
-
- // Clearing stuff older than the reset
- foreach (QDeclarativeGeoMapItemViewItemData *i, m_itemData)
- removeItemData(i);
- m_itemData.clear();
-
- // Adding everthing created after reset was issued
- foreach (QDeclarativeGeoMapItemViewItemData *i, m_itemDataBatched) {
- map_->addMapItem(i->item);
- }
- m_itemData = m_itemDataBatched;
- m_itemDataBatched.clear();
-
- m_readyIncubators = 0;
- m_repopulating = false;
-
- fitViewport();
- }
- }
- }
- delete itemData->incubator;
- itemData->incubator = 0;
- break;
- }
- case QQmlIncubator::Null:
- // Should never get here
- delete itemData->incubator;
- itemData->incubator = 0;
- break;
- case QQmlIncubator::Error:
- qWarning() << "QDeclarativeGeoMapItemView map item creation failed.";
- delete itemData->incubator;
- itemData->incubator = 0;
- break;
- default:
- ;
- }
-}
-
-/*!
- \qmlproperty model QtLocation::MapItemView::model
-
- This property holds the model that provides data used for creating the map items defined by the
- delegate. Only QAbstractItemModel based models are supported.
-*/
-QVariant QDeclarativeGeoMapItemView::model() const
-{
- return QVariant::fromValue(itemModel_);
-}
-
-void QDeclarativeGeoMapItemView::setModel(const QVariant &model)
-{
- QAbstractItemModel *itemModel = model.value<QAbstractItemModel *>();
- if (itemModel == itemModel_)
- return;
-
- if (itemModel_) {
- disconnect(itemModel_, SIGNAL(modelReset()), this, SLOT(itemModelReset()));
- disconnect(itemModel_, SIGNAL(rowsRemoved(QModelIndex,int,int)),
- this, SLOT(itemModelRowsRemoved(QModelIndex,int,int)));
- disconnect(itemModel_, SIGNAL(rowsInserted(QModelIndex,int,int)),
- this, SLOT(itemModelRowsInserted(QModelIndex,int,int)));
- disconnect(itemModel_, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)),
- this, SLOT(itemModelRowsMoved(QModelIndex,int,int,QModelIndex,int)));
- disconnect(itemModel_, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
- this, SLOT(itemModelDataChanged(QModelIndex,QModelIndex,QVector<int>)));
-
- removeInstantiatedItems(); // this also terminates ongong repopulations.
- m_metaObjectType->release();
- m_metaObjectType = 0;
-
- itemModel_ = 0;
- }
-
- if (itemModel) {
- itemModel_ = itemModel;
- connect(itemModel_, SIGNAL(modelReset()), this, SLOT(itemModelReset()));
- connect(itemModel_, SIGNAL(rowsRemoved(QModelIndex,int,int)),
- this, SLOT(itemModelRowsRemoved(QModelIndex,int,int)));
- connect(itemModel_, SIGNAL(rowsInserted(QModelIndex,int,int)),
- this, SLOT(itemModelRowsInserted(QModelIndex,int,int)));
- connect(itemModel_, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)),
- this, SLOT(itemModelRowsMoved(QModelIndex,int,int,QModelIndex,int)));
- connect(itemModel_, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
- this, SLOT(itemModelDataChanged(QModelIndex,QModelIndex,QVector<int>)));
-
- m_metaObjectType = new QQmlOpenMetaObjectType(&QObject::staticMetaObject, 0);
- foreach (const QByteArray &name, itemModel_->roleNames())
- m_metaObjectType->createProperty(name);
-
- instantiateAllItems();
- }
-
- emit modelChanged();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapItemView::itemModelReset()
-{
- repopulate();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapItemView::itemModelRowsInserted(const QModelIndex &index, int start, int end)
-{
- Q_UNUSED(index)
-
- if (!componentCompleted_ || !map_ || !delegate_ || !itemModel_)
- return;
-
- for (int i = start; i <= end; ++i) {
- const QModelIndex insertedIndex = itemModel_->index(i, 0, index);
- // If ran inside a qquickwidget which forces incubators to be synchronous, this call won't happen
- // with m_repopulating == true while incubators from a model reset are still incubating.
- // Note that having the model in a different thread is not supported in general.
- createItemForIndex(insertedIndex, m_repopulating);
- }
-
- fitViewport();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapItemView::itemModelRowsRemoved(const QModelIndex &index, int start, int end)
-{
- Q_UNUSED(index)
-
- if (!componentCompleted_ || !map_ || !delegate_ || !itemModel_)
- return;
-
- for (int i = end; i >= start; --i) {
- if (m_repopulating) {
- QDeclarativeGeoMapItemViewItemData *itemData = m_itemDataBatched.takeAt(i);
- if (!itemData)
- continue;
- if (itemData->incubator) {
- if (itemData->incubator->isReady()) {
- --m_readyIncubators;
- delete itemData->incubator->object();
- }
- itemData->incubator->clear();
- }
- delete itemData;
- } else {
- QDeclarativeGeoMapItemViewItemData *itemData = m_itemData.takeAt(i);
- removeItemData(itemData);
- }
- }
-
- fitViewport();
-}
-
-void QDeclarativeGeoMapItemView::itemModelRowsMoved(const QModelIndex &parent, int start, int end,
- const QModelIndex &destination, int row)
-{
- Q_UNUSED(parent)
- Q_UNUSED(start)
- Q_UNUSED(end)
- Q_UNUSED(destination)
- Q_UNUSED(row)
-
- qWarning() << "QDeclarativeGeoMapItemView does not support models that move rows.";
-}
-
-void QDeclarativeGeoMapItemView::itemModelDataChanged(const QModelIndex &topLeft,
- const QModelIndex &bottomRight,
- const QVector<int> &roles)
-{
- Q_UNUSED(roles)
-
- if (!m_itemData.count() || (m_repopulating && !m_itemDataBatched.count()) )
- return;
-
- for (int i = topLeft.row(); i <= bottomRight.row(); ++i) {
- const QModelIndex index = itemModel_->index(i, 0);
- QDeclarativeGeoMapItemViewItemData *itemData;
- if (m_repopulating)
- itemData= m_itemDataBatched.at(i);
- else
- itemData= m_itemData.at(i);
-
- QHashIterator<int, QByteArray> iterator(itemModel_->roleNames());
- while (iterator.hasNext()) {
- iterator.next();
-
- QVariant modelData = itemModel_->data(index, iterator.key());
- if (!modelData.isValid())
- continue;
-
- itemData->context->setContextProperty(QString::fromLatin1(iterator.value().constData()),
- modelData);
- itemData->modelDataMeta->setValue(iterator.value(), modelData);
- }
- }
-}
-
-/*!
- \qmlproperty Component QtLocation::MapItemView::delegate
-
- This property holds the delegate which defines how each item in the
- model should be displayed. The Component must contain exactly one
- MapItem -derived object as the root object.
-*/
-QQmlComponent *QDeclarativeGeoMapItemView::delegate() const
-{
- return delegate_;
-}
-
-void QDeclarativeGeoMapItemView::setDelegate(QQmlComponent *delegate)
-{
- if (delegate_ == delegate)
- return;
-
- delegate_ = delegate;
-
- repopulate();
- emit delegateChanged();
-}
-
-/*!
- \qmlproperty Component QtLocation::MapItemView::autoFitViewport
-
- This property controls whether to automatically pan and zoom the viewport
- to display all map items when items are added or removed.
-
- Defaults to false.
-*/
-bool QDeclarativeGeoMapItemView::autoFitViewport() const
-{
- return fitViewport_;
-}
-
-void QDeclarativeGeoMapItemView::setAutoFitViewport(const bool &fitViewport)
-{
- if (fitViewport == fitViewport_)
- return;
- fitViewport_ = fitViewport;
- emit autoFitViewportChanged();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapItemView::fitViewport()
-{
- if (!map_ || !fitViewport_ || m_repopulating)
- return;
-
- if (map_->mapItems().size() > 0)
- map_->fitViewportToMapItems();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapItemView::setMap(QDeclarativeGeoMap *map)
-{
- if (!map || map_) // changing map on the fly not supported
- return;
- map_ = map;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapItemView::removeInstantiatedItems()
-{
- if (!map_)
- return;
-
- terminateOngoingRepopulation();
- foreach (QDeclarativeGeoMapItemViewItemData *itemData, m_itemData)
- removeItemData(itemData);
- m_itemData.clear();
-}
-
-/*!
- \internal
-
- Instantiates all items.
-*/
-void QDeclarativeGeoMapItemView::instantiateAllItems()
-{
- if (!componentCompleted_ || !map_ || !delegate_ || !itemModel_)
- return;
- Q_ASSERT(!m_itemDataBatched.size());
- m_repopulating = true;
-
- // QQuickWidget forces incubators to synchronous mode. Thus itemDataChanged gets called during the for loop below.
- m_itemDataBatched.resize(itemModel_->rowCount());
- for (int i = 0; i < itemModel_->rowCount(); ++i) {
- const QModelIndex index = itemModel_->index(i, 0);
- createItemForIndex(index, true);
- }
-
- fitViewport();
-}
-
-void QDeclarativeGeoMapItemView::removeItemData(QDeclarativeGeoMapItemViewItemData *itemData)
-{
- if (!itemData)
- return;
- if (itemData->incubator) {
- if (itemData->incubator->isReady()) {
- if (itemData->incubator->object() == itemData->item) {
- map_->removeMapItem(itemData->item); // removeMapItem checks whether the item is in the map, so it's safe to call.
- itemData->item = 0;
- }
- delete itemData->incubator->object();
- }
- itemData->incubator->clear(); // stops ongoing incubation
- }
- if (itemData->item)
- map_->removeMapItem(itemData->item);
- delete itemData; // destroys the ->item too.
-}
-
-void QDeclarativeGeoMapItemView::terminateOngoingRepopulation()
-{
- if (m_repopulating) {
- // Terminate the previous resetting task. Not all incubators finished, but
- // QQmlIncubatorController operates in the same thread, so it is safe
- // to check, here, whether incubators are ready or not, without having
- // to race with them.
-
- foreach (QDeclarativeGeoMapItemViewItemData *itemData, m_itemDataBatched)
- removeItemData(itemData);
-
- m_itemDataBatched.clear();
- m_readyIncubators = 0;
- m_repopulating = false;
- }
-}
-
-/*!
- \internal
- Removes and repopulates all items.
-*/
-void QDeclarativeGeoMapItemView::repopulate()
-{
- if (!itemModel_ || !itemModel_->rowCount()) {
- removeInstantiatedItems();
- } else {
- terminateOngoingRepopulation();
- instantiateAllItems(); // removal of instantiated item done at incubation completion
- }
-}
-
-/*!
- \internal
-
- Note: this call is async. that is returns to the event loop before returning to the caller.
- May also trigger incubatorStatusChanged() before returning to the caller if the incubator is fast enough.
-*/
-void QDeclarativeGeoMapItemView::createItemForIndex(const QModelIndex &index, bool batched)
-{
- // Expected to be already tested by caller.
- Q_ASSERT(delegate_);
- Q_ASSERT(itemModel_);
-
- QDeclarativeGeoMapItemViewItemData *itemData = new QDeclarativeGeoMapItemViewItemData;
-
- itemData->modelData = new QObject;
- itemData->modelDataMeta = new QQmlOpenMetaObject(itemData->modelData, m_metaObjectType, false);
- itemData->context = new QQmlContext(qmlContext(this));
-
- QHashIterator<int, QByteArray> iterator(itemModel_->roleNames());
- while (iterator.hasNext()) {
- iterator.next();
-
- QVariant modelData = itemModel_->data(index, iterator.key());
- if (!modelData.isValid())
- continue;
-
- itemData->context->setContextProperty(QString::fromLatin1(iterator.value().constData()),
- modelData);
-
- itemData->modelDataMeta->setValue(iterator.value(), modelData);
- }
-
- itemData->context->setContextProperty(QLatin1String("model"), itemData->modelData);
- itemData->context->setContextProperty(QLatin1String("index"), index.row());
-
- if (batched || m_repopulating) {
- if (index.row() < m_itemDataBatched.size())
- m_itemDataBatched.replace(index.row(), itemData);
- else
- m_itemDataBatched.insert(index.row(), itemData);
- } else
- m_itemData.insert(index.row(), itemData);
- itemData->incubator = new MapItemViewDelegateIncubator(this, itemData, batched || m_repopulating);
-
- delegate_->create(*itemData->incubator, itemData->context);
-}
-
-QDeclarativeGeoMapItemViewItemData::~QDeclarativeGeoMapItemViewItemData()
-{
- delete incubator;
- delete item;
- delete context;
- delete modelData;
-}
-
-#include "moc_qdeclarativegeomapitemview_p.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeomapitemview_p.h b/src/imports/location/qdeclarativegeomapitemview_p.h
deleted file mode 100644
index fefc63ba..00000000
--- a/src/imports/location/qdeclarativegeomapitemview_p.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 Jolla Ltd.
-** Contact: Aaron McCarthy <aaron.mccarthy@jollamobile.com>
-** Copyright (C) 2015 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 QDECLARATIVEGEOMAPITEMVIEW_H
-#define QDECLARATIVEGEOMAPITEMVIEW_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 <QtCore/QModelIndex>
-#include <QtQml/QQmlParserStatus>
-#include <QtQml/QQmlIncubator>
-#include <QtQml/qqml.h>
-#include "qdeclarativegeomapitemview_p_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QAbstractItemModel;
-class QQmlComponent;
-class QQuickItem;
-class QDeclarativeGeoMap;
-class QDeclarativeGeoMapItemBase;
-class QQmlOpenMetaObject;
-class QQmlOpenMetaObjectType;
-class MapItemViewDelegateIncubator;
-
-class QDeclarativeGeoMapItemView : public QObject, public QQmlParserStatus
-{
- Q_OBJECT
-
- Q_INTERFACES(QQmlParserStatus)
-
- Q_PROPERTY(QVariant model READ model WRITE setModel NOTIFY modelChanged)
- Q_PROPERTY(QQmlComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged)
- Q_PROPERTY(bool autoFitViewport READ autoFitViewport WRITE setAutoFitViewport NOTIFY autoFitViewportChanged)
-
-public:
- explicit QDeclarativeGeoMapItemView(QQuickItem *parent = 0);
- ~QDeclarativeGeoMapItemView();
-
- QVariant model() const;
- void setModel(const QVariant &);
-
- QQmlComponent *delegate() const;
- void setDelegate(QQmlComponent *);
-
- bool autoFitViewport() const;
- void setAutoFitViewport(const bool &);
-
- void setMap(QDeclarativeGeoMap *);
- void repopulate();
- void removeInstantiatedItems();
- void instantiateAllItems();
-
- qreal zValue();
- void setZValue(qreal zValue);
-
- // From QQmlParserStatus
- virtual void componentComplete();
- void classBegin() {}
-
-Q_SIGNALS:
- void modelChanged();
- void delegateChanged();
- void autoFitViewportChanged();
-
-protected:
- void incubatorStatusChanged(MapItemViewDelegateIncubator *incubator,
- QQmlIncubator::Status status,
- bool batched);
-
-private Q_SLOTS:
- void itemModelReset();
- void itemModelRowsInserted(const QModelIndex &index, int start, int end);
- void itemModelRowsRemoved(const QModelIndex &index, int start, int end);
- void itemModelRowsMoved(const QModelIndex &parent, int start, int end,
- const QModelIndex &destination, int row);
- void itemModelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
- const QVector<int> &roles);
-
-private:
- void createItemForIndex(const QModelIndex &index, bool batched = false);
- void fitViewport();
- void terminateOngoingRepopulation();
- void removeItemData(QDeclarativeGeoMapItemViewItemData *itemData);
-
- bool componentCompleted_;
- QQmlComponent *delegate_;
- QAbstractItemModel *itemModel_;
- QDeclarativeGeoMap *map_;
- QVector<QDeclarativeGeoMapItemViewItemData *> m_itemData;
- QVector<QDeclarativeGeoMapItemViewItemData *> m_itemDataBatched;
- bool fitViewport_;
-
- QQmlOpenMetaObjectType *m_metaObjectType;
- int m_readyIncubators;
- bool m_repopulating;
-
- friend struct QDeclarativeGeoMapItemViewItemData;
- friend class MapItemViewDelegateIncubator;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeGeoMapItemView)
-
-#endif
diff --git a/src/imports/location/qdeclarativegeomapitemview_p_p.h b/src/imports/location/qdeclarativegeomapitemview_p_p.h
deleted file mode 100644
index 3ad3ceb4..00000000
--- a/src/imports/location/qdeclarativegeomapitemview_p_p.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/****************************************************************************
-**
-** 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 QDECLARATIVEGEOMAPITEMVIEW_P_P_H
-#define QDECLARATIVEGEOMAPITEMVIEW_P_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 <QtCore/QModelIndex>
-#include <QtQml/QQmlParserStatus>
-#include <QtQml/QQmlIncubator>
-#include <QtQml/qqml.h>
-#include <QtQml/private/qqmlopenmetaobject_p.h>
-
-QT_BEGIN_NAMESPACE
-
-class MapItemViewDelegateIncubator;
-class QDeclarativeGeoMapItemView;
-class QDeclarativeGeoMapItemBase;
-
-class QDeclarativeGeoMapItemViewItemData
-{
-public:
- QDeclarativeGeoMapItemViewItemData()
- : incubator(0), item(0), context(0), modelData(0), modelDataMeta(0)
- {
- }
-
- ~QDeclarativeGeoMapItemViewItemData();
-
- MapItemViewDelegateIncubator *incubator;
- QDeclarativeGeoMapItemBase *item;
- QQmlContext *context;
- QObject *modelData;
- QQmlOpenMetaObject *modelDataMeta;
-
- friend class MapItemViewDelegateIncubator;
- friend class QDeclarativeGeoMapItemView;
-};
-
-Q_DECLARE_TYPEINFO(QDeclarativeGeoMapItemViewItemData, Q_MOVABLE_TYPE);
-
-QT_END_NAMESPACE
-
-#endif // QDECLARATIVEGEOMAPITEMVIEW_P_P_H
diff --git a/src/imports/location/qdeclarativegeomapparameter.cpp b/src/imports/location/qdeclarativegeomapparameter.cpp
deleted file mode 100644
index 88d609f4..00000000
--- a/src/imports/location/qdeclarativegeomapparameter.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
-/****************************************************************************
-**
-** 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 "qdeclarativegeomapparameter_p.h"
-
-#include <QByteArray>
-#include <QMetaObject>
-#include <QMetaProperty>
-#include <QSignalMapper>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype MapParameter
- \instantiates QDeclarativeGeoMapParameter
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-maps
- \since Qt Location 5.9
-
- \brief The MapParameter type represents a parameter for a Map element.
- This type provides a mean to specify plugin-dependent optional parameters
- for a map.
-
- MapParameters by default contain only the \l type property, and
- are highly plugin-dependent.
- For this reason, additional properties have to be defined inside a
- MapParameter at declaration time, using the QML syntax "property var foo".
-
- What properties have to be put inside a particular MapParameter type for
- a particular plugin can be found in the documentation of the plugin.
- Note that MapProperties are \b optional.
- By not specifying any of them, the Map will have the default behavior.
-
- The release of this API with Qt 5.9 is a Technology Preview.
-*/
-
-/*!
- \qmlproperty georectangle QtLocation::MapParameter::type
-
- Set-once property which holds a string defining the type of the MapParameter
-*/
-
-QDeclarativeGeoMapParameter::QDeclarativeGeoMapParameter(QObject *parent)
-: QGeoMapParameter(parent), m_initialPropertyCount(metaObject()->propertyCount()), m_complete(false)
-{
-
-}
-
-QDeclarativeGeoMapParameter::~QDeclarativeGeoMapParameter()
-{
-}
-
-bool QDeclarativeGeoMapParameter::isComponentComplete() const
-{
- return m_complete;
-}
-
-int QDeclarativeGeoMapParameter::initialPropertyCount() const
-{
- return m_initialPropertyCount;
-}
-
-void QDeclarativeGeoMapParameter::classBegin()
-{
-}
-
-void QDeclarativeGeoMapParameter::componentComplete()
-{
- for (int i = m_initialPropertyCount; i < metaObject()->propertyCount(); ++i) {
- QMetaProperty property = metaObject()->property(i);
-
- if (!property.hasNotifySignal()) {
- return;
- }
-
- QSignalMapper *mapper = new QSignalMapper(this);
- mapper->setMapping(this, i);
-
- const QByteArray signalName = '2' + property.notifySignal().methodSignature(); // TODO: explain why '2'
- QObject::connect(this, signalName, mapper, SLOT(map()));
- QObject::connect(mapper, SIGNAL(mapped(int)), this, SLOT(onPropertyUpdated(int)));
- }
- m_complete = true;
- emit completed(this);
-}
-
-void QDeclarativeGeoMapParameter::onPropertyUpdated(int index)
-{
- emit propertyUpdated(this, metaObject()->property(index).name());
-}
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeomapparameter_p.h b/src/imports/location/qdeclarativegeomapparameter_p.h
deleted file mode 100644
index 31ea5b04..00000000
--- a/src/imports/location/qdeclarativegeomapparameter_p.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/****************************************************************************
-**
-** 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 QDECLARATIVEGEOMAPPARAMETER_P_H
-#define QDECLARATIVEGEOMAPPARAMETER_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 <QtLocation/private/qgeomapparameter_p.h>
-#include <QQmlParserStatus>
-#include <qqml.h>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoMapParameter : public QGeoMapParameter, public QQmlParserStatus
-{
- Q_OBJECT
- Q_INTERFACES(QQmlParserStatus)
-
-public:
- explicit QDeclarativeGeoMapParameter(QObject *parent = 0);
- virtual ~QDeclarativeGeoMapParameter();
-
- bool isComponentComplete() const;
-
-Q_SIGNALS:
- void completed(QDeclarativeGeoMapParameter *);
-
-protected:
- int initialPropertyCount() const;
- // QQmlParserStatus implementation
- void classBegin() override;
- void componentComplete() override;
-
-private slots:
- void onPropertyUpdated(int index);
-
-private:
- int m_initialPropertyCount;
- bool m_complete;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeGeoMapParameter)
-
-#endif // QDECLARATIVEGEOMAPPARAMETER_P_H
diff --git a/src/imports/location/qdeclarativegeomapquickitem.cpp b/src/imports/location/qdeclarativegeomapquickitem.cpp
deleted file mode 100644
index 78fd4f8f..00000000
--- a/src/imports/location/qdeclarativegeomapquickitem.cpp
+++ /dev/null
@@ -1,354 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativegeomapquickitem_p.h"
-
-#include <QtCore/QScopedValueRollback>
-#include <QtQml/qqmlinfo.h>
-#include <QtQuick/QSGOpacityNode>
-#include "qdoublevector2d_p.h"
-#include <QtQuick/private/qquickmousearea_p.h>
-
-#include <QDebug>
-#include <cmath>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype MapQuickItem
- \instantiates QDeclarativeGeoMapQuickItem
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-maps
- \since Qt Location 5.5
-
- \brief The MapQuickItem type displays an arbitrary Qt Quick object
- on a Map.
-
- The MapQuickItem type is used to place an arbitrary Qt Quick object
- on a Map at a specified location and size. Compared to floating an item
- above the Map, a MapQuickItem will follow the panning (and optionally, the
- zooming) of the Map as if it is on the Map surface.
-
- The \l{sourceItem} property contains the Qt Quick item to be drawn, which
- can be any kind of visible type.
-
- \section2 Positioning and Sizing
-
- The positioning of the MapQuickItem on the Map is controlled by two
- properties: \l coordinate and \l anchorPoint. If only \l coordinate is set,
- it specifies a longitude/latitude coordinate for the item to be placed at.
- The set coordinate will line up with the top-left corner of the contained
- item when shown on the screen.
-
- The \l anchorPoint property provides a way to line up the coordinate with
- other parts of the item than just the top-left corner, by setting a number
- of pixels the item will be offset by. A simple way to think about it is
- to note that the point given by \l anchorPoint on the item itself is the
- point that will line up with the given \l coordinate when displayed.
-
- In addition to being anchored to the map, the MapQuickItem can optionally
- follow the scale of the map, and change size when the Map is zoomed in or
- zoomed out. This behaviour is controlled by the \l zoomLevel property. The
- default behaviour if \l zoomLevel is not set is for the item to be drawn
- "on the screen" rather than "on the map", so that its size remains the same
- regardless of the zoom level of the Map.
-
- \section2 Performance
-
- Performance of a MapQuickItem is normally in the same ballpark as the
- contained Qt Quick item alone. Overheads added amount to a translation
- and (possibly) scaling of the original item, as well as a transformation
- from longitude and latitude to screen position.
-
- \section2 Limitations
-
- \note Due to an implementation detail, items placed inside a
- MapQuickItem will have a \c{parent} item which is not the MapQuickItem.
- Refer to the MapQuickItem by its \c{id}, and avoid the use of \c{anchor}
- in the \c{sourceItem}.
-
- \section2 Example Usage
-
- The following snippet shows a MapQuickItem containing an Image object,
- to display a Marker on the Map. This strategy is used to show the map
- markers in the MapViewer example.
-
- \snippet mapviewer/map/Marker.qml mqi-top
- \snippet mapviewer/map/Marker.qml mqi-anchor
- \snippet mapviewer/map/Marker.qml mqi-closeimage
- \snippet mapviewer/map/Marker.qml mqi-close
-
- \image api-mapquickitem.png
-*/
-
-QDeclarativeGeoMapQuickItem::QDeclarativeGeoMapQuickItem(QQuickItem *parent)
-: QDeclarativeGeoMapItemBase(parent), zoomLevel_(0.0),
- mapAndSourceItemSet_(false), updatingGeometry_(false)
-{
- setFlag(ItemHasContents, true);
- opacityContainer_ = new QQuickItem(this);
- opacityContainer_->setParentItem(this);
- opacityContainer_->setFlag(ItemHasContents, true);
-}
-
-QDeclarativeGeoMapQuickItem::~QDeclarativeGeoMapQuickItem() {}
-
-/*!
- \qmlproperty coordinate MapQuickItem::coordinate
-
- This property holds the anchor coordinate of the MapQuickItem. The point
- on the sourceItem that is specified by anchorPoint is kept aligned with
- this coordinate when drawn on the map.
-
- In the image below, there are 3 MapQuickItems that are identical except
- for the value of their anchorPoint properties. The values of anchorPoint
- for each are written on top of the item.
-
- \image api-mapquickitem-anchor.png
-*/
-void QDeclarativeGeoMapQuickItem::setCoordinate(const QGeoCoordinate &coordinate)
-{
- if (coordinate_ == coordinate)
- return;
-
- coordinate_ = coordinate;
-
- polishAndUpdate();
- emit coordinateChanged();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapQuickItem::setMap(QDeclarativeGeoMap *quickMap, QGeoMap *map)
-{
- QDeclarativeGeoMapItemBase::setMap(quickMap,map);
- if (map && quickMap) {
- connect(map, SIGNAL(cameraDataChanged(QGeoCameraData)),
- this, SLOT(polishAndUpdate()));
- polishAndUpdate();
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapQuickItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
-{
- if (!mapAndSourceItemSet_ || updatingGeometry_ ||
- newGeometry.topLeft() == oldGeometry.topLeft()) {
- QDeclarativeGeoMapItemBase::geometryChanged(newGeometry, oldGeometry);
- return;
- }
-
- QGeoCoordinate newCoordinate = map()->geoProjection().itemPositionToCoordinate(QDoubleVector2D(x(), y()) + (scaleFactor() * QDoubleVector2D(anchorPoint_)), false);
- if (newCoordinate.isValid())
- setCoordinate(newCoordinate);
-
- // Not calling QDeclarativeGeoMapItemBase::geometryChanged() as it will be called from a nested
- // call to this function.
-}
-
-/*!
- \internal
-*/
-QGeoCoordinate QDeclarativeGeoMapQuickItem::coordinate()
-{
- return coordinate_;
-}
-
-/*!
- \qmlproperty object MapQuickItem::sourceItem
-
- This property holds the source item that will be drawn on the map.
-*/
-void QDeclarativeGeoMapQuickItem::setSourceItem(QQuickItem *sourceItem)
-{
- if (sourceItem_.data() == sourceItem)
- return;
- sourceItem_ = sourceItem;
-
- polishAndUpdate();
- emit sourceItemChanged();
-}
-
-QQuickItem *QDeclarativeGeoMapQuickItem::sourceItem()
-{
- return sourceItem_.data();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapQuickItem::afterChildrenChanged()
-{
- QList<QQuickItem *> kids = childItems();
- if (kids.size() > 0) {
- bool printedWarning = false;
- foreach (QQuickItem *i, kids) {
- if (i->flags() & QQuickItem::ItemHasContents
- && !qobject_cast<QQuickMouseArea *>(i)
- && sourceItem_.data() != i
- && opacityContainer_ != i) {
- if (!printedWarning) {
- qmlWarning(this) << "Use the sourceItem property for the contained item, direct children are not supported";
- printedWarning = true;
- }
-
- qmlWarning(i) << "deleting this child";
- i->deleteLater();
- }
- }
- }
-}
-
-/*!
- \qmlproperty QPointF MapQuickItem::anchorPoint
-
- This property determines which point on the sourceItem that will be lined
- up with the coordinate on the map.
-*/
-void QDeclarativeGeoMapQuickItem::setAnchorPoint(const QPointF &anchorPoint)
-{
- if (anchorPoint == anchorPoint_)
- return;
- anchorPoint_ = anchorPoint;
- polishAndUpdate();
- emit anchorPointChanged();
-}
-
-QPointF QDeclarativeGeoMapQuickItem::anchorPoint() const
-{
- return anchorPoint_;
-}
-
-/*!
- \qmlproperty real MapQuickItem::zoomLevel
-
- This property controls the scaling behaviour of the contents of the
- MapQuickItem. In particular, by setting this property it is possible
- to choose between objects that are drawn on the screen (and sized in
- screen pixels), and those drawn on the map surface (which change size
- with the zoom level of the map).
-
- The default value for this property is 0.0, which corresponds to drawing
- the object on the screen surface. If set to another value, the object will
- be drawn on the map surface instead. The value (if not zero) specifies the
- zoomLevel at which the object will be visible at a scale of 1:1 (ie, where
- object pixels and screen pixels are the same). At zoom levels lower than
- this, the object will appear smaller, and at higher zoom levels, appear
- larger. This is in contrast to when this property is set to zero, where
- the object remains the same size on the screen at all zoom levels.
-*/
-void QDeclarativeGeoMapQuickItem::setZoomLevel(qreal zoomLevel)
-{
- if (zoomLevel == zoomLevel_)
- return;
- zoomLevel_ = zoomLevel;
- polishAndUpdate();
- emit zoomLevelChanged();
-}
-
-qreal QDeclarativeGeoMapQuickItem::zoomLevel() const
-{
- return zoomLevel_;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapQuickItem::updatePolish()
-{
- if (!quickMap() && sourceItem_) {
- mapAndSourceItemSet_ = false;
- sourceItem_.data()->setParentItem(0);
- return;
- }
-
- if (!quickMap() || !map() || !sourceItem_) {
- mapAndSourceItemSet_ = false;
- return;
- }
-
- if (!mapAndSourceItemSet_ && quickMap() && map() && sourceItem_) {
- mapAndSourceItemSet_ = true;
- sourceItem_.data()->setParentItem(opacityContainer_);
- sourceItem_.data()->setTransformOrigin(QQuickItem::TopLeft);
- connect(sourceItem_.data(), SIGNAL(xChanged()),
- this, SLOT(polishAndUpdate()));
- connect(sourceItem_.data(), SIGNAL(yChanged()),
- this, SLOT(polishAndUpdate()));
- connect(sourceItem_.data(), SIGNAL(widthChanged()),
- this, SLOT(polishAndUpdate()));
- connect(sourceItem_.data(), SIGNAL(heightChanged()),
- this, SLOT(polishAndUpdate()));
- }
-
- QScopedValueRollback<bool> rollback(updatingGeometry_);
- updatingGeometry_ = true;
-
- opacityContainer_->setOpacity(zoomLevelOpacity());
-
- sourceItem_.data()->setScale(scaleFactor());
- sourceItem_.data()->setPosition(QPointF(0,0));
- setWidth(sourceItem_.data()->width());
- setHeight(sourceItem_.data()->height());
- setPositionOnMap(coordinate(), scaleFactor() * anchorPoint_);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoMapQuickItem::afterViewportChanged(const QGeoMapViewportChangeEvent &event)
-{
- Q_UNUSED(event);
-}
-
-/*!
- \internal
-*/
-qreal QDeclarativeGeoMapQuickItem::scaleFactor()
-{
- qreal scale = 1.0;
- // use 1+x to avoid fuzzy compare against zero
- if (!qFuzzyCompare(1.0 + zoomLevel_, 1.0))
- scale = std::pow(0.5, zoomLevel_ - map()->cameraData().zoomLevel());
- return scale;
-}
-
-#include "moc_qdeclarativegeomapquickitem_p.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeomapquickitem_p.h b/src/imports/location/qdeclarativegeomapquickitem_p.h
deleted file mode 100644
index 0410f060..00000000
--- a/src/imports/location/qdeclarativegeomapquickitem_p.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEGEOMAPQUICKITEM_H
-#define QDECLARATIVEGEOMAPQUICKITEM_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 <QtQuick/QQuickItem>
-#include <QtQuick/QSGNode>
-
-#include "qdeclarativegeomap_p.h"
-#include "qdeclarativegeomapitembase_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoMapQuickItem : public QDeclarativeGeoMapItemBase
-{
- Q_OBJECT
- Q_PROPERTY(QGeoCoordinate coordinate READ coordinate WRITE setCoordinate NOTIFY coordinateChanged)
- Q_PROPERTY(QPointF anchorPoint READ anchorPoint WRITE setAnchorPoint NOTIFY anchorPointChanged)
- Q_PROPERTY(qreal zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged)
- Q_PROPERTY(QQuickItem *sourceItem READ sourceItem WRITE setSourceItem NOTIFY sourceItemChanged)
-
-public:
- explicit QDeclarativeGeoMapQuickItem(QQuickItem *parent = 0);
- ~QDeclarativeGeoMapQuickItem();
-
- virtual void setMap(QDeclarativeGeoMap *quickMap, QGeoMap *map) Q_DECL_OVERRIDE;
-
- void setCoordinate(const QGeoCoordinate &coordinate);
- QGeoCoordinate coordinate();
-
- void setSourceItem(QQuickItem *sourceItem);
- QQuickItem *sourceItem();
-
- void setAnchorPoint(const QPointF &anchorPoint);
- QPointF anchorPoint() const;
-
- void setZoomLevel(qreal zoomLevel);
- qreal zoomLevel() const;
-
-Q_SIGNALS:
- void coordinateChanged();
- void sourceItemChanged();
- void anchorPointChanged();
- void zoomLevelChanged();
-
-protected:
- void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE;
- void updatePolish() Q_DECL_OVERRIDE;
-
-protected Q_SLOTS:
- virtual void afterChildrenChanged() Q_DECL_OVERRIDE;
- virtual void afterViewportChanged(const QGeoMapViewportChangeEvent &event) Q_DECL_OVERRIDE;
-
-private:
- qreal scaleFactor();
- QGeoCoordinate coordinate_;
- QPointer<QQuickItem> sourceItem_;
- QQuickItem *opacityContainer_;
- QPointF anchorPoint_;
- qreal zoomLevel_;
- bool mapAndSourceItemSet_;
- bool updatingGeometry_;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeGeoMapQuickItem)
-
-#endif
diff --git a/src/imports/location/qdeclarativegeomaptype.cpp b/src/imports/location/qdeclarativegeomaptype.cpp
deleted file mode 100644
index 0b90ec3a..00000000
--- a/src/imports/location/qdeclarativegeomaptype.cpp
+++ /dev/null
@@ -1,136 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativegeomaptype_p.h"
-#include <qnumeric.h>
-#include <QtQml/qqml.h>
-#include <QDebug>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype MapType
- \instantiates QDeclarativeGeoMapType
- \inherits QObject
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-maps
- \since Qt Location 5.5
-
- \brief The MapType type holds information about a map type.
-
- This includes the map type's \l name and \l description, the \l style and
- a flag to indicate if the map type is optimized for mobile devices (\l mobile).
-*/
-
-QDeclarativeGeoMapType::QDeclarativeGeoMapType(const QGeoMapType mapType, QObject *parent)
- : QObject(parent),
- mapType_(mapType) {}
-
-QDeclarativeGeoMapType::~QDeclarativeGeoMapType() {}
-
-/*!
- \qmlproperty enumeration MapType::style
-
- This read-only property gives access to the style of the map type.
-
- \list
- \li MapType.NoMap - No map.
- \li MapType.StreetMap - A street map.
- \li MapType.SatelliteMapDay - A map with day-time satellite imagery.
- \li MapType.SatelliteMapNight - A map with night-time satellite imagery.
- \li MapType.TerrainMap - A terrain map.
- \li MapType.HybridMap - A map with satellite imagery and street information.
- \li MapType.GrayStreetMap - A gray-shaded street map.
- \li MapType.PedestrianMap - A street map suitable for pedestriants.
- \li MapType.CarNavigationMap - A street map suitable for car navigation.
- \li MapType.CycleMap - A street map suitable for cyclists.
- \li MapType.CustomMap - A custom map type.
- \endlist
-*/
-QDeclarativeGeoMapType::MapStyle QDeclarativeGeoMapType::style() const
-{
- return QDeclarativeGeoMapType::MapStyle(mapType_.style());
-}
-
-/*!
- \qmlproperty string MapType::name
-
- This read-only property holds the name of the map type as a single formatted string.
-*/
-QString QDeclarativeGeoMapType::name() const
-{
- return mapType_.name();
-}
-
-/*!
- \qmlproperty string MapType::description
-
- This read-only property holds the description of the map type as a single formatted string.
-*/
-QString QDeclarativeGeoMapType::description() const
-{
- return mapType_.description();
-}
-
-/*!
- \qmlproperty bool MapType::mobile
-
- \brief Whether the map type is optimized for the use on a mobile device.
-
- Map types for mobile devices usually have higher constrast to counteract the
- effects of sunlight and a reduced color for improved readability.
-*/
-bool QDeclarativeGeoMapType::mobile() const
-{
- return mapType_.mobile();
-}
-
-/*!
- \qmlproperty bool MapType::night
- \since Qt Location 5.4
-
- \brief Whether the map type is optimized for use at night.
-
- Map types suitable for use at night usually have a dark background.
-*/
-bool QDeclarativeGeoMapType::night() const
-{
- return mapType_.night();
-}
-
-#include "moc_qdeclarativegeomaptype_p.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeomaptype_p.h b/src/imports/location/qdeclarativegeomaptype_p.h
deleted file mode 100644
index 980c594a..00000000
--- a/src/imports/location/qdeclarativegeomaptype_p.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEGEOMAPTYPE_H
-#define QDECLARATIVEGEOMAPTYPE_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 <QtCore/QObject>
-#include <QtQml/qqml.h>
-#include <QtLocation/private/qgeomaptype_p.h>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoMapType : public QObject
-{
- Q_OBJECT
- Q_ENUMS(MapStyle)
-
- Q_PROPERTY(MapStyle style READ style CONSTANT)
- Q_PROPERTY(QString name READ name CONSTANT)
- Q_PROPERTY(QString description READ description CONSTANT)
- Q_PROPERTY(bool mobile READ mobile CONSTANT)
- Q_PROPERTY(bool night READ night CONSTANT REVISION 1)
-
-public:
- enum MapStyle {
- NoMap = QGeoMapType::NoMap,
- StreetMap = QGeoMapType::StreetMap,
- SatelliteMapDay = QGeoMapType::SatelliteMapDay,
- SatelliteMapNight = QGeoMapType::SatelliteMapNight,
- TerrainMap = QGeoMapType::TerrainMap,
- HybridMap = QGeoMapType::HybridMap,
- TransitMap = QGeoMapType::TransitMap,
- GrayStreetMap = QGeoMapType::GrayStreetMap,
- PedestrianMap = QGeoMapType::PedestrianMap,
- CarNavigationMap = QGeoMapType::CarNavigationMap,
- CycleMap = QGeoMapType::CycleMap,
- CustomMap = 100
- };
-
- QDeclarativeGeoMapType(const QGeoMapType mapType, QObject *parent = 0);
- ~QDeclarativeGeoMapType();
-
- MapStyle style() const;
- QString name() const;
- QString description() const;
- bool mobile() const;
- bool night() const;
-
- const QGeoMapType mapType() { return mapType_; }
-
-private:
- QGeoMapType mapType_;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeGeoMapType)
-
-#endif
diff --git a/src/imports/location/qdeclarativegeoroute.cpp b/src/imports/location/qdeclarativegeoroute.cpp
deleted file mode 100644
index 44c59ce2..00000000
--- a/src/imports/location/qdeclarativegeoroute.cpp
+++ /dev/null
@@ -1,276 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativegeoroute_p.h"
-#include "locationvaluetypehelper_p.h"
-
-#include <QtQml/QQmlEngine>
-#include <QtQml/qqmlinfo.h>
-#include <QtQml/private/qqmlengine_p.h>
-#include <QtPositioning/QGeoRectangle>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype Route
- \instantiates QDeclarativeGeoRoute
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-routing
- \since Qt Location 5.5
-
- \brief The Route type represents one geographical route.
-
- A Route type contains high level information about a route, such
- as the length the route, the estimated travel time for the route,
- and enough information to render a basic image of the route on a map.
-
- The QGeoRoute object also contains a list of \l RouteSegment objects which
- describe subsections of the route in greater detail.
-
- The primary means of acquiring Route objects is \l RouteModel.
-
- \section1 Example
-
- This example shows how to display a route's maneuvers in a ListView:
-
- \snippet declarative/routing.qml QtQuick import
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/routing.qml Route Maneuver List1
- \snippet declarative/routing.qml Route Maneuver List2
- \snippet declarative/routing.qml Route Maneuver List3
-
-*/
-
-QDeclarativeGeoRoute::QDeclarativeGeoRoute(QObject *parent)
- : QObject(parent)
-{
- this->init();
-}
-
-QDeclarativeGeoRoute::QDeclarativeGeoRoute(const QGeoRoute &route, QObject *parent)
- : QObject(parent),
- route_(route)
-{
- this->init();
-}
-
-QDeclarativeGeoRoute::~QDeclarativeGeoRoute() {}
-
-void QDeclarativeGeoRoute::init()
-{
- QGeoRouteSegment segment = route_.firstRouteSegment();
- while (segment.isValid()) {
- QDeclarativeGeoRouteSegment *routeSegment = new QDeclarativeGeoRouteSegment(segment, this);
- QQmlEngine::setContextForObject(routeSegment, QQmlEngine::contextForObject(this));
- segments_.append(routeSegment);
- segment = segment.nextRouteSegment();
- }
-}
-
-/*!
- \internal
-*/
-QList<QGeoCoordinate> QDeclarativeGeoRoute::routePath()
-{
- return route_.path();
-}
-
-/*!
- \qmlproperty georectangle QtLocation::Route::bounds
-
- Read-only property which holds a bounding box which encompasses the entire route.
-
-*/
-
-QGeoRectangle QDeclarativeGeoRoute::bounds() const
-{
- return route_.bounds();
-}
-
-/*!
- \qmlproperty int QtLocation::Route::travelTime
-
- Read-only property which holds the estimated amount of time it will take to
- traverse this route, in seconds.
-
-*/
-
-int QDeclarativeGeoRoute::travelTime() const
-{
- return route_.travelTime();
-}
-
-/*!
- \qmlproperty real QtLocation::Route::distance
-
- Read-only property which holds distance covered by this route, in meters.
-*/
-
-qreal QDeclarativeGeoRoute::distance() const
-{
- return route_.distance();
-}
-
-/*!
- \qmlproperty QJSValue QtLocation::Route::path
-
- Read-only property which holds the geographical coordinates of this route.
- Coordinates are listed in the order in which they would be traversed by someone
- traveling along this segment of the route.
-
- To access individual segments you can use standard list accessors: 'path.length'
- indicates the number of objects and 'path[index starting from zero]' gives
- the actual object.
-
- \sa QtPositioning::coordinate
-*/
-
-QJSValue QDeclarativeGeoRoute::path() const
-{
- QQmlContext *context = QQmlEngine::contextForObject(parent());
- QQmlEngine *engine = context->engine();
- QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(engine);
-
- QV4::Scope scope(v4);
- QV4::Scoped<QV4::ArrayObject> pathArray(scope, v4->newArrayObject(route_.path().length()));
- for (int i = 0; i < route_.path().length(); ++i) {
- const QGeoCoordinate &c = route_.path().at(i);
-
- QV4::ScopedValue cv(scope, v4->fromVariant(QVariant::fromValue(c)));
- pathArray->putIndexed(i, cv);
- }
-
- return QJSValue(v4, pathArray.asReturnedValue());
-}
-
-void QDeclarativeGeoRoute::setPath(const QJSValue &value)
-{
- if (!value.isArray())
- return;
-
- QList<QGeoCoordinate> pathList;
- quint32 length = value.property(QStringLiteral("length")).toUInt();
- for (quint32 i = 0; i < length; ++i) {
- bool ok;
- QGeoCoordinate c = parseCoordinate(value.property(i), &ok);
-
- if (!ok || !c.isValid()) {
- qmlWarning(this) << "Unsupported path type";
- return;
- }
-
- pathList.append(c);
- }
-
- if (route_.path() == pathList)
- return;
-
- route_.setPath(pathList);
-
- emit pathChanged();
-}
-
-/*!
- \qmlproperty list<RouteSegment> QtLocation::Route::segments
-
- Read-only property which holds the list of \l RouteSegment objects of this route.
-
- To access individual segments you can use standard list accessors: 'segments.length'
- indicates the number of objects and 'segments[index starting from zero]' gives
- the actual objects.
-
- \sa RouteSegment
-*/
-
-QQmlListProperty<QDeclarativeGeoRouteSegment> QDeclarativeGeoRoute::segments()
-{
- return QQmlListProperty<QDeclarativeGeoRouteSegment>(this, 0, segments_append, segments_count,
- segments_at, segments_clear);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoRoute::segments_append(QQmlListProperty<QDeclarativeGeoRouteSegment> *prop,
- QDeclarativeGeoRouteSegment *segment)
-{
- static_cast<QDeclarativeGeoRoute *>(prop->object)->appendSegment(segment);
-}
-
-/*!
- \internal
-*/
-int QDeclarativeGeoRoute::segments_count(QQmlListProperty<QDeclarativeGeoRouteSegment> *prop)
-{
- return static_cast<QDeclarativeGeoRoute *>(prop->object)->segments_.count();
-}
-
-/*!
- \internal
-*/
-QDeclarativeGeoRouteSegment *QDeclarativeGeoRoute::segments_at(QQmlListProperty<QDeclarativeGeoRouteSegment> *prop, int index)
-{
- return static_cast<QDeclarativeGeoRoute *>(prop->object)->segments_.at(index);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoRoute::segments_clear(QQmlListProperty<QDeclarativeGeoRouteSegment> *prop)
-{
- static_cast<QDeclarativeGeoRoute *>(prop->object)->clearSegments();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoRoute::appendSegment(QDeclarativeGeoRouteSegment *segment)
-{
- segments_.append(segment);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoRoute::clearSegments()
-{
- segments_.clear();
-}
-
-#include "moc_qdeclarativegeoroute_p.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeoroute_p.h b/src/imports/location/qdeclarativegeoroute_p.h
deleted file mode 100644
index 9bb46087..00000000
--- a/src/imports/location/qdeclarativegeoroute_p.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEGEOROUTE_H
-#define QDECLARATIVEGEOROUTE_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 "qdeclarativegeoroutesegment_p.h"
-
-#include <QtCore/QObject>
-#include <QtQml/QQmlListProperty>
-#include <QtLocation/QGeoRoute>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoRoute : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QGeoRectangle bounds READ bounds CONSTANT)
- Q_PROPERTY(int travelTime READ travelTime CONSTANT)
- Q_PROPERTY(qreal distance READ distance CONSTANT)
- Q_PROPERTY(QJSValue path READ path WRITE setPath NOTIFY pathChanged)
- Q_PROPERTY(QQmlListProperty<QDeclarativeGeoRouteSegment> segments READ segments CONSTANT)
-
-public:
- explicit QDeclarativeGeoRoute(QObject *parent = 0);
- QDeclarativeGeoRoute(const QGeoRoute &route, QObject *parent = 0);
- ~QDeclarativeGeoRoute();
-
- QGeoRectangle bounds() const;
- int travelTime() const;
- qreal distance() const;
-
- QJSValue path() const;
- void setPath(const QJSValue &value);
-
- QQmlListProperty<QDeclarativeGeoRouteSegment> segments();
-
- void appendSegment(QDeclarativeGeoRouteSegment *segment);
- void clearSegments();
-
-Q_SIGNALS:
- void pathChanged();
-
-private:
- static void segments_append(QQmlListProperty<QDeclarativeGeoRouteSegment> *prop, QDeclarativeGeoRouteSegment *segment);
- static int segments_count(QQmlListProperty<QDeclarativeGeoRouteSegment> *prop);
- static QDeclarativeGeoRouteSegment *segments_at(QQmlListProperty<QDeclarativeGeoRouteSegment> *prop, int index);
- static void segments_clear(QQmlListProperty<QDeclarativeGeoRouteSegment> *prop);
-
- void init();
- QList<QGeoCoordinate> routePath();
-
- QGeoRoute route_;
- QList<QDeclarativeGeoRouteSegment *> segments_;
- friend class QDeclarativeRouteMapItem;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/imports/location/qdeclarativegeoroutemodel.cpp b/src/imports/location/qdeclarativegeoroutemodel.cpp
deleted file mode 100644
index 90796412..00000000
--- a/src/imports/location/qdeclarativegeoroutemodel.cpp
+++ /dev/null
@@ -1,1308 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativegeoroutemodel_p.h"
-#include "qdeclarativegeoroute_p.h"
-#include "error_messages.h"
-#include "locationvaluetypehelper_p.h"
-
-#include <QtCore/QCoreApplication>
-#include <QtQml/QQmlEngine>
-#include <QtQml/qqmlinfo.h>
-#include <QtQml/private/qqmlengine_p.h>
-#include <QtLocation/QGeoRoutingManager>
-#include <QtPositioning/QGeoRectangle>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype RouteModel
- \instantiates QDeclarativeGeoRouteModel
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-routing
- \since Qt Location 5.5
-
- \brief The RouteModel type provides access to routes.
-
- The RouteModel type is used as part of a model/view grouping to retrieve
- geographic routes from a backend provider. Routes include data about driving
- directions between two points, walking directions with multiple waypoints,
- and various other similar concepts. It functions much like other Model
- types in QML (see for example \l {Models and Views in Qt Quick#ListModel}{ListModel} and
- \l XmlListModel), and interacts with views such as \l MapItemView, and \l{ListView}.
-
- Like \l Map and \l GeocodeModel, all the data for a RouteModel to work comes
- from a services plugin. This is contained in the \l{plugin} property, and
- this must be set before the RouteModel can do any useful work.
-
- Once the plugin is set, create a \l RouteQuery with the appropriate
- waypoints and other settings, and set the RouteModel's \l{query}
- property. If \l autoUpdate is enabled, the update will being automatically.
- Otherwise, the \l{update} method may be used. By default, autoUpdate is
- disabled.
-
- The data stored and returned in the RouteModel consists of \l Route objects,
- as a list with the role name "routeData". See the documentation for \l Route
- for further details on its structure and contents.
-
- \section2 Example Usage
-
- The following snippet is two-part, showing firstly the declaration of
- objects, and secondly a short piece of procedural code using it. We set
- the routeModel's \l{autoUpdate} property to false, and call \l{update} once
- the query is set up, to avoid useless extra requests halfway through the
- set up of the query.
-
- \code
- Plugin {
- id: aPlugin
- name: "osm"
- }
-
- RouteQuery {
- id: aQuery
- }
-
- RouteModel {
- id: routeModel
- plugin: aPlugin
- query: aQuery
- autoUpdate: false
- }
- \endcode
-
- \code
- {
- aQuery.addWaypoint(...)
- aQuery.addWaypoint(...)
- aQuery.travelModes = ...
- routeModel.update()
- }
- \endcode
-
-*/
-
-QDeclarativeGeoRouteModel::QDeclarativeGeoRouteModel(QObject *parent)
- : QAbstractListModel(parent),
- complete_(false),
- plugin_(0),
- routeQuery_(0),
- autoUpdate_(false),
- status_(QDeclarativeGeoRouteModel::Null),
- error_(QDeclarativeGeoRouteModel::NoError)
-{
-}
-
-QDeclarativeGeoRouteModel::~QDeclarativeGeoRouteModel()
-{
- if (!routes_.empty()) {
- qDeleteAll(routes_);
- routes_.clear();
- }
-}
-
-/*!
- \qmlproperty int QtLocation::RouteModel::count
-
- This property holds how many routes the model currently has.
- Amongst other uses, you can use this value when accessing routes
- via the QtLocation::RouteModel::get -method.
-*/
-
-int QDeclarativeGeoRouteModel::count() const
-{
- return routes_.count();
-}
-
-/*!
- \qmlmethod void QtLocation::RouteModel::reset()
-
- Resets the model. All route data is cleared, any outstanding requests
- are aborted and possible errors are cleared. Model status will be set
- to RouteModel.Null
-*/
-
-void QDeclarativeGeoRouteModel::reset()
-{
- if (!routes_.isEmpty()) {
- beginResetModel();
- qDeleteAll(routes_);
- routes_.clear();
- emit countChanged();
- emit routesChanged();
- endResetModel();
- }
-
- emit abortRequested();
- setError(NoError, QString());
- setStatus(QDeclarativeGeoRouteModel::Null);
-}
-
-/*!
- \qmlmethod void QtLocation::RouteModel::cancel()
-
- Cancels any outstanding requests and clears errors. Model status will be set to either
- RouteModel.Null or RouteModel.Ready.
-*/
-void QDeclarativeGeoRouteModel::cancel()
-{
- emit abortRequested();
- setError(NoError, QString());
- setStatus(routes_.isEmpty() ? Null : Ready);
-}
-
-/*!
- \qmlmethod void QtLocation::RouteModel::get(int)
-
- Returns the Route at given index. Use \l count property to check the
- amount of routes available. The routes are indexed from zero, so the accessible range
- is 0...(count - 1).
-
- If you access out of bounds, a zero (null object) is returned and a warning is issued.
-*/
-
-QDeclarativeGeoRoute *QDeclarativeGeoRouteModel::get(int index)
-{
- if (index < 0 || index >= routes_.count()) {
- qmlWarning(this) << QStringLiteral("Index '%1' out of range").arg(index);
- return 0;
- }
- return routes_.at(index);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoRouteModel::componentComplete()
-{
- complete_ = true;
- if (autoUpdate_) {
- update();
- }
-}
-
-/*!
- \internal
-*/
-int QDeclarativeGeoRouteModel::rowCount(const QModelIndex &parent) const
-{
- Q_UNUSED(parent)
- return routes_.count();
-}
-
-/*!
- \internal
-*/
-QVariant QDeclarativeGeoRouteModel::data(const QModelIndex &index, int role) const
-{
- if (!index.isValid()) {
- qmlWarning(this) << QStringLiteral("Error in indexing route model's data (invalid index).");
- return QVariant();
- }
-
- if (index.row() >= routes_.count()) {
- qmlWarning(this) << QStringLiteral("Fatal error in indexing route model's data (index overflow).");
- return QVariant();
- }
-
- if (role == RouteRole) {
- QObject *route = routes_.at(index.row());
- return QVariant::fromValue(route);
- }
- return QVariant();
-}
-
-QHash<int, QByteArray> QDeclarativeGeoRouteModel::roleNames() const
-{
- QHash<int, QByteArray> roleNames = QAbstractListModel::roleNames();
- roleNames.insert(RouteRole, "routeData");
- return roleNames;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoRouteModel::setPlugin(QDeclarativeGeoServiceProvider *plugin)
-{
- if (plugin_ == plugin)
- return;
-
- reset(); // reset the model
-
- if (plugin_)
- disconnect(plugin_, SIGNAL(localesChanged()), this, SIGNAL(measurementSystemChanged()));
- if (plugin)
- connect(plugin, SIGNAL(localesChanged()), this, SIGNAL(measurementSystemChanged()));
-
- plugin_ = plugin;
-
- if (complete_)
- emit pluginChanged();
-
- if (!plugin)
- return;
-
- if (plugin_->isAttached()) {
- pluginReady();
- } else {
- connect(plugin_, SIGNAL(attached()),
- this, SLOT(pluginReady()));
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoRouteModel::pluginReady()
-{
- QGeoServiceProvider *serviceProvider = plugin_->sharedGeoServiceProvider();
- QGeoRoutingManager *routingManager = serviceProvider->routingManager();
-
- if (serviceProvider->error() != QGeoServiceProvider::NoError) {
- QDeclarativeGeoRouteModel::RouteError newError = UnknownError;
- switch (serviceProvider->error()) {
- case QGeoServiceProvider::NotSupportedError:
- newError = EngineNotSetError; break;
- case QGeoServiceProvider::UnknownParameterError:
- newError = UnknownParameterError; break;
- case QGeoServiceProvider::MissingRequiredParameterError:
- newError = MissingRequiredParameterError; break;
- case QGeoServiceProvider::ConnectionError:
- newError = CommunicationError; break;
- default:
- break;
- }
-
- setError(newError, serviceProvider->errorString());
- return;
- }
-
- if (!routingManager) {
- setError(EngineNotSetError, tr("Plugin does not support routing."));
- return;
- }
-
- connect(routingManager, SIGNAL(finished(QGeoRouteReply*)),
- this, SLOT(routingFinished(QGeoRouteReply*)));
- connect(routingManager, SIGNAL(error(QGeoRouteReply*,QGeoRouteReply::Error,QString)),
- this, SLOT(routingError(QGeoRouteReply*,QGeoRouteReply::Error,QString)));
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoRouteModel::queryDetailsChanged()
-{
- if (autoUpdate_ && complete_)
- update();
-}
-
-/*!
- \qmlproperty Plugin QtLocation::RouteModel::plugin
-
- This property holds the plugin that providers the actual
- routing service. Note that all plugins do not necessarily
- provide routing (could for example provide only geocoding or maps).
-
- A valid plugin must be set before the RouteModel can perform any useful
- operations.
-
- \sa Plugin
-*/
-
-QDeclarativeGeoServiceProvider *QDeclarativeGeoRouteModel::plugin() const
-{
- return plugin_;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoRouteModel::setQuery(QDeclarativeGeoRouteQuery *query)
-{
- if (!query || query == routeQuery_)
- return;
- if (routeQuery_)
- routeQuery_->disconnect(this);
- routeQuery_ = query;
- connect(query, SIGNAL(queryDetailsChanged()), this, SLOT(queryDetailsChanged()));
- if (complete_) {
- emit queryChanged();
- if (autoUpdate_)
- update();
- }
-}
-
-/*!
- \qmlproperty RouteQuery QtLocation::RouteModel::query
-
- This property holds the data of the route request.
- The primary data are the waypoint coordinates and possible further
- preferences (means of traveling, things to avoid on route etc).
-*/
-
-QDeclarativeGeoRouteQuery *QDeclarativeGeoRouteModel::query() const
-{
- return routeQuery_;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoRouteModel::setAutoUpdate(bool autoUpdate)
-{
- if (autoUpdate_ == autoUpdate)
- return;
- autoUpdate_ = autoUpdate;
- if (complete_)
- emit autoUpdateChanged();
-}
-
-/*!
- \qmlproperty bool QtLocation::RouteModel::autoUpdate
-
- This property controls whether the Model automatically updates in response
- to changes in its attached RouteQuery. The default value of this property
- is false.
-
- If setting this value to 'true', note that any change at all in
- the RouteQuery object set in the \l{query} property will trigger a new
- request to be sent. If you are adjusting many properties of the RouteQuery
- with autoUpdate enabled, this can generate large numbers of useless (and
- later discarded) requests.
-*/
-
-bool QDeclarativeGeoRouteModel::autoUpdate() const
-{
- return autoUpdate_;
-}
-
-/*!
- \qmlproperty Locale::MeasurementSystem QtLocation::RouteModel::measurementSystem
-
- This property holds the measurement system which will be used when calculating the route. This
- property is changed when the \l {QtLocation::Plugin::locales}{Plugin::locales} property of
- \l {QtLocation::RouteModel::plugin}{plugin} changes.
-
- If setting this property it must be set after the \l {QtLocation::RouteModel::plugin}{plugin}
- property is set.
-*/
-void QDeclarativeGeoRouteModel::setMeasurementSystem(QLocale::MeasurementSystem ms)
-{
- if (!plugin_)
- return;
-
- QGeoServiceProvider *serviceProvider = plugin_->sharedGeoServiceProvider();
- if (!serviceProvider)
- return;
-
- QGeoRoutingManager *routingManager = serviceProvider->routingManager();
- if (!routingManager)
- return;
-
- if (routingManager->measurementSystem() == ms)
- return;
-
- routingManager->setMeasurementSystem(ms);
- emit measurementSystemChanged();
-}
-
-QLocale::MeasurementSystem QDeclarativeGeoRouteModel::measurementSystem() const
-{
- if (!plugin_)
- return QLocale().measurementSystem();
-
- QGeoServiceProvider *serviceProvider = plugin_->sharedGeoServiceProvider();
- if (!serviceProvider) {
- if (plugin_->locales().isEmpty())
- return QLocale().measurementSystem();
-
- return QLocale(plugin_->locales().first()).measurementSystem();
- }
-
- QGeoRoutingManager *routingManager = serviceProvider->routingManager();
- if (!routingManager) {
- if (plugin_->locales().isEmpty())
- return QLocale().measurementSystem();
-
- return QLocale(plugin_->locales().first()).measurementSystem();
- }
-
- return routingManager->measurementSystem();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoRouteModel::setStatus(QDeclarativeGeoRouteModel::Status status)
-{
- if (status_ == status)
- return;
-
- status_ = status;
-
- if (complete_)
- emit statusChanged();
-}
-
-/*!
- \qmlproperty enumeration QtLocation::RouteModel::status
-
- This read-only property holds the current status of the model.
-
- \list
- \li RouteModel.Null - No route requests have been issued or \l reset has been called.
- \li RouteModel.Ready - Route request(s) have finished successfully.
- \li RouteModel.Loading - Route request has been issued but not yet finished
- \li RouteModel.Error - Routing error has occurred, details are in \l error and \l errorString
- \endlist
-*/
-
-QDeclarativeGeoRouteModel::Status QDeclarativeGeoRouteModel::status() const
-{
- return status_;
-}
-
-/*!
- \qmlproperty string QtLocation::RouteModel::errorString
-
- This read-only property holds the textual presentation of the latest routing error.
- If no error has occurred or the model has been reset, an empty string is returned.
-
- An empty string may also be returned if an error occurred which has no associated
- textual representation.
-*/
-
-QString QDeclarativeGeoRouteModel::errorString() const
-{
- return errorString_;
-}
-
-/*!
- \qmlproperty enumeration QtLocation::RouteModel::error
-
- This read-only property holds the latest error value of the routing request.
-
- \list
- \li RouteModel.NoError - No error has occurred.
- \li RouteModel.CommunicationError - An error occurred while communicating with the service provider.
- \li RouteModel.EngineNotSetError - The model's plugin property was not set or there is no routing manager associated with the plugin.
- \li RouteModel.MissingRequiredParameterError - A required parameter was not specified.
- \li RouteModel.ParseError - The response from the service provider was in an unrecognizable format.
- \li RouteModel.UnknownError - An error occurred which does not fit into any of the other categories.
- \li RouteModel.UnknownParameterError - The plugin did not recognize one of the parameters it was given.
- \li RouteModel.UnsupportedOptionError - The requested operation is not supported by the routing provider.
- This may happen when the loaded engine does not support a particular
- type of routing request.
- \endlist
-*/
-
-QDeclarativeGeoRouteModel::RouteError QDeclarativeGeoRouteModel::error() const
-{
- return error_;
-}
-
-void QDeclarativeGeoRouteModel::setError(RouteError error, const QString& errorString)
-{
- if (error_ == error && errorString_ == errorString)
- return;
- error_ = error;
- errorString_ = errorString;
- emit errorChanged();
-}
-
-/*!
- \qmlmethod void QtLocation::RouteModel::update()
-
- Instructs the RouteModel to update its data. This is most useful
- when \l autoUpdate is disabled, to force a refresh when the query
- has been changed.
-*/
-void QDeclarativeGeoRouteModel::update()
-{
- if (!complete_)
- return;
-
- if (!plugin_) {
- setError(EngineNotSetError, tr("Cannot route, plugin not set."));
- return;
- }
-
- QGeoServiceProvider *serviceProvider = plugin_->sharedGeoServiceProvider();
- if (!serviceProvider)
- return;
-
- QGeoRoutingManager *routingManager = serviceProvider->routingManager();
- if (!routingManager) {
- setError(EngineNotSetError, tr("Cannot route, route manager not set."));
- return;
- }
- if (!routeQuery_) {
- setError(ParseError,"Cannot route, valid query not set.");
- return;
- }
- emit abortRequested(); // Clear previous requests
- QGeoRouteRequest request = routeQuery_->routeRequest();
- if (request.waypoints().count() < 2) {
- setError(ParseError,tr("Not enough waypoints for routing."));
- return;
- }
-
- setError(NoError, QString());
-
- QGeoRouteReply *reply = routingManager->calculateRoute(request);
- setStatus(QDeclarativeGeoRouteModel::Loading);
- if (!reply->isFinished()) {
- connect(this, &QDeclarativeGeoRouteModel::abortRequested, reply, &QGeoRouteReply::abort);
- } else {
- if (reply->error() == QGeoRouteReply::NoError) {
- routingFinished(reply);
- } else {
- routingError(reply, reply->error(), reply->errorString());
- }
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoRouteModel::routingFinished(QGeoRouteReply *reply)
-{
- if (!reply)
- return;
- reply->deleteLater();
- if (reply->error() != QGeoRouteReply::NoError)
- return;
-
- beginResetModel();
- int oldCount = routes_.count();
- qDeleteAll(routes_);
- // Convert routes to declarative
- routes_.clear();
- for (int i = 0; i < reply->routes().size(); ++i) {
- QDeclarativeGeoRoute *route = new QDeclarativeGeoRoute(reply->routes().at(i), this);
- QQmlEngine::setContextForObject(route, QQmlEngine::contextForObject(this));
- routes_.append(route);
- }
- endResetModel();
-
- setError(NoError, QString());
- setStatus(QDeclarativeGeoRouteModel::Ready);
-
- if (oldCount != 0 || routes_.count() != 0)
- emit routesChanged();
- if (oldCount != routes_.count())
- emit countChanged();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoRouteModel::routingError(QGeoRouteReply *reply,
- QGeoRouteReply::Error error,
- const QString &errorString)
-{
- if (!reply)
- return;
- reply->deleteLater();
- setError(static_cast<QDeclarativeGeoRouteModel::RouteError>(error), errorString);
- setStatus(QDeclarativeGeoRouteModel::Error);
-}
-
-
-/*!
- \qmltype RouteQuery
- \instantiates QDeclarativeGeoRouteQuery
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-routing
- \since Qt Location 5.5
-
- \brief The RouteQuery type is used to provide query parameters to a
- RouteModel.
-
- A RouteQuery contains all the parameters necessary to make a request
- to a routing service, which can then populate the contents of a RouteModel.
-
- These parameters describe key details of the route, such as \l waypoints to
- pass through, \l excludedAreas to avoid, the \l travelModes in use, as well
- as detailed preferences on how to optimize the route and what features
- to prefer or avoid along the path (such as toll roads, highways, etc).
-
- RouteQuery objects are used exclusively to fill out the value of a
- RouteModel's \l{RouteModel::query}{query} property, which can then begin
- the retrieval process to populate the model.
-
- \section2 Example Usage
-
- The following snipped shows an incomplete example of creating a RouteQuery
- object and setting it as the value of a RouteModel's \l{RouteModel::query}{query}
- property.
-
- \code
- RouteQuery {
- id: aQuery
- }
-
- RouteModel {
- query: aQuery
- autoUpdate: false
- }
- \endcode
-
- For a more complete example, see the documentation for the \l{RouteModel}
- type, and the Mapviewer example.
-
- \sa RouteModel
-
-*/
-
-QDeclarativeGeoRouteQuery::QDeclarativeGeoRouteQuery(QObject *parent)
-: QObject(parent), complete_(false), m_excludedAreaCoordinateChanged(false)
-{
-}
-
-QDeclarativeGeoRouteQuery::~QDeclarativeGeoRouteQuery()
-{
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoRouteQuery::componentComplete()
-{
- complete_ = true;
-}
-
-/*!
- \qmlproperty QList<FeatureType> RouteQuery::featureTypes
-
- List of features that will be considered when planning the
- route. Features with a weight of NeutralFeatureWeight will not be returned.
-
- \list
- \li RouteQuery.NoFeature - No features will be taken into account when planning the route
- \li RouteQuery.TollFeature - Consider tollways when planning the route
- \li RouteQuery.HighwayFeature - Consider highways when planning the route
- \li RouteQuery.PublicTransitFeature - Consider public transit when planning the route
- \li RouteQuery.FerryFeature - Consider ferries when planning the route
- \li RouteQuery.TunnelFeature - Consider tunnels when planning the route
- \li RouteQuery.DirtRoadFeature - Consider dirt roads when planning the route
- \li RouteQuery.ParksFeature - Consider parks when planning the route
- \li RouteQuery.MotorPoolLaneFeature - Consider motor pool lanes when planning the route
- \endlist
-
- \sa setFeatureWeight, featureWeight
-*/
-
-QList<int> QDeclarativeGeoRouteQuery::featureTypes()
-{
- QList<int> list;
-
- for (int i = 0; i < request_.featureTypes().count(); ++i) {
- list.append(static_cast<int>(request_.featureTypes().at(i)));
- }
- return list;
-}
-
-/*!
- \qmlproperty int RouteQuery::numberAlternativeRoutes
-
- The number of alternative routes requested when requesting routes.
- The default value is 0.
-*/
-
-
-int QDeclarativeGeoRouteQuery::numberAlternativeRoutes() const
-{
- return request_.numberAlternativeRoutes();
-}
-
-void QDeclarativeGeoRouteQuery::setNumberAlternativeRoutes(int numberAlternativeRoutes)
-{
- if (numberAlternativeRoutes == request_.numberAlternativeRoutes())
- return;
-
- request_.setNumberAlternativeRoutes(numberAlternativeRoutes);
-
- if (complete_) {
- emit numberAlternativeRoutesChanged();
- emit queryDetailsChanged();
- }
-}
-
-/*!
- \qmlproperty QJSValue RouteQuery::waypoints
-
-
- The waypoint coordinates of the desired route.
- The waypoints should be given in order from origin to destination.
- Two or more coordinates are needed.
-
- Waypoints can be set as part of the RouteQuery type declaration or
- dynamically with the functions provided.
-
- \sa addWaypoint, removeWaypoint, clearWaypoints
-*/
-
-QJSValue QDeclarativeGeoRouteQuery::waypoints()
-{
- QQmlContext *context = QQmlEngine::contextForObject(parent());
- QQmlEngine *engine = context->engine();
- QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(engine);
-
- QV4::Scope scope(v4);
- QV4::Scoped<QV4::ArrayObject> waypointArray(scope, v4->newArrayObject(request_.waypoints().length()));
- for (int i = 0; i < request_.waypoints().length(); ++i) {
- const QGeoCoordinate &c = request_.waypoints().at(i);
-
- QV4::ScopedValue cv(scope, v4->fromVariant(QVariant::fromValue(c)));
- waypointArray->putIndexed(i, cv);
- }
-
- return QJSValue(v4, waypointArray.asReturnedValue());
-}
-
-void QDeclarativeGeoRouteQuery::setWaypoints(const QJSValue &value)
-{
- if (!value.isArray())
- return;
-
- QList<QGeoCoordinate> waypointList;
- quint32 length = value.property(QStringLiteral("length")).toUInt();
- for (quint32 i = 0; i < length; ++i) {
- bool ok;
- QGeoCoordinate c = parseCoordinate(value.property(i), &ok);
-
- if (!ok || !c.isValid()) {
- qmlWarning(this) << "Unsupported waypoint type";
- return;
- }
-
- waypointList.append(c);
- }
-
- if (request_.waypoints() == waypointList)
- return;
-
- request_.setWaypoints(waypointList);
-
- emit waypointsChanged();
- emit queryDetailsChanged();
-}
-
-/*!
- \qmlproperty list<georectangle> RouteQuery::excludedAreas
-
- Areas that the route must not cross.
-
- Excluded areas can be set as part of the \l RouteQuery type declaration or
- dynamically with the functions provided.
-
- \sa addExcludedArea, removeExcludedArea, clearExcludedAreas
-*/
-QJSValue QDeclarativeGeoRouteQuery::excludedAreas() const
-{
- QQmlContext *context = QQmlEngine::contextForObject(parent());
- QQmlEngine *engine = context->engine();
- QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(engine);
-
- QV4::Scope scope(v4);
- QV4::Scoped<QV4::ArrayObject> excludedAreasArray(scope, v4->newArrayObject(request_.excludeAreas().length()));
- for (int i = 0; i < request_.excludeAreas().length(); ++i) {
- const QGeoRectangle &r = request_.excludeAreas().at(i);
-
- QV4::ScopedValue cv(scope, v4->fromVariant(QVariant::fromValue(r)));
- excludedAreasArray->putIndexed(i, cv);
- }
-
- return QJSValue(v4, excludedAreasArray.asReturnedValue());
-}
-
-void QDeclarativeGeoRouteQuery::setExcludedAreas(const QJSValue &value)
-{
- if (!value.isArray())
- return;
-
- QList<QGeoRectangle> excludedAreasList;
- quint32 length = value.property(QStringLiteral("length")).toUInt();
- for (quint32 i = 0; i < length; ++i) {
- bool ok;
- QGeoRectangle r = parseRectangle(value.property(i), &ok);
-
- if (!ok || !r.isValid()) {
- qmlWarning(this) << "Unsupported area type";
- return;
- }
-
- excludedAreasList.append(r);
- }
-
- if (request_.excludeAreas() == excludedAreasList)
- return;
-
- request_.setExcludeAreas(excludedAreasList);
-
- emit excludedAreasChanged();
- emit queryDetailsChanged();
-}
-
-/*!
- \qmlmethod void QtLocation::RouteQuery::addExcludedArea(georectangle)
-
- Adds the given area to excluded areas (areas that the route must not cross).
- Same area can only be added once.
-
- \sa removeExcludedArea, clearExcludedAreas
-*/
-
-
-void QDeclarativeGeoRouteQuery::addExcludedArea(const QGeoRectangle &area)
-{
- if (!area.isValid())
- return;
-
- QList<QGeoRectangle> excludedAreas = request_.excludeAreas();
-
- if (excludedAreas.contains(area))
- return;
-
- excludedAreas.append(area);
-
- request_.setExcludeAreas(excludedAreas);
-
- if (complete_) {
- emit excludedAreasChanged();
- emit queryDetailsChanged();
- }
-}
-
-/*!
- \qmlmethod void QtLocation::RouteQuery::removeExcludedArea(georectangle)
-
- Removes the given area to excluded areas (areas that the route must not cross).
-
- \sa addExcludedArea, clearExcludedAreas
-*/
-
-void QDeclarativeGeoRouteQuery::removeExcludedArea(const QGeoRectangle &area)
-{
- if (!area.isValid())
- return;
-
- QList<QGeoRectangle> excludedAreas = request_.excludeAreas();
-
- int index = excludedAreas.lastIndexOf(area);
- if (index == -1) {
- qmlWarning(this) << QStringLiteral("Cannot remove nonexistent area.");
- return;
- }
- excludedAreas.removeAt(index);
- request_.setExcludeAreas(excludedAreas);
-
- emit excludedAreasChanged();
- emit queryDetailsChanged();
-}
-
-/*!
- \qmlmethod void QtLocation::RouteQuery::clearExcludedAreas()
-
- Clears all excluded areas (areas that the route must not cross).
-
- \sa addExcludedArea, removeExcludedArea
-*/
-
-void QDeclarativeGeoRouteQuery::clearExcludedAreas()
-{
- if (request_.excludeAreas().isEmpty())
- return;
-
- request_.setExcludeAreas(QList<QGeoRectangle>());
-
- emit excludedAreasChanged();
- emit queryDetailsChanged();
-}
-
-/*!
- \qmlmethod void QtLocation::RouteQuery::addWaypoint(coordinate)
-
- Appends a coordinate to the list of waypoints. Same coordinate
- can be set multiple times.
-
- \sa removeWaypoint, clearWaypoints
-*/
-void QDeclarativeGeoRouteQuery::addWaypoint(const QGeoCoordinate &waypoint)
-{
- if (!waypoint.isValid()) {
- qmlWarning(this) << QStringLiteral("Not adding invalid waypoint.");
- return;
- }
-
- QList<QGeoCoordinate> waypoints = request_.waypoints();
- waypoints.append(waypoint);
- request_.setWaypoints(waypoints);
-
- if (complete_) {
- emit waypointsChanged();
- emit queryDetailsChanged();
- }
-}
-
-/*!
- \qmlmethod void QtLocation::RouteQuery::removeWaypoint(coordinate)
-
- Removes the given from the list of waypoints. In case same coordinate
- appears multiple times, the most recently added coordinate instance is
- removed.
-
- \sa addWaypoint, clearWaypoints
-*/
-void QDeclarativeGeoRouteQuery::removeWaypoint(const QGeoCoordinate &waypoint)
-{
- QList<QGeoCoordinate> waypoints = request_.waypoints();
-
- int index = waypoints.lastIndexOf(waypoint);
- if (index == -1) {
- qmlWarning(this) << QStringLiteral("Cannot remove nonexistent waypoint.");
- return;
- }
-
- waypoints.removeAt(index);
-
- request_.setWaypoints(waypoints);
-
- emit waypointsChanged();
- emit queryDetailsChanged();
-}
-
-/*!
- \qmlmethod void QtLocation::RouteQuery::clearWaypoints()
-
- Clears all waypoints.
-
- \sa removeWaypoint, addWaypoint
-*/
-void QDeclarativeGeoRouteQuery::clearWaypoints()
-{
- if (request_.waypoints().isEmpty())
- return;
-
- request_.setWaypoints(QList<QGeoCoordinate>());
-
- emit waypointsChanged();
- emit queryDetailsChanged();
-}
-
-/*!
- \qmlmethod void QtLocation::RouteQuery::setFeatureWeight(FeatureType, FeatureWeight)
-
- Defines the weight to associate with a feature during the planning of a
- route.
-
- Following lists the possible feature weights:
-
- \list
- \li RouteQuery.NeutralFeatureWeight - The presence or absence of the feature will not affect the planning of the route
- \li RouteQuery.PreferFeatureWeight - Routes which contain the feature will be preferred over those that do not
- \li RouteQuery.RequireFeatureWeight - Only routes which contain the feature will be considered, otherwise no route will be returned
- \li RouteQuery.AvoidFeatureWeight - Routes which do not contain the feature will be preferred over those that do
- \li RouteQuery.DisallowFeatureWeight - Only routes which do not contain the feature will be considered, otherwise no route will be returned
- \endlist
-
- \sa featureTypes, resetFeatureWeights, featureWeight
-
-*/
-
-void QDeclarativeGeoRouteQuery::setFeatureWeight(FeatureType featureType, FeatureWeight featureWeight)
-{
- if (featureType == NoFeature && !request_.featureTypes().isEmpty()) {
- resetFeatureWeights();
- return;
- }
-
- // Check if the weight changes, as we need to signal it
- FeatureWeight originalWeight = static_cast<FeatureWeight>(request_.featureWeight(static_cast<QGeoRouteRequest::FeatureType>(featureType)));
- if (featureWeight == originalWeight)
- return;
-
- request_.setFeatureWeight(static_cast<QGeoRouteRequest::FeatureType>(featureType),
- static_cast<QGeoRouteRequest::FeatureWeight>(featureWeight));
- if (complete_ && ((originalWeight == NeutralFeatureWeight) || (featureWeight == NeutralFeatureWeight))) {
- // featureTypes should now give a different list, because the original and new weight
- // were not same, and other one was neutral weight
- emit featureTypesChanged();
- emit queryDetailsChanged();
- }
-}
-
-/*!
- \qmlmethod void QtLocation::RouteQuery::resetFeatureWeights()
-
- Resets all feature weights to their default state (NeutralFeatureWeight).
-
- \sa featureTypes, setFeatureWeight, featureWeight
-*/
-void QDeclarativeGeoRouteQuery::resetFeatureWeights()
-{
- // reset all feature types.
- QList<QGeoRouteRequest::FeatureType> featureTypes = request_.featureTypes();
- for (int i = 0; i < featureTypes.count(); ++i) {
- request_.setFeatureWeight(featureTypes.at(i), QGeoRouteRequest::NeutralFeatureWeight);
- }
- if (complete_) {
- emit featureTypesChanged();
- emit queryDetailsChanged();
- }
-}
-
-/*!
- \qmlmethod FeatureWeight QtLocation::RouteQuery::featureWeight(FeatureType featureType)
-
- Gets the weight for the \a featureType.
-
- \sa featureTypes, setFeatureWeight, resetFeatureWeights
-*/
-
-int QDeclarativeGeoRouteQuery::featureWeight(FeatureType featureType)
-{
- return request_.featureWeight(static_cast<QGeoRouteRequest::FeatureType>(featureType));
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoRouteQuery::setTravelModes(QDeclarativeGeoRouteQuery::TravelModes travelModes)
-{
- QGeoRouteRequest::TravelModes reqTravelModes;
-
- if (travelModes & QDeclarativeGeoRouteQuery::CarTravel)
- reqTravelModes |= QGeoRouteRequest::CarTravel;
- if (travelModes & QDeclarativeGeoRouteQuery::PedestrianTravel)
- reqTravelModes |= QGeoRouteRequest::PedestrianTravel;
- if (travelModes & QDeclarativeGeoRouteQuery::BicycleTravel)
- reqTravelModes |= QGeoRouteRequest::BicycleTravel;
- if (travelModes & QDeclarativeGeoRouteQuery::PublicTransitTravel)
- reqTravelModes |= QGeoRouteRequest::PublicTransitTravel;
- if (travelModes & QDeclarativeGeoRouteQuery::TruckTravel)
- reqTravelModes |= QGeoRouteRequest::TruckTravel;
-
- if (reqTravelModes == request_.travelModes())
- return;
-
- request_.setTravelModes(reqTravelModes);
-
- if (complete_) {
- emit travelModesChanged();
- emit queryDetailsChanged();
- }
-}
-
-
-/*!
- \qmlproperty enumeration RouteQuery::segmentDetail
-
- The level of detail which will be used in the representation of routing segments.
-
- \list
- \li RouteQuery.NoSegmentData - No segment data should be included with the route
- \li RouteQuery.BasicSegmentData - Basic segment data will be included with the route
- \endlist
-
- The default value is RouteQuery.BasicSegmentData
-*/
-
-void QDeclarativeGeoRouteQuery::setSegmentDetail(SegmentDetail segmentDetail)
-{
- if (static_cast<QGeoRouteRequest::SegmentDetail>(segmentDetail) == request_.segmentDetail())
- return;
- request_.setSegmentDetail(static_cast<QGeoRouteRequest::SegmentDetail>(segmentDetail));
- if (complete_) {
- emit segmentDetailChanged();
- emit queryDetailsChanged();
- }
-}
-
-QDeclarativeGeoRouteQuery::SegmentDetail QDeclarativeGeoRouteQuery::segmentDetail() const
-{
- return static_cast<QDeclarativeGeoRouteQuery::SegmentDetail>(request_.segmentDetail());
-}
-
-/*!
- \qmlproperty enumeration RouteQuery::maneuverDetail
-
- The level of detail which will be used in the representation of routing maneuvers.
-
- \list
- \li RouteQuery.NoManeuvers - No maneuvers should be included with the route
- \li RouteQuery.BasicManeuvers - Basic maneuvers will be included with the route
- \endlist
-
- The default value is RouteQuery.BasicManeuvers
-*/
-
-void QDeclarativeGeoRouteQuery::setManeuverDetail(ManeuverDetail maneuverDetail)
-{
- if (static_cast<QGeoRouteRequest::ManeuverDetail>(maneuverDetail) == request_.maneuverDetail())
- return;
- request_.setManeuverDetail(static_cast<QGeoRouteRequest::ManeuverDetail>(maneuverDetail));
- if (complete_) {
- emit maneuverDetailChanged();
- emit queryDetailsChanged();
- }
-}
-
-QDeclarativeGeoRouteQuery::ManeuverDetail QDeclarativeGeoRouteQuery::maneuverDetail() const
-{
- return static_cast<QDeclarativeGeoRouteQuery::ManeuverDetail>(request_.maneuverDetail());
-}
-
-/*!
- \qmlproperty enumeration RouteQuery::travelModes
-
- The travel modes which should be considered during the planning of the route.
- Values can be combined with OR ('|') -operator.
-
- \list
- \li RouteQuery.CarTravel - The route will be optimized for someone who is driving a car
- \li RouteQuery.PedestrianTravel - The route will be optimized for someone who is walking
- \li RouteQuery.BicycleTravel - The route will be optimized for someone who is riding a bicycle
- \li RouteQuery.PublicTransitTravel - The route will be optimized for someone who is making use of public transit
- \li RouteQuery.TruckTravel - The route will be optimized for someone who is driving a truck
- \endlist
-
- The default value is RouteQuery.CarTravel
-*/
-
-QDeclarativeGeoRouteQuery::TravelModes QDeclarativeGeoRouteQuery::travelModes() const
-{
- QGeoRouteRequest::TravelModes reqTravelModes = request_.travelModes();
- QDeclarativeGeoRouteQuery::TravelModes travelModes;
-
- if (reqTravelModes & QGeoRouteRequest::CarTravel)
- travelModes |= QDeclarativeGeoRouteQuery::CarTravel;
- if (reqTravelModes & QGeoRouteRequest::PedestrianTravel)
- travelModes |= QDeclarativeGeoRouteQuery::PedestrianTravel;
- if (reqTravelModes & QGeoRouteRequest::BicycleTravel)
- travelModes |= QDeclarativeGeoRouteQuery::BicycleTravel;
- if (reqTravelModes & QGeoRouteRequest::PublicTransitTravel)
- travelModes |= QDeclarativeGeoRouteQuery::PublicTransitTravel;
- if (reqTravelModes & QGeoRouteRequest::TruckTravel)
- travelModes |= QDeclarativeGeoRouteQuery::TruckTravel;
-
- return travelModes;
-}
-
-/*!
- \qmlproperty enumeration RouteQuery::routeOptimizations
-
- The route optimizations which should be considered during the planning of the route.
- Values can be combined with OR ('|') -operator.
-
- \list
- \li RouteQuery.ShortestRoute - Minimize the length of the journey
- \li RouteQuery.FastestRoute - Minimize the traveling time for the journey
- \li RouteQuery.MostEconomicRoute - Minimize the cost of the journey
- \li RouteQuery.MostScenicRoute - Maximize the scenic potential of the journey
- \endlist
-
- The default value is RouteQuery.FastestRoute
-*/
-
-QDeclarativeGeoRouteQuery::RouteOptimizations QDeclarativeGeoRouteQuery::routeOptimizations() const
-{
- QGeoRouteRequest::RouteOptimizations reqOptimizations = request_.routeOptimization();
- QDeclarativeGeoRouteQuery::RouteOptimizations optimization;
-
- if (reqOptimizations & QGeoRouteRequest::ShortestRoute)
- optimization |= QDeclarativeGeoRouteQuery::ShortestRoute;
- if (reqOptimizations & QGeoRouteRequest::FastestRoute)
- optimization |= QDeclarativeGeoRouteQuery::FastestRoute;
- if (reqOptimizations & QGeoRouteRequest::MostEconomicRoute)
- optimization |= QDeclarativeGeoRouteQuery::MostEconomicRoute;
- if (reqOptimizations & QGeoRouteRequest::MostScenicRoute)
- optimization |= QDeclarativeGeoRouteQuery::MostScenicRoute;
-
- return optimization;
-}
-
-void QDeclarativeGeoRouteQuery::setRouteOptimizations(QDeclarativeGeoRouteQuery::RouteOptimizations optimization)
-{
- QGeoRouteRequest::RouteOptimizations reqOptimizations;
-
- if (optimization & QDeclarativeGeoRouteQuery::ShortestRoute)
- reqOptimizations |= QGeoRouteRequest::ShortestRoute;
- if (optimization & QDeclarativeGeoRouteQuery::FastestRoute)
- reqOptimizations |= QGeoRouteRequest::FastestRoute;
- if (optimization & QDeclarativeGeoRouteQuery::MostEconomicRoute)
- reqOptimizations |= QGeoRouteRequest::MostEconomicRoute;
- if (optimization & QDeclarativeGeoRouteQuery::MostScenicRoute)
- reqOptimizations |= QGeoRouteRequest::MostScenicRoute;
-
- if (reqOptimizations == request_.routeOptimization())
- return;
-
- request_.setRouteOptimization(reqOptimizations);
-
- if (complete_) {
- emit routeOptimizationsChanged();
- emit queryDetailsChanged();
- }
-}
-
-/*!
- \internal
-*/
-QGeoRouteRequest QDeclarativeGeoRouteQuery::routeRequest() const
-{
- return request_;
-}
-
-void QDeclarativeGeoRouteQuery::excludedAreaCoordinateChanged()
-{
- if (!m_excludedAreaCoordinateChanged) {
- m_excludedAreaCoordinateChanged = true;
- QMetaObject::invokeMethod(this, "doCoordinateChanged", Qt::QueuedConnection);
- }
-}
-
-void QDeclarativeGeoRouteQuery::doCoordinateChanged()
-{
- m_excludedAreaCoordinateChanged = false;
- emit queryDetailsChanged();
-}
-
-#include "moc_qdeclarativegeoroutemodel_p.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeoroutemodel_p.h b/src/imports/location/qdeclarativegeoroutemodel_p.h
deleted file mode 100644
index 30fc1ecc..00000000
--- a/src/imports/location/qdeclarativegeoroutemodel_p.h
+++ /dev/null
@@ -1,343 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEGEOROUTEMODEL_H
-#define QDECLARATIVEGEOROUTEMODEL_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 "qdeclarativegeoserviceprovider_p.h"
-
-#include <QtPositioning/QGeoCoordinate>
-#include <QtPositioning/QGeoRectangle>
-
-#include <qgeorouterequest.h>
-#include <qgeoroutereply.h>
-
-#include <QtQml/qqml.h>
-#include <QtQml/QQmlParserStatus>
-#include <QtQml/private/qv4engine_p.h>
-#include <QAbstractListModel>
-
-#include <QObject>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoServiceProvider;
-class QGeoRoutingManager;
-class QDeclarativeGeoRoute;
-class QDeclarativeGeoRouteQuery;
-
-class QDeclarativeGeoRouteModel : public QAbstractListModel, public QQmlParserStatus
-{
- Q_OBJECT
- Q_ENUMS(Status)
- Q_ENUMS(RouteError)
-
- Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged)
- Q_PROPERTY(QDeclarativeGeoRouteQuery *query READ query WRITE setQuery NOTIFY queryChanged)
- Q_PROPERTY(int count READ count NOTIFY countChanged)
- Q_PROPERTY(bool autoUpdate READ autoUpdate WRITE setAutoUpdate NOTIFY autoUpdateChanged)
- Q_PROPERTY(Status status READ status NOTIFY statusChanged)
- Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
- Q_PROPERTY(RouteError error READ error NOTIFY errorChanged)
- Q_PROPERTY(QLocale::MeasurementSystem measurementSystem READ measurementSystem WRITE setMeasurementSystem NOTIFY measurementSystemChanged)
-
- Q_INTERFACES(QQmlParserStatus)
-
-public:
- enum Roles {
- RouteRole = Qt::UserRole + 500
- };
-
- enum Status {
- Null,
- Ready,
- Loading,
- Error
- };
-
- enum RouteError {
- NoError = QGeoRouteReply::NoError,
- EngineNotSetError = QGeoRouteReply::EngineNotSetError,
- CommunicationError = QGeoRouteReply::CommunicationError,
- ParseError = QGeoRouteReply::ParseError,
- UnsupportedOptionError = QGeoRouteReply::UnsupportedOptionError,
- UnknownError = QGeoRouteReply::UnknownError,
- //we leave gap for future QGeoRouteReply errors
-
- //QGeoServiceProvider related errors start here
- UnknownParameterError = 100,
- MissingRequiredParameterError
- };
-
- explicit QDeclarativeGeoRouteModel(QObject *parent = 0);
- ~QDeclarativeGeoRouteModel();
-
- // From QQmlParserStatus
- void classBegin() {}
- void componentComplete();
-
- // From QAbstractListModel
- int rowCount(const QModelIndex &parent) const;
- QVariant data(const QModelIndex &index, int role) const;
- virtual QHash<int,QByteArray> roleNames() const;
-
- void setPlugin(QDeclarativeGeoServiceProvider *plugin);
- QDeclarativeGeoServiceProvider *plugin() const;
-
- void setQuery(QDeclarativeGeoRouteQuery *query);
- QDeclarativeGeoRouteQuery *query() const;
-
- void setAutoUpdate(bool autoUpdate);
- bool autoUpdate() const;
-
- void setMeasurementSystem(QLocale::MeasurementSystem ms);
- QLocale::MeasurementSystem measurementSystem() const;
-
- Status status() const;
- QString errorString() const;
- RouteError error() const;
-
- int count() const;
- Q_INVOKABLE QDeclarativeGeoRoute *get(int index);
- Q_INVOKABLE void reset();
- Q_INVOKABLE void cancel();
-
-Q_SIGNALS:
- void countChanged();
- void pluginChanged();
- void queryChanged();
- void autoUpdateChanged();
- void statusChanged();
- void errorChanged(); //emitted also for errorString notification
- void routesChanged();
- void measurementSystemChanged();
- void abortRequested();
-
-public Q_SLOTS:
- void update();
-
-private Q_SLOTS:
- void routingFinished(QGeoRouteReply *reply);
- void routingError(QGeoRouteReply *reply,
- QGeoRouteReply::Error error,
- const QString &errorString);
- void queryDetailsChanged();
- void pluginReady();
-
-private:
- void setStatus(Status status);
- void setError(RouteError error, const QString &errorString);
-
- bool complete_;
-
- QDeclarativeGeoServiceProvider *plugin_;
- QDeclarativeGeoRouteQuery *routeQuery_;
-
- QList<QDeclarativeGeoRoute *> routes_;
- bool autoUpdate_;
- Status status_;
- QString errorString_;
- RouteError error_;
-};
-
-class QDeclarativeGeoRouteQuery : public QObject, public QQmlParserStatus
-{
- Q_OBJECT
- Q_ENUMS(TravelMode)
- Q_ENUMS(FeatureType)
- Q_ENUMS(FeatureWeight)
- Q_ENUMS(SegmentDetail)
- Q_ENUMS(ManeuverDetail)
- Q_ENUMS(RouteOptimization)
- Q_FLAGS(RouteOptimizations)
- Q_FLAGS(ManeuverDetails)
- Q_FLAGS(SegmentDetails)
- Q_FLAGS(TravelModes)
-
- Q_PROPERTY(int numberAlternativeRoutes READ numberAlternativeRoutes WRITE setNumberAlternativeRoutes NOTIFY numberAlternativeRoutesChanged)
- Q_PROPERTY(TravelModes travelModes READ travelModes WRITE setTravelModes NOTIFY travelModesChanged)
- Q_PROPERTY(RouteOptimizations routeOptimizations READ routeOptimizations WRITE setRouteOptimizations NOTIFY routeOptimizationsChanged)
- Q_PROPERTY(SegmentDetail segmentDetail READ segmentDetail WRITE setSegmentDetail NOTIFY segmentDetailChanged)
- Q_PROPERTY(ManeuverDetail maneuverDetail READ maneuverDetail WRITE setManeuverDetail NOTIFY maneuverDetailChanged)
- Q_PROPERTY(QJSValue waypoints READ waypoints WRITE setWaypoints NOTIFY waypointsChanged)
- Q_PROPERTY(QJSValue excludedAreas READ excludedAreas WRITE setExcludedAreas NOTIFY excludedAreasChanged)
- Q_PROPERTY(QList<int> featureTypes READ featureTypes NOTIFY featureTypesChanged)
- Q_INTERFACES(QQmlParserStatus)
-
-public:
-
- explicit QDeclarativeGeoRouteQuery(QObject *parent = 0);
- ~QDeclarativeGeoRouteQuery();
-
- // From QQmlParserStatus
- void classBegin() {}
- void componentComplete();
-
- QGeoRouteRequest routeRequest() const;
-
- enum TravelMode {
- CarTravel = QGeoRouteRequest::CarTravel,
- PedestrianTravel = QGeoRouteRequest::PedestrianTravel,
- BicycleTravel = QGeoRouteRequest::BicycleTravel,
- PublicTransitTravel = QGeoRouteRequest::PublicTransitTravel,
- TruckTravel = QGeoRouteRequest::TruckTravel
- };
- Q_DECLARE_FLAGS(TravelModes, TravelMode)
-
- enum FeatureType {
- NoFeature = QGeoRouteRequest::NoFeature,
- TollFeature = QGeoRouteRequest::TollFeature,
- HighwayFeature = QGeoRouteRequest::HighwayFeature,
- PublicTransitFeature = QGeoRouteRequest::PublicTransitFeature,
- FerryFeature = QGeoRouteRequest::FerryFeature,
- TunnelFeature = QGeoRouteRequest::TunnelFeature,
- DirtRoadFeature = QGeoRouteRequest::DirtRoadFeature,
- ParksFeature = QGeoRouteRequest::ParksFeature,
- MotorPoolLaneFeature = QGeoRouteRequest::MotorPoolLaneFeature
- };
- Q_DECLARE_FLAGS(FeatureTypes, FeatureType)
-
- enum FeatureWeight {
- NeutralFeatureWeight = QGeoRouteRequest::NeutralFeatureWeight,
- PreferFeatureWeight = QGeoRouteRequest::PreferFeatureWeight,
- RequireFeatureWeight = QGeoRouteRequest::RequireFeatureWeight,
- AvoidFeatureWeight = QGeoRouteRequest::AvoidFeatureWeight,
- DisallowFeatureWeight = QGeoRouteRequest::DisallowFeatureWeight
- };
- Q_DECLARE_FLAGS(FeatureWeights, FeatureWeight)
-
- enum RouteOptimization {
- ShortestRoute = QGeoRouteRequest::ShortestRoute,
- FastestRoute = QGeoRouteRequest::FastestRoute,
- MostEconomicRoute = QGeoRouteRequest::MostEconomicRoute,
- MostScenicRoute = QGeoRouteRequest::MostScenicRoute
- };
- Q_DECLARE_FLAGS(RouteOptimizations, RouteOptimization)
-
- enum SegmentDetail {
- NoSegmentData = 0x0000,
- BasicSegmentData = 0x0001
- };
- Q_DECLARE_FLAGS(SegmentDetails, SegmentDetail)
-
- enum ManeuverDetail {
- NoManeuvers = 0x0000,
- BasicManeuvers = 0x0001
- };
- Q_DECLARE_FLAGS(ManeuverDetails, ManeuverDetail)
-
- void setNumberAlternativeRoutes(int numberAlternativeRoutes);
- int numberAlternativeRoutes() const;
-
- //QList<FeatureType> featureTypes();
- QList<int> featureTypes();
-
-
- QJSValue waypoints();
- void setWaypoints(const QJSValue &value);
-
- // READ functions for list properties
- QJSValue excludedAreas() const;
- void setExcludedAreas(const QJSValue &value);
-
- Q_INVOKABLE void addWaypoint(const QGeoCoordinate &waypoint);
- Q_INVOKABLE void removeWaypoint(const QGeoCoordinate &waypoint);
- Q_INVOKABLE void clearWaypoints();
-
- Q_INVOKABLE void addExcludedArea(const QGeoRectangle &area);
- Q_INVOKABLE void removeExcludedArea(const QGeoRectangle &area);
- Q_INVOKABLE void clearExcludedAreas();
-
- Q_INVOKABLE void setFeatureWeight(FeatureType featureType, FeatureWeight featureWeight);
- Q_INVOKABLE int featureWeight(FeatureType featureType);
- Q_INVOKABLE void resetFeatureWeights();
-
- /*
- feature weights
- */
-
- void setTravelModes(TravelModes travelModes);
- TravelModes travelModes() const;
-
- void setSegmentDetail(SegmentDetail segmentDetail);
- SegmentDetail segmentDetail() const;
-
- void setManeuverDetail(ManeuverDetail maneuverDetail);
- ManeuverDetail maneuverDetail() const;
-
- void setRouteOptimizations(RouteOptimizations optimization);
- RouteOptimizations routeOptimizations() const;
-
-Q_SIGNALS:
- void numberAlternativeRoutesChanged();
- void travelModesChanged();
- void routeOptimizationsChanged();
-
- void waypointsChanged();
- void excludedAreasChanged();
-
- void featureTypesChanged();
- void maneuverDetailChanged();
- void segmentDetailChanged();
-
- void queryDetailsChanged();
-
-private Q_SLOTS:
- void excludedAreaCoordinateChanged();
-
-private:
- Q_INVOKABLE void doCoordinateChanged();
-
- QGeoRouteRequest request_;
- bool complete_;
- bool m_excludedAreaCoordinateChanged;
-
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/imports/location/qdeclarativegeoroutesegment.cpp b/src/imports/location/qdeclarativegeoroutesegment.cpp
deleted file mode 100644
index acfe2441..00000000
--- a/src/imports/location/qdeclarativegeoroutesegment.cpp
+++ /dev/null
@@ -1,164 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativegeoroutesegment_p.h"
-
-#include <QtQml/QQmlEngine>
-#include <QtQml/private/qqmlengine_p.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype RouteSegment
- \instantiates QDeclarativeGeoRouteSegment
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-routing
- \since Qt Location 5.5
-
- \brief The RouteSegment type represents a segment of a Route.
-
- A RouteSegment instance has information about the physical layout
- of the route segment, the length of the route and estimated time required
- to traverse the route segment and optional RouteManeuvers associated with
- the end of the route segment.
-
- RouteSegment instances can be thought of as edges on a routing
- graph, with RouteManeuver instances as optional labels attached to the
- vertices of the graph.
-
- The primary means of acquiring Route objects is via Routes via \l RouteModel.
-
- \section1 Example
-
- The following QML snippet demonstrates how to print information about a
- route segment:
-
- \snippet declarative/routing.qml QtQuick import
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/routing.qml RouteSegment
-*/
-
-QDeclarativeGeoRouteSegment::QDeclarativeGeoRouteSegment(QObject *parent)
- : QObject(parent)
-{
- maneuver_ = new QDeclarativeGeoManeuver(this);
-}
-
-QDeclarativeGeoRouteSegment::QDeclarativeGeoRouteSegment(const QGeoRouteSegment &segment,
- QObject *parent)
- : QObject(parent),
- segment_(segment)
-{
- maneuver_ = new QDeclarativeGeoManeuver(segment_.maneuver(), this);
-}
-
-QDeclarativeGeoRouteSegment::~QDeclarativeGeoRouteSegment() {}
-
-/*!
- \qmlproperty int QtLocation::RouteSegment::travelTime
-
- Read-only property which holds the estimated amount of time it will take to
- traverse this segment, in seconds.
-
-*/
-
-int QDeclarativeGeoRouteSegment::travelTime() const
-{
- return segment_.travelTime();
-}
-
-/*!
- \qmlproperty real QtLocation::RouteSegment::distance
-
- Read-only property which holds the distance covered by this segment of the route, in meters.
-
-*/
-
-qreal QDeclarativeGeoRouteSegment::distance() const
-{
- return segment_.distance();
-}
-
-/*!
- \qmlproperty RouteManeuver QtLocation::RouteSegment::maneuver
-
- Read-only property which holds the maneuver for this route segment.
-
- Will return invalid maneuver if no information has been attached to the endpoint
- of this route segment.
-*/
-
-QDeclarativeGeoManeuver *QDeclarativeGeoRouteSegment::maneuver() const
-{
- return maneuver_;
-}
-
-/*!
- \qmlproperty QJSValue QtLocation::RouteSegment::path
-
- Read-only property which holds the geographical coordinates of this segment.
- Coordinates are listed in the order in which they would be traversed by someone
- traveling along this segment of the route.
-
- To access individual segments you can use standard list accessors: 'path.length'
- indicates the number of objects and 'path[index starting from zero]' gives
- the actual object.
-
- \sa QtPositioning::coordinate
-*/
-
-QJSValue QDeclarativeGeoRouteSegment::path() const
-{
- QQmlContext *context = QQmlEngine::contextForObject(parent());
- QQmlEngine *engine = context->engine();
- QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(engine);
-
- QV4::Scope scope(v4);
- QV4::Scoped<QV4::ArrayObject> pathArray(scope, v4->newArrayObject(segment_.path().length()));
- for (int i = 0; i < segment_.path().length(); ++i) {
- const QGeoCoordinate &c = segment_.path().at(i);
-
- QV4::ScopedValue cv(scope, v4->fromVariant(QVariant::fromValue(c)));
- pathArray->putIndexed(i, cv);
- }
-
- return QJSValue(v4, pathArray.asReturnedValue());
-}
-
-#include "moc_qdeclarativegeoroutesegment_p.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativegeoroutesegment_p.h b/src/imports/location/qdeclarativegeoroutesegment_p.h
deleted file mode 100644
index e6cf5aa5..00000000
--- a/src/imports/location/qdeclarativegeoroutesegment_p.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEGEOROUTESEGMENT_H
-#define QDECLARATIVEGEOROUTESEGMENT_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 "qdeclarativegeomaneuver_p.h"
-
-#include <QtCore/QObject>
-#include <QtQml/qjsvalue.h>
-#include <QtLocation/QGeoRouteSegment>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoRouteSegment : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(int travelTime READ travelTime CONSTANT)
- Q_PROPERTY(qreal distance READ distance CONSTANT)
- Q_PROPERTY(QJSValue path READ path CONSTANT)
- Q_PROPERTY(QDeclarativeGeoManeuver *maneuver READ maneuver CONSTANT)
-
-public:
- explicit QDeclarativeGeoRouteSegment(QObject *parent = 0);
- QDeclarativeGeoRouteSegment(const QGeoRouteSegment &segment, QObject *parent = 0);
- ~QDeclarativeGeoRouteSegment();
-
- int travelTime() const;
- qreal distance() const;
- QJSValue path() const;
- QDeclarativeGeoManeuver *maneuver() const;
-
-private:
- QGeoRouteSegment segment_;
- QDeclarativeGeoManeuver *maneuver_;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/imports/location/qdeclarativegeoserviceprovider.cpp b/src/imports/location/qdeclarativegeoserviceprovider.cpp
deleted file mode 100644
index 8ed6a7bf..00000000
--- a/src/imports/location/qdeclarativegeoserviceprovider.cpp
+++ /dev/null
@@ -1,822 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativegeoserviceprovider_p.h"
-
-#include <QtQml/QQmlInfo>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype Plugin
- \instantiates QDeclarativeGeoServiceProvider
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-common
- \since Qt Location 5.5
-
- \brief The Plugin type describes a Location based services plugin.
-
- The Plugin type is used to declaratively specify which available
- GeoServices plugin should be used for various tasks in the Location API.
- Plugins are used by \l Map, \l RouteModel, and \l GeocodeModel
- types, as well as a variety of others.
-
- Plugins recognized by the system have a \l name property, a simple string
- normally indicating the name of the service that the Plugin retrieves
- data from. They also have a variety of features, which can be test for using the
- \l {supportsRouting()}, \l {supportsGeocoding()}, \l {supportsMapping()} and
- \l {supportsPlaces()} methods.
-
- When a Plugin object is created, it is "detached" and not associated with
- any actual service plugin. Once it has received information via setting
- its \l name, \l preferred, or \l required properties, it will choose an
- appropriate service plugin to attach to. Plugin objects can only be
- attached once; to use multiple plugins, create multiple Plugin objects.
-
- \section2 Example Usage
-
- The following snippet shows a Plugin object being created with the
- \l required and \l preferred properties set. This Plugin will attach to the
- first found plugin that supports both mapping and geocoding, and will
- prefer plugins named "here" or "osm" to any others.
-
- \code
- Plugin {
- id: plugin
- preferred: ["here", "osm"]
- required: Plugin.AnyMappingFeatures | Plugin.AnyGeocodingFeatures
- }
- \endcode
-*/
-
-QDeclarativeGeoServiceProvider::QDeclarativeGeoServiceProvider(QObject *parent)
-: QObject(parent),
- sharedProvider_(0),
- required_(new QDeclarativeGeoServiceProviderRequirements),
- complete_(false),
- experimental_(false)
-{
- locales_.append(QLocale().name());
-}
-
-QDeclarativeGeoServiceProvider::~QDeclarativeGeoServiceProvider()
-{
- delete required_;
- delete sharedProvider_;
-}
-
-
-
-/*!
- \qmlproperty string Plugin::name
-
- This property holds the name of the plugin. Setting this property
- will cause the Plugin to only attach to a plugin with exactly this
- name. The value of \l required will be ignored.
-*/
-void QDeclarativeGeoServiceProvider::setName(const QString &name)
-{
- if (name_ == name)
- return;
-
- name_ = name;
- delete sharedProvider_;
- sharedProvider_ = new QGeoServiceProvider(name_, parameterMap());
- sharedProvider_->setLocale(locales_.at(0));
- sharedProvider_->setAllowExperimental(experimental_);
-
- emit nameChanged(name_);
- emit attached();
-}
-
-QString QDeclarativeGeoServiceProvider::name() const
-{
- return name_;
-}
-
-
-/*!
- \qmlproperty stringlist Plugin::availableServiceProviders
-
- This property holds a list of all available service plugins' names. This
- can be used to manually enumerate the available plugins if the
- control provided by \l name and \l required is not sufficient for your
- needs.
-*/
-QStringList QDeclarativeGeoServiceProvider::availableServiceProviders()
-{
- return QGeoServiceProvider::availableServiceProviders();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoServiceProvider::componentComplete()
-{
- complete_ = true;
- if (!name_.isEmpty()) {
- return;
- }
-
- if (!prefer_.isEmpty()
- || required_->mappingRequirements() != NoMappingFeatures
- || required_->routingRequirements() != NoRoutingFeatures
- || required_->geocodingRequirements() != NoGeocodingFeatures
- || required_->placesRequirements() != NoPlacesFeatures) {
-
- QStringList providers = QGeoServiceProvider::availableServiceProviders();
-
- /* first check any preferred plugins */
- foreach (const QString &name, prefer_) {
- if (providers.contains(name)) {
- // so we don't try it again later
- providers.removeAll(name);
-
- QGeoServiceProvider sp(name, parameterMap(), experimental_);
- if (required_->matches(&sp)) {
- setName(name);
- return;
- }
- }
- }
-
- /* then try the rest */
- foreach (const QString &name, providers) {
- QGeoServiceProvider sp(name, parameterMap(), experimental_);
- if (required_->matches(&sp)) {
- setName(name);
- return;
- }
- }
-
- qmlWarning(this) << "Could not find a plugin with the required features to attach to";
- }
-}
-
-/*!
- \qmlmethod bool Plugin::supportsGeocoding(GeocodingFeatures features)
-
- This method returns a boolean indicating whether the specified set of \a features are supported
- by the geo service provider plugin. True is returned if all specified \a features are
- supported; otherwise false is returned.
-
- The \a features parameter can be any flag combination of:
- \table
- \header
- \li Feature
- \li Description
- \row
- \li Plugin.NoGeocodingFeatures
- \li No geocoding features are supported.
- \row
- \li Plugin.OnlineGeocodingFeature
- \li Online geocoding is supported.
- \row
- \li Plugin.OfflineGeocodingFeature
- \li Offline geocoding is supported.
- \row
- \li Plugin.ReverseGeocodingFeature
- \li Reverse geocoding is supported.
- \row
- \li Plugin.LocalizedGeocodingFeature
- \li Supports returning geocoding results with localized addresses.
- \row
- \li Plugin.AnyGeocodingFeatures
- \li Matches a geo service provider that provides any geocoding features.
- \endtable
-*/
-bool QDeclarativeGeoServiceProvider::supportsGeocoding(const GeocodingFeatures &feature) const
-{
- QGeoServiceProvider *sp = sharedGeoServiceProvider();
- QGeoServiceProvider::GeocodingFeatures f =
- static_cast<QGeoServiceProvider::GeocodingFeature>(int(feature));
- if (f == QGeoServiceProvider::AnyGeocodingFeatures)
- return (sp && (sp->geocodingFeatures() != QGeoServiceProvider::NoGeocodingFeatures));
- else
- return (sp && (sp->geocodingFeatures() & f) == f);
-}
-
-/*!
- \qmlmethod bool Plugin::supportsMapping(MappingFeatures features)
-
- This method returns a boolean indicating whether the specified set of \a features are supported
- by the geo service provider plugin. True is returned if all specified \a features are
- supported; otherwise false is returned.
-
- The \a features parameter can be any flag combination of:
- \table
- \header
- \li Feature
- \li Description
- \row
- \li Plugin.NoMappingFeatures
- \li No mapping features are supported.
- \row
- \li Plugin.OnlineMappingFeature
- \li Online mapping is supported.
- \row
- \li Plugin.OfflineMappingFeature
- \li Offline mapping is supported.
- \row
- \li Plugin.LocalizedMappingFeature
- \li Supports returning localized map data.
- \row
- \li Plugin.AnyMappingFeatures
- \li Matches a geo service provider that provides any mapping features.
- \endtable
-*/
-bool QDeclarativeGeoServiceProvider::supportsMapping(const MappingFeatures &feature) const
-{
- QGeoServiceProvider *sp = sharedGeoServiceProvider();
- QGeoServiceProvider::MappingFeatures f =
- static_cast<QGeoServiceProvider::MappingFeature>(int(feature));
- if (f == QGeoServiceProvider::AnyMappingFeatures)
- return (sp && (sp->mappingFeatures() != QGeoServiceProvider::NoMappingFeatures));
- else
- return (sp && (sp->mappingFeatures() & f) == f);
-}
-
-/*!
- \qmlmethod bool Plugin::supportsRouting(RoutingFeatures features)
-
- This method returns a boolean indicating whether the specified set of \a features are supported
- by the geo service provider plugin. True is returned if all specified \a features are
- supported; otherwise false is returned.
-
- The \a features parameter can be any flag combination of:
- \table
- \header
- \li Feature
- \li Description
- \row
- \li Plugin.NoRoutingFeatures
- \li No routing features are supported.
- \row
- \li Plugin.OnlineRoutingFeature
- \li Online routing is supported.
- \row
- \li Plugin.OfflineRoutingFeature
- \li Offline routing is supported.
- \row
- \li Plugin.LocalizedRoutingFeature
- \li Supports returning routes with localized addresses and instructions.
- \row
- \li Plugin.RouteUpdatesFeature
- \li Updating an existing route based on the current position is supported.
- \row
- \li Plugin.AlternativeRoutesFeature
- \li Supports returning alternative routes.
- \row
- \li Plugin.ExcludeAreasRoutingFeature
- \li Supports specifying a areas which the returned route must not cross.
- \row
- \li Plugin.AnyRoutingFeatures
- \li Matches a geo service provider that provides any routing features.
- \endtable
-*/
-bool QDeclarativeGeoServiceProvider::supportsRouting(const RoutingFeatures &feature) const
-{
- QGeoServiceProvider *sp = sharedGeoServiceProvider();
- QGeoServiceProvider::RoutingFeatures f =
- static_cast<QGeoServiceProvider::RoutingFeature>(int(feature));
- if (f == QGeoServiceProvider::AnyRoutingFeatures)
- return (sp && (sp->routingFeatures() != QGeoServiceProvider::NoRoutingFeatures));
- else
- return (sp && (sp->routingFeatures() & f) == f);
-}
-
-/*!
- \qmlmethod bool Plugin::supportsPlaces(PlacesFeatures features)
-
- This method returns a boolean indicating whether the specified set of \a features are supported
- by the geo service provider plugin. True is returned if all specified \a features are
- supported; otherwise false is returned.
-
- The \a features parameter can be any flag combination of:
- \table
- \header
- \li Feature
- \li Description
- \row
- \li Plugin.NoPlacesFeatures
- \li No places features are supported.
- \row
- \li Plugin.OnlinePlacesFeature
- \li Online places is supported.
- \row
- \li Plugin.OfflinePlacesFeature
- \li Offline places is supported.
- \row
- \li Plugin.SavePlaceFeature
- \li Saving categories is supported.
- \row
- \li Plugin.RemovePlaceFeature
- \li Removing or deleting places is supported.
- \row
- \li Plugin.PlaceRecommendationsFeature
- \li Searching for recommended places similar to another place is supported.
- \row
- \li Plugin.SearchSuggestionsFeature
- \li Search suggestions is supported.
- \row
- \li Plugin.LocalizedPlacesFeature
- \li Supports returning localized place data.
- \row
- \li Plugin.NotificationsFeature
- \li Notifications of place and category changes is supported.
- \row
- \li Plugin.PlaceMatchingFeature
- \li Supports matching places from two different geo service providers.
- \row
- \li Plugin.AnyPlacesFeatures
- \li Matches a geo service provider that provides any places features.
- \endtable
-*/
-bool QDeclarativeGeoServiceProvider::supportsPlaces(const PlacesFeatures &features) const
-{
- QGeoServiceProvider *sp = sharedGeoServiceProvider();
- QGeoServiceProvider::PlacesFeatures f =
- static_cast<QGeoServiceProvider::PlacesFeature>(int(features));
- if (f == QGeoServiceProvider::AnyPlacesFeatures)
- return (sp && (sp->placesFeatures() != QGeoServiceProvider::NoPlacesFeatures));
- else
- return (sp && (sp->placesFeatures() & f) == f);
-}
-
-/*!
- \qmlproperty enumeration Plugin::required
-
- This property contains the set of features that will be required by the
- Plugin object when choosing which service plugin to attach to. If the
- \l name property is set, this has no effect.
-
- Any of the following values or a bitwise combination of multiple values
- may be set:
-
- \list
- \li Plugin.NoFeatures
- \li Plugin.GeocodingFeature
- \li Plugin.ReverseGeocodingFeature
- \li Plugin.RoutingFeature
- \li Plugin.MappingFeature
- \li Plugin.AnyPlacesFeature
- \endlist
-*/
-QDeclarativeGeoServiceProviderRequirements *QDeclarativeGeoServiceProvider::requirements() const
-{
- return required_;
-}
-
-/*!
- \qmlproperty stringlist Plugin::preferred
-
- This property contains an ordered list of preferred plugin names, which
- will be checked for the required features set in \l{Plugin::required}{required}
- before any other available plugins are checked.
-*/
-QStringList QDeclarativeGeoServiceProvider::preferred() const
-{
- return prefer_;
-}
-
-void QDeclarativeGeoServiceProvider::setPreferred(const QStringList &val)
-{
- prefer_ = val;
- emit preferredChanged(prefer_);
-}
-
-/*!
- \qmlproperty bool Plugin::isAttached
-
- This property indicates if the Plugin is attached to another Plugin.
-*/
-bool QDeclarativeGeoServiceProvider::isAttached() const
-{
- return (sharedProvider_ != 0);
-}
-
-/*!
- \qmlproperty bool Plugin::allowExperimental
-
- This property indicates if experimental plugins can be used.
-*/
-bool QDeclarativeGeoServiceProvider::allowExperimental() const
-{
- return experimental_;
-}
-
-void QDeclarativeGeoServiceProvider::setAllowExperimental(bool allow)
-{
- if (experimental_ == allow)
- return;
-
- experimental_ = allow;
- if (sharedProvider_)
- sharedProvider_->setAllowExperimental(allow);
-
- emit allowExperimentalChanged(allow);
-}
-
-/*!
- \internal
-*/
-QGeoServiceProvider *QDeclarativeGeoServiceProvider::sharedGeoServiceProvider() const
-{
- return sharedProvider_;
-}
-
-/*!
- \qmlproperty stringlist Plugin::locales
-
- This property contains an ordered list of preferred plugin locales. If the first locale cannot be accommodated, then
- the backend falls back to using the second, and so on. By default the locales property contains the system locale.
-
- The locales are specified as strings which have the format
- "language[_script][_country]" or "C", where:
-
- \list
- \li language is a lowercase, two-letter, ISO 639 language code,
- \li script is a titlecase, four-letter, ISO 15924 script code,
- \li country is an uppercase, two- or three-letter, ISO 3166 country code (also "419" as defined by United Nations),
- \li the "C" locale is identical in behavior to English/UnitedStates as per QLocale
- \endlist
-
- If the first specified locale cannot be accommodated, the \l {Plugin} falls back to the next and so forth.
- Some \l {Plugin} backends may not support a set of locales which are rigidly defined. An arbitrary
- example is that some \l {Place}'s in France could have French and English localizations, while
- certain areas in America may only have the English localization available. In the above scenario,
- the set of supported locales is context dependent on the search location.
-
- If the \l {Plugin} cannot accommodate any of the preferred locales, the manager falls
- back to using a supported language that is backend specific.
-
- For \l {Plugin}'s that do not support locales, the locales list is always empty.
-
- The following code demonstrates how to set a single and multiple locales:
- \snippet declarative/plugin.qml Plugin locale
-*/
-QStringList QDeclarativeGeoServiceProvider::locales() const
-{
- return locales_;
-}
-
-void QDeclarativeGeoServiceProvider::setLocales(const QStringList &locales)
-{
- if (locales_ == locales)
- return;
-
- locales_ = locales;
-
- if (locales_.isEmpty())
- locales_.append(QLocale().name());
-
- if (sharedProvider_)
- sharedProvider_->setLocale(locales_.at(0));
-
- emit localesChanged();
-}
-
-/*!
- \qmlproperty list<PluginParameter> Plugin::parameters
- \default
-
- This property holds the list of plugin parameters.
-*/
-QQmlListProperty<QDeclarativeGeoServiceProviderParameter> QDeclarativeGeoServiceProvider::parameters()
-{
- return QQmlListProperty<QDeclarativeGeoServiceProviderParameter>(this,
- 0,
- parameter_append,
- parameter_count,
- parameter_at,
- parameter_clear);
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoServiceProvider::parameter_append(QQmlListProperty<QDeclarativeGeoServiceProviderParameter> *prop, QDeclarativeGeoServiceProviderParameter *parameter)
-{
- QDeclarativeGeoServiceProvider *p = static_cast<QDeclarativeGeoServiceProvider *>(prop->object);
- p->parameters_.append(parameter);
- if (p->sharedProvider_)
- p->sharedProvider_->setParameters(p->parameterMap());
-}
-
-/*!
- \internal
-*/
-int QDeclarativeGeoServiceProvider::parameter_count(QQmlListProperty<QDeclarativeGeoServiceProviderParameter> *prop)
-{
- return static_cast<QDeclarativeGeoServiceProvider *>(prop->object)->parameters_.count();
-}
-
-/*!
- \internal
-*/
-QDeclarativeGeoServiceProviderParameter *QDeclarativeGeoServiceProvider::parameter_at(QQmlListProperty<QDeclarativeGeoServiceProviderParameter> *prop, int index)
-{
- return static_cast<QDeclarativeGeoServiceProvider *>(prop->object)->parameters_[index];
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoServiceProvider::parameter_clear(QQmlListProperty<QDeclarativeGeoServiceProviderParameter> *prop)
-{
- QDeclarativeGeoServiceProvider *p = static_cast<QDeclarativeGeoServiceProvider *>(prop->object);
- p->parameters_.clear();
- if (p->sharedProvider_)
- p->sharedProvider_->setParameters(p->parameterMap());
-}
-
-/*!
- \internal
-*/
-QVariantMap QDeclarativeGeoServiceProvider::parameterMap() const
-{
- QVariantMap map;
-
- for (int i = 0; i < parameters_.size(); ++i) {
- QDeclarativeGeoServiceProviderParameter *parameter = parameters_.at(i);
- map.insert(parameter->name(), parameter->value());
- }
-
- return map;
-}
-
-/*******************************************************************************
-*******************************************************************************/
-
-QDeclarativeGeoServiceProviderRequirements::QDeclarativeGeoServiceProviderRequirements(QObject *parent)
- : QObject(parent),
- mapping_(QDeclarativeGeoServiceProvider::NoMappingFeatures),
- routing_(QDeclarativeGeoServiceProvider::NoRoutingFeatures),
- geocoding_(QDeclarativeGeoServiceProvider::NoGeocodingFeatures),
- places_(QDeclarativeGeoServiceProvider::NoPlacesFeatures)
-{
-}
-
-QDeclarativeGeoServiceProviderRequirements::~QDeclarativeGeoServiceProviderRequirements()
-{
-}
-
-/*!
- \internal
-*/
-QDeclarativeGeoServiceProvider::MappingFeatures QDeclarativeGeoServiceProviderRequirements::mappingRequirements() const
-{
- return mapping_;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoServiceProviderRequirements::setMappingRequirements(const QDeclarativeGeoServiceProvider::MappingFeatures &features)
-{
- if (mapping_ == features)
- return;
-
- mapping_ = features;
- emit mappingRequirementsChanged(mapping_);
- emit requirementsChanged();
-}
-
-/*!
- \internal
-*/
-QDeclarativeGeoServiceProvider::RoutingFeatures QDeclarativeGeoServiceProviderRequirements::routingRequirements() const
-{
- return routing_;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoServiceProviderRequirements::setRoutingRequirements(const QDeclarativeGeoServiceProvider::RoutingFeatures &features)
-{
- if (routing_ == features)
- return;
-
- routing_ = features;
- emit routingRequirementsChanged(routing_);
- emit requirementsChanged();
-}
-
-/*!
- \internal
-*/
-QDeclarativeGeoServiceProvider::GeocodingFeatures QDeclarativeGeoServiceProviderRequirements::geocodingRequirements() const
-{
- return geocoding_;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoServiceProviderRequirements::setGeocodingRequirements(const QDeclarativeGeoServiceProvider::GeocodingFeatures &features)
-{
- if (geocoding_ == features)
- return;
-
- geocoding_ = features;
- emit geocodingRequirementsChanged(geocoding_);
- emit requirementsChanged();
-}
-
-/*!
- \internal
-
- */
-QDeclarativeGeoServiceProvider::PlacesFeatures QDeclarativeGeoServiceProviderRequirements::placesRequirements() const
-{
- return places_;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeGeoServiceProviderRequirements::setPlacesRequirements(const QDeclarativeGeoServiceProvider::PlacesFeatures &features)
-{
- if (places_ == features)
- return;
-
- places_ = features;
- emit placesRequirementsChanged(places_);
- emit requirementsChanged();
-}
-
-/*!
- \internal
-*/
-bool QDeclarativeGeoServiceProviderRequirements::matches(const QGeoServiceProvider *provider) const
-{
- QGeoServiceProvider::MappingFeatures mapping =
- static_cast<QGeoServiceProvider::MappingFeatures>(int(mapping_));
-
- // extra curlies here to avoid "dangling" else, which could belong to either if
- // same goes for all the rest of these blocks
- if (mapping == QGeoServiceProvider::AnyMappingFeatures) {
- if (provider->mappingFeatures() == QGeoServiceProvider::NoMappingFeatures)
- return false;
- } else {
- if ((provider->mappingFeatures() & mapping) != mapping)
- return false;
- }
-
- QGeoServiceProvider::RoutingFeatures routing =
- static_cast<QGeoServiceProvider::RoutingFeatures>(int(routing_));
-
- if (routing == QGeoServiceProvider::AnyRoutingFeatures) {
- if (provider->routingFeatures() == QGeoServiceProvider::NoRoutingFeatures)
- return false;
- } else {
- if ((provider->routingFeatures() & routing) != routing)
- return false;
- }
-
- QGeoServiceProvider::GeocodingFeatures geocoding =
- static_cast<QGeoServiceProvider::GeocodingFeatures>(int(geocoding_));
-
- if (geocoding == QGeoServiceProvider::AnyGeocodingFeatures) {
- if (provider->geocodingFeatures() == QGeoServiceProvider::NoGeocodingFeatures)
- return false;
- } else {
- if ((provider->geocodingFeatures() & geocoding) != geocoding)
- return false;
- }
-
- QGeoServiceProvider::PlacesFeatures places =
- static_cast<QGeoServiceProvider::PlacesFeatures>(int(places_));
-
- if (places == QGeoServiceProvider::AnyPlacesFeatures) {
- if (provider->placesFeatures() == QGeoServiceProvider::NoPlacesFeatures)
- return false;
- } else {
- if ((provider->placesFeatures() & places) != places)
- return false;
- }
-
- return true;
-}
-
-/*******************************************************************************
-*******************************************************************************/
-
-/*!
- \qmltype PluginParameter
- \instantiates QDeclarativeGeoServiceProviderParameter
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-common
- \since Qt Location 5.5
-
- \brief The PluginParameter type describes a parameter to a \l Plugin.
-
- The PluginParameter object is used to provide a parameter of some kind
- to a Plugin. Typically these parameters contain details like an application
- token for access to a service, or a proxy server to use for network access.
-
- To set such a parameter, declare a PluginParameter inside a \l Plugin
- object, and give it \l{name} and \l{value} properties. A list of valid
- parameter names for each plugin is available from the
- \l {Qt Location#Plugin References and Parameters}{plugin reference pages}.
-
- \section2 Example Usage
-
- The following example shows an instantiation of the \l {Qt Location HERE Plugin}{HERE} plugin
- with a mapping API \e app_id and \e token pair specific to the application.
-
- \code
- Plugin {
- name: "here"
- PluginParameter { name: "here.app_id"; value: "EXAMPLE_API_ID" }
- PluginParameter { name: "here.token"; value: "EXAMPLE_TOKEN_123" }
- }
- \endcode
-*/
-
-QDeclarativeGeoServiceProviderParameter::QDeclarativeGeoServiceProviderParameter(QObject *parent)
- : QObject(parent) {}
-
-QDeclarativeGeoServiceProviderParameter::~QDeclarativeGeoServiceProviderParameter() {}
-
-/*!
- \qmlproperty string PluginParameter::name
-
- This property holds the name of the plugin parameter as a single formatted string.
-*/
-void QDeclarativeGeoServiceProviderParameter::setName(const QString &name)
-{
- if (name_ == name)
- return;
-
- name_ = name;
-
- emit nameChanged(name_);
-}
-
-QString QDeclarativeGeoServiceProviderParameter::name() const
-{
- return name_;
-}
-
-/*!
- \qmlproperty QVariant PluginParameter::value
-
- This property holds the value of the plugin parameter which support different types of values (variant).
-*/
-void QDeclarativeGeoServiceProviderParameter::setValue(const QVariant &value)
-{
- if (value_ == value)
- return;
-
- value_ = value;
-
- emit valueChanged(value_);
-}
-
-QVariant QDeclarativeGeoServiceProviderParameter::value() const
-{
- return value_;
-}
-
-/*******************************************************************************
-*******************************************************************************/
-
-#include "moc_qdeclarativegeoserviceprovider_p.cpp"
-
-QT_END_NAMESPACE
-
diff --git a/src/imports/location/qdeclarativegeoserviceprovider_p.h b/src/imports/location/qdeclarativegeoserviceprovider_p.h
deleted file mode 100644
index f7a2ee83..00000000
--- a/src/imports/location/qdeclarativegeoserviceprovider_p.h
+++ /dev/null
@@ -1,282 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEQGEOSERVICEPROVIDER_H
-#define QDECLARATIVEQGEOSERVICEPROVIDER_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 <QtCore/QMap>
-#include <QtCore/QString>
-#include <QtCore/QStringList>
-#include <QtCore/QVariant>
-#include <QtQml/qqml.h>
-#include <QtQml/QQmlParserStatus>
-#include <QtQml/QQmlListProperty>
-#include <QtLocation/QGeoServiceProvider>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoServiceProviderParameter : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
- Q_PROPERTY(QVariant value READ value WRITE setValue NOTIFY valueChanged)
-
-public:
- explicit QDeclarativeGeoServiceProviderParameter(QObject *parent = 0);
- ~QDeclarativeGeoServiceProviderParameter();
-
- void setName(const QString &name);
- QString name() const;
-
- void setValue(const QVariant &value);
- QVariant value() const;
-
-Q_SIGNALS:
- void nameChanged(const QString &name);
- void valueChanged(const QVariant &value);
-
-private:
- QString name_;
- QVariant value_;
-};
-
-class QDeclarativeGeoServiceProviderRequirements;
-
-class QDeclarativeGeoServiceProvider : public QObject, public QQmlParserStatus
-{
- Q_OBJECT
- Q_ENUMS(RoutingFeature)
- Q_ENUMS(GeocodingFeature)
- Q_ENUMS(MappingFeature)
- Q_ENUMS(PlacesFeature)
-
- Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
- Q_PROPERTY(QStringList availableServiceProviders READ availableServiceProviders CONSTANT)
- Q_PROPERTY(QQmlListProperty<QDeclarativeGeoServiceProviderParameter> parameters READ parameters)
- Q_PROPERTY(QDeclarativeGeoServiceProviderRequirements *required READ requirements)
- Q_PROPERTY(QStringList locales READ locales WRITE setLocales NOTIFY localesChanged)
- Q_PROPERTY(QStringList preferred READ preferred WRITE setPreferred NOTIFY preferredChanged)
- Q_PROPERTY(bool allowExperimental READ allowExperimental WRITE setAllowExperimental NOTIFY allowExperimentalChanged)
- Q_PROPERTY(bool isAttached READ isAttached NOTIFY attached)
-
- Q_CLASSINFO("DefaultProperty", "parameters")
- Q_INTERFACES(QQmlParserStatus)
-
-public:
- explicit QDeclarativeGeoServiceProvider(QObject *parent = 0);
- ~QDeclarativeGeoServiceProvider();
-
- enum RoutingFeature {
- NoRoutingFeatures = QGeoServiceProvider::NoRoutingFeatures,
- OnlineRoutingFeature = QGeoServiceProvider::OnlineRoutingFeature,
- OfflineRoutingFeature = QGeoServiceProvider::OfflineRoutingFeature,
- LocalizedRoutingFeature = QGeoServiceProvider::LocalizedRoutingFeature,
- RouteUpdatesFeature = QGeoServiceProvider::RouteUpdatesFeature,
- AlternativeRoutesFeature = QGeoServiceProvider::AlternativeRoutesFeature,
- ExcludeAreasRoutingFeature = QGeoServiceProvider::ExcludeAreasRoutingFeature,
- AnyRoutingFeatures = QGeoServiceProvider::AnyRoutingFeatures
- };
-
- enum GeocodingFeature {
- NoGeocodingFeatures = QGeoServiceProvider::NoGeocodingFeatures,
- OnlineGeocodingFeature = QGeoServiceProvider::OnlineGeocodingFeature,
- OfflineGeocodingFeature = QGeoServiceProvider::OfflineGeocodingFeature,
- ReverseGeocodingFeature = QGeoServiceProvider::ReverseGeocodingFeature,
- LocalizedGeocodingFeature = QGeoServiceProvider::LocalizedGeocodingFeature,
- AnyGeocodingFeatures = QGeoServiceProvider::AnyGeocodingFeatures
- };
-
- enum MappingFeature {
- NoMappingFeatures = QGeoServiceProvider::NoMappingFeatures,
- OnlineMappingFeature = QGeoServiceProvider::OnlineMappingFeature,
- OfflineMappingFeature = QGeoServiceProvider::OfflineMappingFeature,
- LocalizedMappingFeature = QGeoServiceProvider::LocalizedMappingFeature,
- AnyMappingFeatures = QGeoServiceProvider::AnyMappingFeatures
- };
-
- enum PlacesFeature {
- NoPlacesFeatures = QGeoServiceProvider::NoPlacesFeatures,
- OnlinePlacesFeature = QGeoServiceProvider::OnlinePlacesFeature,
- OfflinePlacesFeature = QGeoServiceProvider::OfflinePlacesFeature,
- SavePlaceFeature = QGeoServiceProvider::SavePlaceFeature,
- RemovePlaceFeature = QGeoServiceProvider::RemovePlaceFeature,
- SaveCategoryFeature = QGeoServiceProvider::SaveCategoryFeature,
- RemoveCategoryFeature = QGeoServiceProvider::RemoveCategoryFeature,
- PlaceRecommendationsFeature = QGeoServiceProvider::PlaceRecommendationsFeature,
- SearchSuggestionsFeature = QGeoServiceProvider::SearchSuggestionsFeature,
- LocalizedPlacesFeature = QGeoServiceProvider::LocalizedPlacesFeature,
- NotificationsFeature = QGeoServiceProvider::NotificationsFeature,
- PlaceMatchingFeature = QGeoServiceProvider::PlaceMatchingFeature,
- AnyPlacesFeatures = QGeoServiceProvider::AnyPlacesFeatures
- };
-
- Q_DECLARE_FLAGS(RoutingFeatures, RoutingFeature)
- Q_FLAGS(RoutingFeatures)
-
- Q_DECLARE_FLAGS(GeocodingFeatures, GeocodingFeature)
- Q_FLAGS(GeocodingFeatures)
-
- Q_DECLARE_FLAGS(MappingFeatures, MappingFeature)
- Q_FLAGS(MappingFeatures)
-
- Q_DECLARE_FLAGS(PlacesFeatures, PlacesFeature)
- Q_FLAGS(PlacesFeatures)
-
- // From QQmlParserStatus
- virtual void classBegin() {}
- virtual void componentComplete();
-
- void setName(const QString &name);
- QString name() const;
-
- QQmlListProperty<QDeclarativeGeoServiceProviderParameter> parameters();
- QVariantMap parameterMap() const;
-
- QStringList availableServiceProviders();
-
- QDeclarativeGeoServiceProviderRequirements *requirements() const;
-
- QStringList preferred() const;
- void setPreferred(const QStringList &val);
-
- QGeoServiceProvider *sharedGeoServiceProvider() const;
-
- Q_INVOKABLE bool supportsRouting(const RoutingFeatures &feature = AnyRoutingFeatures) const;
- Q_INVOKABLE bool supportsGeocoding(const GeocodingFeatures &feature = AnyGeocodingFeatures) const;
- Q_INVOKABLE bool supportsMapping(const MappingFeatures &feature = AnyMappingFeatures) const;
- Q_INVOKABLE bool supportsPlaces(const PlacesFeatures &feature = AnyPlacesFeatures) const;
-
- QStringList locales() const;
- void setLocales(const QStringList &locales);
-
- bool isAttached() const;
-
- void setAllowExperimental(bool allow);
- bool allowExperimental() const;
-
-Q_SIGNALS:
- void nameChanged(const QString &name);
- void localesChanged();
- void attached();
- void preferredChanged(const QStringList &preferences);
- void allowExperimentalChanged(bool allow);
-
-private:
- static void parameter_append(QQmlListProperty<QDeclarativeGeoServiceProviderParameter> *prop, QDeclarativeGeoServiceProviderParameter *mapObject);
- static int parameter_count(QQmlListProperty<QDeclarativeGeoServiceProviderParameter> *prop);
- static QDeclarativeGeoServiceProviderParameter *parameter_at(QQmlListProperty<QDeclarativeGeoServiceProviderParameter> *prop, int index);
- static void parameter_clear(QQmlListProperty<QDeclarativeGeoServiceProviderParameter> *prop);
-
- QGeoServiceProvider *sharedProvider_;
- QString name_;
- QList<QDeclarativeGeoServiceProviderParameter *> parameters_;
- QDeclarativeGeoServiceProviderRequirements *required_;
- bool complete_;
- bool experimental_;
- QStringList locales_;
- QStringList prefer_;
- Q_DISABLE_COPY(QDeclarativeGeoServiceProvider)
-};
-
-class QDeclarativeGeoServiceProviderRequirements : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QDeclarativeGeoServiceProvider::MappingFeatures mapping
- READ mappingRequirements WRITE setMappingRequirements
- NOTIFY mappingRequirementsChanged)
- Q_PROPERTY(QDeclarativeGeoServiceProvider::RoutingFeatures routing
- READ routingRequirements WRITE setRoutingRequirements
- NOTIFY routingRequirementsChanged)
- Q_PROPERTY(QDeclarativeGeoServiceProvider::GeocodingFeatures geocoding
- READ geocodingRequirements WRITE setGeocodingRequirements
- NOTIFY geocodingRequirementsChanged)
- Q_PROPERTY(QDeclarativeGeoServiceProvider::PlacesFeatures places
- READ placesRequirements WRITE setPlacesRequirements
- NOTIFY placesRequirementsChanged)
-
-public:
- explicit QDeclarativeGeoServiceProviderRequirements(QObject *parent = 0);
- ~QDeclarativeGeoServiceProviderRequirements();
-
- QDeclarativeGeoServiceProvider::MappingFeatures mappingRequirements() const;
- void setMappingRequirements(const QDeclarativeGeoServiceProvider::MappingFeatures &features);
-
- QDeclarativeGeoServiceProvider::RoutingFeatures routingRequirements() const;
- void setRoutingRequirements(const QDeclarativeGeoServiceProvider::RoutingFeatures &features);
-
- QDeclarativeGeoServiceProvider::GeocodingFeatures geocodingRequirements() const;
- void setGeocodingRequirements(const QDeclarativeGeoServiceProvider::GeocodingFeatures &features);
-
- QDeclarativeGeoServiceProvider::PlacesFeatures placesRequirements() const;
- void setPlacesRequirements(const QDeclarativeGeoServiceProvider::PlacesFeatures &features);
-
- Q_INVOKABLE bool matches(const QGeoServiceProvider *provider) const;
-
-Q_SIGNALS:
- void mappingRequirementsChanged(const QDeclarativeGeoServiceProvider::MappingFeatures &features);
- void routingRequirementsChanged(const QDeclarativeGeoServiceProvider::RoutingFeatures &features);
- void geocodingRequirementsChanged(const QDeclarativeGeoServiceProvider::GeocodingFeatures &features);
- void placesRequirementsChanged(const QDeclarativeGeoServiceProvider::PlacesFeatures &features);
-
- void requirementsChanged();
-
-private:
- QDeclarativeGeoServiceProvider::MappingFeatures mapping_;
- QDeclarativeGeoServiceProvider::RoutingFeatures routing_;
- QDeclarativeGeoServiceProvider::GeocodingFeatures geocoding_;
- QDeclarativeGeoServiceProvider::PlacesFeatures places_;
-
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeGeoServiceProviderParameter)
-QML_DECLARE_TYPE(QDeclarativeGeoServiceProviderRequirements)
-QML_DECLARE_TYPE(QDeclarativeGeoServiceProvider)
-
-#endif
diff --git a/src/imports/location/qdeclarativepolygonmapitem.cpp b/src/imports/location/qdeclarativepolygonmapitem.cpp
deleted file mode 100644
index 0e11db79..00000000
--- a/src/imports/location/qdeclarativepolygonmapitem.cpp
+++ /dev/null
@@ -1,718 +0,0 @@
-/****************************************************************************
- **
- ** Copyright (C) 2015 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 "qdeclarativepolygonmapitem_p.h"
-#include "qgeocameracapabilities_p.h"
-#include "qlocationutils_p.h"
-#include "error_messages.h"
-#include "locationvaluetypehelper_p.h"
-
-#include <QtCore/QScopedValueRollback>
-#include <QtGui/private/qtriangulator_p.h>
-#include <QtQml/QQmlInfo>
-#include <QtQml/private/qqmlengine_p.h>
-#include <QPainter>
-#include <QPainterPath>
-#include <qnumeric.h>
-
-#include "qdoublevector2d_p.h"
-
-/* poly2tri triangulator includes */
-#include "../../3rdparty/clip2tri/clip2tri.h"
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype MapPolygon
- \instantiates QDeclarativePolygonMapItem
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-maps
- \since Qt Location 5.5
-
- \brief The MapPolygon type displays a polygon on a Map
-
- The MapPolygon type displays a polygon on a Map, specified in terms of an ordered list of
- \l {QtPositioning::coordinate}{coordinates}. For best appearance and results, polygons should be
- simple (not self-intersecting).
-
- The \l {QtPositioning::coordinate}{coordinates} on the path cannot be directly changed after
- being added to the Polygon. Instead, copy the \l path into a var, modify the copy and reassign
- the copy back to the \l path.
-
- \code
- var path = mapPolygon.path;
- path[0].latitude = 5;
- mapPolygon.path = path;
- \endcode
-
- Coordinates can also be added and removed at any time using the \l addCoordinate and
- \l removeCoordinate methods.
-
- For drawing rectangles with "straight" edges (same latitude across one
- edge, same latitude across the other), the \l MapRectangle type provides
- a simpler, two-point API.
-
- By default, the polygon is displayed as a 1 pixel black border with no
- fill. To change its appearance, use the \l color, \l border.color and
- \l border.width properties.
-
- \note Since MapPolygons are geographic items, dragging a MapPolygon
- (through the use of \l MouseArea) causes its vertices to be
- recalculated in the geographic coordinate space. The edges retain the
- same geographic lengths (latitude and longitude differences between the
- vertices), but they remain straight. Apparent stretching of the item occurs
- when dragged to a different latitude.
-
- \section2 Performance
-
- MapPolygons have a rendering cost that is O(n) with respect to the number
- of vertices. This means that the per frame cost of having a Polygon on the
- Map grows in direct proportion to the number of points on the Polygon. There
- is an additional triangulation cost (approximately O(n log n)) which is
- currently paid with each frame, but in future may be paid only upon adding
- or removing points.
-
- Like the other map objects, MapPolygon is normally drawn without a smooth
- appearance. Setting the \l {Item::opacity}{opacity} property will force the object to
- be blended, which decreases performance considerably depending on the hardware in use.
-
- \section2 Example Usage
-
- The following snippet shows a MapPolygon being used to display a triangle,
- with three vertices near Brisbane, Australia. The triangle is filled in
- green, with a 1 pixel black border.
-
- \code
- Map {
- MapPolygon {
- color: 'green'
- path: [
- { latitude: -27, longitude: 153.0 },
- { latitude: -27, longitude: 154.1 },
- { latitude: -28, longitude: 153.5 }
- ]
- }
- }
- \endcode
-
- \image api-mappolygon.png
-*/
-
-struct Vertex
-{
- QVector2D position;
-};
-
-QGeoMapPolygonGeometry::QGeoMapPolygonGeometry()
-: assumeSimple_(false)
-{
-}
-
-/*!
- \internal
-*/
-void QGeoMapPolygonGeometry::updateSourcePoints(const QGeoMap &map,
- const QList<QGeoCoordinate> &path)
-{
- if (!sourceDirty_)
- return;
-
- // build the actual path
- QDoubleVector2D origin;
- QDoubleVector2D lastPoint;
- srcPath_ = QPainterPath();
-
- double unwrapBelowX = 0;
- if (preserveGeometry_ )
- unwrapBelowX = map.geoProjection().coordinateToItemPosition(geoLeftBound_, false).x();
-
- for (int i = 0; i < path.size(); ++i) {
- const QGeoCoordinate &coord = path.at(i);
-
- if (!coord.isValid())
- continue;
-
- QDoubleVector2D point = map.geoProjection().coordinateToItemPosition(coord, false);
-
- // We can get NaN if the map isn't set up correctly, or the projection
- // is faulty -- probably best thing to do is abort
- if (!qIsFinite(point.x()) || !qIsFinite(point.y()))
- return;
-
- // unwrap x to preserve geometry if moved to border of map
- if (preserveGeometry_ && point.x() < unwrapBelowX
- && !qFuzzyCompare(point.x(), unwrapBelowX)
- && !qFuzzyCompare(geoLeftBound_.longitude(), coord.longitude()))
- point.setX(unwrapBelowX + geoDistanceToScreenWidth(map, geoLeftBound_, coord));
-
- if (i == 0) {
- origin = point;
- srcOrigin_ = coord;
- srcPath_.moveTo(point.toPointF() - origin.toPointF());
- lastPoint = point;
- } else {
- const QDoubleVector2D diff = (point - lastPoint);
- if (diff.x() * diff.x() + diff.y() * diff.y() >= 3.0) {
- srcPath_.lineTo(point.toPointF() - origin.toPointF());
- lastPoint = point;
- }
- }
- }
-
- srcPath_.closeSubpath();
-
- if (!assumeSimple_)
- srcPath_ = srcPath_.simplified();
-
- sourceBounds_ = srcPath_.boundingRect();
-}
-
-/*!
- \internal
-*/
-void QGeoMapPolygonGeometry::updateScreenPoints(const QGeoMap &map)
-{
- if (!screenDirty_)
- return;
-
- if (map.viewportWidth() == 0 || map.viewportHeight() == 0) {
- clear();
- return;
- }
-
- QDoubleVector2D origin = map.geoProjection().coordinateToItemPosition(srcOrigin_, false);
-
- // Create the viewport rect in the same coordinate system
- // as the actual points
- QRectF viewport(0, 0, map.viewportWidth(), map.viewportHeight());
- viewport.translate(-1 * origin.toPointF());
-
- QPainterPath vpPath;
- vpPath.addRect(viewport);
-
- QPainterPath ppi;
- if (clipToViewport_)
- ppi = srcPath_.intersected(vpPath); // get the clipped version of the path
- else ppi = srcPath_;
-
- clear();
-
- // a polygon requires at least 3 points;
- if (ppi.elementCount() < 3)
- return;
-
- // Intersection between the viewport and a concave polygon can create multiple polygons
- // joined by a line at the viewport border, and poly2tri does not triangulate this very well
- // so use the full src path if the resulting polygon is concave.
- if (clipToViewport_) {
- int changeInX = 0;
- int changeInY = 0;
- QPainterPath::Element e1 = ppi.elementAt(1);
- QPainterPath::Element e = ppi.elementAt(0);
- QVector2D edgeA(e1.x - e.x ,e1.y - e.y);
- for (int i = 2; i <= ppi.elementCount(); ++i) {
- e = ppi.elementAt(i % ppi.elementCount());
- if (e.x == e1.x && e.y == e1.y)
- continue;
- QVector2D edgeB(e.x - e1.x, e.y - e1.y);
- if ((edgeA.x() < 0) == (edgeB.x() >= 0))
- changeInX++;
- if ((edgeA.y() < 0) == (edgeB.y() >= 0))
- changeInY++;
- edgeA = edgeB;
- e1 = e;
- }
- if (changeInX > 2 || changeInY > 2) // polygon is concave
- ppi = srcPath_;
- }
-
- // translate the path into top-left-centric coordinates
- QRectF bb = ppi.boundingRect();
- ppi.translate(-bb.left(), -bb.top());
- firstPointOffset_ = -1 * bb.topLeft();
-
- ppi.closeSubpath();
-
- screenOutline_ = ppi;
-
-#if 1
- std::vector<std::vector<c2t::Point>> clipperPoints;
- clipperPoints.push_back(std::vector<c2t::Point>());
- std::vector<c2t::Point> &curPts = clipperPoints.front();
- curPts.reserve(ppi.elementCount());
- for (int i = 0; i < ppi.elementCount(); ++i) {
- const QPainterPath::Element e = ppi.elementAt(i);
- if (e.isMoveTo() || i == ppi.elementCount() - 1
- || (qAbs(e.x - curPts.front().x) < 0.1
- && qAbs(e.y - curPts.front().y) < 0.1)) {
- if (curPts.size() > 2) {
- c2t::clip2tri *cdt = new c2t::clip2tri();
- std::vector<c2t::Point> outputTriangles;
- cdt->triangulate(clipperPoints, outputTriangles, std::vector<c2t::Point>());
- for (size_t i = 0; i < outputTriangles.size(); ++i) {
- screenVertices_ << QPointF(outputTriangles[i].x, outputTriangles[i].y);
- }
- delete cdt;
- }
- curPts.clear();
- curPts.reserve(ppi.elementCount() - i);
- curPts.push_back( c2t::Point(e.x, e.y));
- } else if (e.isLineTo()) {
- curPts.push_back( c2t::Point(e.x, e.y));
- } else {
- qWarning("Unhandled element type in polygon painterpath");
- }
- }
-#else // Old qTriangulate()-based code.
- QTriangleSet ts = qTriangulate(ppi);
- qreal *vx = ts.vertices.data();
-
- screenIndices_.reserve(ts.indices.size());
- screenVertices_.reserve(ts.vertices.size());
-
- if (ts.indices.type() == QVertexIndexVector::UnsignedInt) {
- const quint32 *ix = reinterpret_cast<const quint32 *>(ts.indices.data());
- for (int i = 0; i < (ts.indices.size()/3*3); ++i)
- screenIndices_ << ix[i];
- } else {
- const quint16 *ix = reinterpret_cast<const quint16 *>(ts.indices.data());
- for (int i = 0; i < (ts.indices.size()/3*3); ++i)
- screenIndices_ << ix[i];
- }
- for (int i = 0; i < (ts.vertices.size()/2*2); i += 2)
- screenVertices_ << QPointF(vx[i], vx[i + 1]);
-#endif
-
- screenBounds_ = ppi.boundingRect();
-}
-
-QDeclarativePolygonMapItem::QDeclarativePolygonMapItem(QQuickItem *parent)
-: QDeclarativeGeoMapItemBase(parent), color_(Qt::transparent), dirtyMaterial_(true),
- updatingGeometry_(false)
-{
- setFlag(ItemHasContents, true);
- QObject::connect(&border_, SIGNAL(colorChanged(QColor)),
- this, SLOT(handleBorderUpdated()));
- QObject::connect(&border_, SIGNAL(widthChanged(qreal)),
- this, SLOT(handleBorderUpdated()));
-}
-
-/*!
- \internal
-*/
-void QDeclarativePolygonMapItem::handleBorderUpdated()
-{
- borderGeometry_.markSourceDirty();
- polishAndUpdate();
-}
-
-QDeclarativePolygonMapItem::~QDeclarativePolygonMapItem()
-{
-}
-
-/*!
- \qmlpropertygroup Location::MapPolygon::border
- \qmlproperty int MapPolygon::border.width
- \qmlproperty color MapPolygon::border.color
-
- This property is part of the border property group. The border property
- group holds the width and color used to draw the border of the polygon.
-
- The width is in pixels and is independent of the zoom level of the map.
-
- The default values correspond to a black border with a width of 1 pixel.
- For no line, use a width of 0 or a transparent color.
-*/
-
-QDeclarativeMapLineProperties *QDeclarativePolygonMapItem::border()
-{
- return &border_;
-}
-
-/*!
- \internal
-*/
-void QDeclarativePolygonMapItem::setMap(QDeclarativeGeoMap *quickMap, QGeoMap *map)
-{
- QDeclarativeGeoMapItemBase::setMap(quickMap,map);
- if (map) {
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- polishAndUpdate();
- }
-}
-
-/*!
- \qmlproperty list<coordinate> MapPolygon::path
-
- This property holds the ordered list of coordinates which
- define the polygon.
-
- \sa addCoordinate, removeCoordinate
-*/
-QJSValue QDeclarativePolygonMapItem::path() const
-{
- QQmlContext *context = QQmlEngine::contextForObject(parent());
- QQmlEngine *engine = context->engine();
- QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(engine);
-
- QV4::Scope scope(v4);
- QV4::Scoped<QV4::ArrayObject> pathArray(scope, v4->newArrayObject(path_.length()));
- for (int i = 0; i < path_.length(); ++i) {
- const QGeoCoordinate &c = path_.at(i);
-
- QV4::ScopedValue cv(scope, v4->fromVariant(QVariant::fromValue(c)));
- pathArray->putIndexed(i, cv);
- }
-
- return QJSValue(v4, pathArray.asReturnedValue());
-}
-
-void QDeclarativePolygonMapItem::setPath(const QJSValue &value)
-{
- if (!value.isArray())
- return;
-
- QList<QGeoCoordinate> pathList;
- quint32 length = value.property(QStringLiteral("length")).toUInt();
- for (quint32 i = 0; i < length; ++i) {
- bool ok;
- QGeoCoordinate c = parseCoordinate(value.property(i), &ok);
-
- if (!ok || !c.isValid()) {
- qmlWarning(this) << "Unsupported path type";
- return;
- }
-
- pathList.append(c);
- }
-
- if (path_ == pathList)
- return;
-
- path_ = pathList;
- geoLeftBound_ = QDeclarativePolylineMapItem::getLeftBound(path_, deltaXs_, minX_);
- geometry_.setPreserveGeometry(true, geoLeftBound_);
- borderGeometry_.setPreserveGeometry(true, geoLeftBound_);
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- polishAndUpdate();
- emit pathChanged();
-}
-
-/*!
- \qmlmethod void MapPolygon::addCoordinate(coordinate)
-
- Adds a coordinate to the path.
-
- \sa removeCoordinate, path
-*/
-
-void QDeclarativePolygonMapItem::addCoordinate(const QGeoCoordinate &coordinate)
-{
- path_.append(coordinate);
- geoLeftBound_ = QDeclarativePolylineMapItem::getLeftBound(path_, deltaXs_, minX_, geoLeftBound_);
- geometry_.setPreserveGeometry(true, geoLeftBound_);
- borderGeometry_.setPreserveGeometry(true, geoLeftBound_);
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- polishAndUpdate();
- emit pathChanged();
-}
-
-/*!
- \qmlmethod void MapPolygon::removeCoordinate(coordinate)
-
- Removes \a coordinate from the path. If there are multiple instances of the
- same coordinate, the one added last is removed.
-
- If \a coordinate is not in the path this method does nothing.
-
- \sa addCoordinate, path
-*/
-void QDeclarativePolygonMapItem::removeCoordinate(const QGeoCoordinate &coordinate)
-{
- int index = path_.lastIndexOf(coordinate);
- if (index == -1)
- return;
-
- path_.removeAt(index);
- geoLeftBound_ = QDeclarativePolylineMapItem::getLeftBound(path_, deltaXs_, minX_);
- geometry_.setPreserveGeometry(true, geoLeftBound_);
- borderGeometry_.setPreserveGeometry(true, geoLeftBound_);
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- polishAndUpdate();
- emit pathChanged();
-}
-
-/*!
- \qmlproperty color MapPolygon::color
-
- This property holds the color used to fill the polygon.
-
- The default value is transparent.
-*/
-
-QColor QDeclarativePolygonMapItem::color() const
-{
- return color_;
-}
-
-void QDeclarativePolygonMapItem::setColor(const QColor &color)
-{
- if (color_ == color)
- return;
-
- color_ = color;
- dirtyMaterial_ = true;
- update();
- emit colorChanged(color_);
-}
-
-/*!
- \internal
-*/
-QSGNode *QDeclarativePolygonMapItem::updateMapItemPaintNode(QSGNode *oldNode, UpdatePaintNodeData *data)
-{
- Q_UNUSED(data);
- MapPolygonNode *node = static_cast<MapPolygonNode *>(oldNode);
-
- if (!node)
- node = new MapPolygonNode();
-
- //TODO: update only material
- if (geometry_.isScreenDirty() || borderGeometry_.isScreenDirty() || dirtyMaterial_) {
- node->update(color_, border_.color(), &geometry_, &borderGeometry_);
- geometry_.setPreserveGeometry(false);
- borderGeometry_.setPreserveGeometry(false);
- geometry_.markClean();
- borderGeometry_.markClean();
- dirtyMaterial_ = false;
- }
- return node;
-}
-
-/*!
- \internal
-*/
-void QDeclarativePolygonMapItem::updatePolish()
-{
- if (!map() || path_.count() == 0)
- return;
-
- QScopedValueRollback<bool> rollback(updatingGeometry_);
- updatingGeometry_ = true;
-
- geometry_.updateSourcePoints(*map(), path_);
- geometry_.updateScreenPoints(*map());
-
- QList<QGeoCoordinate> closedPath = path_;
- closedPath << closedPath.first();
- borderGeometry_.clear();
- borderGeometry_.updateSourcePoints(*map(), closedPath, geoLeftBound_);
-
- if (border_.color() != Qt::transparent && border_.width() > 0)
- borderGeometry_.updateScreenPoints(*map(), border_.width());
-
- QList<QGeoMapItemGeometry *> geoms;
- geoms << &geometry_ << &borderGeometry_;
- QRectF combined = QGeoMapItemGeometry::translateToCommonOrigin(geoms);
-
- setWidth(combined.width());
- setHeight(combined.height());
-
- setPositionOnMap(path_.at(0), -1 * geometry_.sourceBoundingBox().topLeft());
-}
-
-/*!
- \internal
-*/
-void QDeclarativePolygonMapItem::afterViewportChanged(const QGeoMapViewportChangeEvent &event)
-{
- if (event.mapSize.width() <= 0 || event.mapSize.height() <= 0)
- return;
-
- // if the scene is tilted, we must regenerate our geometry every frame
- if (map()->cameraCapabilities().supportsTilting()
- && (event.cameraData.tilt() > 0.1
- || event.cameraData.tilt() < -0.1)) {
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- }
-
- // if the scene is rolled, we must regen too
- if (map()->cameraCapabilities().supportsRolling()
- && (event.cameraData.roll() > 0.1
- || event.cameraData.roll() < -0.1)) {
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- }
-
- // otherwise, only regen on rotate, resize and zoom
- if (event.bearingChanged || event.mapSizeChanged || event.zoomLevelChanged) {
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- }
- geometry_.setPreserveGeometry(true, geometry_.geoLeftBound());
- borderGeometry_.setPreserveGeometry(true, borderGeometry_.geoLeftBound());
- geometry_.markScreenDirty();
- borderGeometry_.markScreenDirty();
- polishAndUpdate();
-}
-
-/*!
- \internal
-*/
-bool QDeclarativePolygonMapItem::contains(const QPointF &point) const
-{
- return (geometry_.contains(point) || borderGeometry_.contains(point));
-}
-
-/*!
- \internal
-*/
-void QDeclarativePolygonMapItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
-{
- if (updatingGeometry_ || newGeometry.topLeft() == oldGeometry.topLeft()) {
- QDeclarativeGeoMapItemBase::geometryChanged(newGeometry, oldGeometry);
- return;
- }
-
- QDoubleVector2D newPoint = QDoubleVector2D(x(),y()) + QDoubleVector2D(geometry_.firstPointOffset());
- QGeoCoordinate newCoordinate = map()->geoProjection().itemPositionToCoordinate(newPoint, false);
- if (newCoordinate.isValid()) {
- double firstLongitude = path_.at(0).longitude();
- double firstLatitude = path_.at(0).latitude();
- double minMaxLatitude = firstLatitude;
- // prevent dragging over valid min and max latitudes
- for (int i = 0; i < path_.count(); ++i) {
- double newLatitude = path_.at(i).latitude()
- + newCoordinate.latitude() - firstLatitude;
- if (!QLocationUtils::isValidLat(newLatitude)) {
- if (qAbs(newLatitude) > qAbs(minMaxLatitude)) {
- minMaxLatitude = newLatitude;
- }
- }
- }
- // calculate offset needed to re-position the item within map border
- double offsetLatitude = minMaxLatitude - QLocationUtils::clipLat(minMaxLatitude);
- for (int i = 0; i < path_.count(); ++i) {
- QGeoCoordinate coord = path_.at(i);
- // handle dateline crossing
- coord.setLongitude(QLocationUtils::wrapLong(coord.longitude()
- + newCoordinate.longitude() - firstLongitude));
- coord.setLatitude(coord.latitude()
- + newCoordinate.latitude() - firstLatitude - offsetLatitude);
-
- path_.replace(i, coord);
- }
- geoLeftBound_.setLongitude(QLocationUtils::wrapLong(geoLeftBound_.longitude()
- + newCoordinate.longitude() - firstLongitude));
- geometry_.setPreserveGeometry(true, geoLeftBound_);
- borderGeometry_.setPreserveGeometry(true, geoLeftBound_);
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- polishAndUpdate();
- emit pathChanged();
- }
-
- // Not calling QDeclarativeGeoMapItemBase::geometryChanged() as it will be called from a nested
- // call to this function.
-}
-
-//////////////////////////////////////////////////////////////////////
-
-MapPolygonNode::MapPolygonNode() :
- border_(new MapPolylineNode()),
- geometry_(QSGGeometry::defaultAttributes_Point2D(), 0),
- blocked_(true)
-{
- geometry_.setDrawingMode(QSGGeometry::DrawTriangles);
- QSGGeometryNode::setMaterial(&fill_material_);
- QSGGeometryNode::setGeometry(&geometry_);
-
- appendChildNode(border_);
-}
-
-MapPolygonNode::~MapPolygonNode()
-{
-}
-
-/*!
- \internal
-*/
-bool MapPolygonNode::isSubtreeBlocked() const
-{
- return blocked_;
-}
-
-/*!
- \internal
-*/
-void MapPolygonNode::update(const QColor &fillColor, const QColor &borderColor,
- const QGeoMapItemGeometry *fillShape,
- const QGeoMapItemGeometry *borderShape)
-{
- /* Do the border update first */
- border_->update(borderColor, borderShape);
-
- /* If we have neither fill nor border with valid points, block the whole
- * tree. We can't just block the fill without blocking the border too, so
- * we're a little conservative here (maybe at the expense of rendering
- * accuracy) */
- if (fillShape->size() == 0) {
- if (borderShape->size() == 0) {
- blocked_ = true;
- return;
- } else {
- blocked_ = false;
- }
- } else {
- blocked_ = false;
- }
-
- QSGGeometry *fill = QSGGeometryNode::geometry();
- fillShape->allocateAndFill(fill);
- markDirty(DirtyGeometry);
-
- if (fillColor != fill_material_.color()) {
- fill_material_.setColor(fillColor);
- setMaterial(&fill_material_);
- markDirty(DirtyMaterial);
- }
-}
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativepolygonmapitem_p.h b/src/imports/location/qdeclarativepolygonmapitem_p.h
deleted file mode 100644
index 19ac5081..00000000
--- a/src/imports/location/qdeclarativepolygonmapitem_p.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEPOLYGONMAPITEM
-#define QDECLARATIVEPOLYGONMAPITEM
-
-//
-// 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 "qdeclarativegeomapitembase_p.h"
-#include "qdeclarativepolylinemapitem_p.h"
-#include "qgeomapitemgeometry_p.h"
-
-#include <QSGGeometryNode>
-#include <QSGFlatColorMaterial>
-
-QT_BEGIN_NAMESPACE
-
-class MapPolygonNode;
-
-class QGeoMapPolygonGeometry : public QGeoMapItemGeometry
-{
-public:
- QGeoMapPolygonGeometry();
-
- inline void setAssumeSimple(bool value) { assumeSimple_ = value; }
-
- void updateSourcePoints(const QGeoMap &map,
- const QList<QGeoCoordinate> &path);
-
- void updateScreenPoints(const QGeoMap &map);
-
-protected:
- QPainterPath srcPath_;
- bool assumeSimple_;
-};
-
-class QDeclarativePolygonMapItem : public QDeclarativeGeoMapItemBase
-{
- Q_OBJECT
-
- Q_PROPERTY(QJSValue path READ path WRITE setPath NOTIFY pathChanged)
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
- Q_PROPERTY(QDeclarativeMapLineProperties *border READ border CONSTANT)
-
-public:
- explicit QDeclarativePolygonMapItem(QQuickItem *parent = 0);
- ~QDeclarativePolygonMapItem();
-
- virtual void setMap(QDeclarativeGeoMap *quickMap, QGeoMap *map) Q_DECL_OVERRIDE;
- //from QuickItem
- virtual QSGNode *updateMapItemPaintNode(QSGNode *, UpdatePaintNodeData *) Q_DECL_OVERRIDE;
-
- Q_INVOKABLE void addCoordinate(const QGeoCoordinate &coordinate);
- Q_INVOKABLE void removeCoordinate(const QGeoCoordinate &coordinate);
-
- QJSValue path() const;
- void setPath(const QJSValue &value);
-
- QColor color() const;
- void setColor(const QColor &color);
-
- QDeclarativeMapLineProperties *border();
-
- bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
-
-Q_SIGNALS:
- void pathChanged();
- void colorChanged(const QColor &color);
-
-protected:
- void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE;
- void updatePolish() Q_DECL_OVERRIDE;
-
-protected Q_SLOTS:
- void handleBorderUpdated();
- virtual void afterViewportChanged(const QGeoMapViewportChangeEvent &event) Q_DECL_OVERRIDE;
-
-private:
- void pathPropertyChanged();
-
- QDeclarativeMapLineProperties border_;
- QList<QGeoCoordinate> path_;
- QGeoCoordinate geoLeftBound_;
- QColor color_;
- bool dirtyMaterial_;
- QGeoMapPolygonGeometry geometry_;
- QGeoMapPolylineGeometry borderGeometry_;
- bool updatingGeometry_;
- // for the left bound calculation
- QVector<double> deltaXs_; // longitude deltas from path_[0]
- double minX_; // minimum value inside deltaXs_
-};
-
-//////////////////////////////////////////////////////////////////////
-
-class MapPolygonNode : public QSGGeometryNode
-{
-
-public:
- MapPolygonNode();
- ~MapPolygonNode();
-
- void update(const QColor &fillColor, const QColor &borderColor,
- const QGeoMapItemGeometry *fillShape,
- const QGeoMapItemGeometry *borderShape);
-
- bool isSubtreeBlocked() const;
-
-private:
- QSGFlatColorMaterial fill_material_;
- MapPolylineNode *border_;
- QSGGeometry geometry_;
- bool blocked_;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativePolygonMapItem)
-
-#endif /* QDECLARATIVEPOLYGONMAPITEM_H_ */
diff --git a/src/imports/location/qdeclarativepolylinemapitem.cpp b/src/imports/location/qdeclarativepolylinemapitem.cpp
deleted file mode 100644
index 5fe0535d..00000000
--- a/src/imports/location/qdeclarativepolylinemapitem.cpp
+++ /dev/null
@@ -1,1011 +0,0 @@
-/****************************************************************************
- **
- ** Copyright (C) 2015 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 "qdeclarativepolylinemapitem_p.h"
-#include "qgeocameracapabilities_p.h"
-#include "qlocationutils_p.h"
-#include "error_messages.h"
-#include "locationvaluetypehelper_p.h"
-#include "qdoublevector2d_p.h"
-
-#include <QtCore/QScopedValueRollback>
-#include <QtQml/QQmlInfo>
-#include <QtQml/private/qqmlengine_p.h>
-#include <QPainter>
-#include <QPainterPath>
-#include <QPainterPathStroker>
-#include <qnumeric.h>
-
-#include <QtGui/private/qvectorpath_p.h>
-#include <QtGui/private/qtriangulatingstroker_p.h>
-#include <QtGui/private/qtriangulator_p.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype MapPolyline
- \instantiates QDeclarativePolylineMapItem
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-maps
- \since Qt Location 5.0
-
- \brief The MapPolyline type displays a polyline on a map.
-
- The MapPolyline type displays a polyline on a map, specified in terms of an ordered list of
- \l {coordinate}{coordinates}. The \l {coordinate}{coordinates} on
- the path cannot be directly changed after being added to the Polyline. Instead, copy the
- \l path into a var, modify the copy and reassign the copy back to the \l path.
-
- \code
- var path = mapPolyline.path;
- path[0].latitude = 5;
- mapPolyline.path = path;
- \endcode
-
- Coordinates can also be added and removed at any time using the \l addCoordinate and
- \l removeCoordinate methods.
-
- By default, the polyline is displayed as a 1-pixel thick black line. This
- can be changed using the \l line.width and \l line.color properties.
-
- \section2 Performance
-
- MapPolylines have a rendering cost that is O(n) with respect to the number
- of vertices. This means that the per frame cost of having a polyline on
- the Map grows in direct proportion to the number of points in the polyline.
-
- Like the other map objects, MapPolyline is normally drawn without a smooth
- appearance. Setting the \l {Item::opacity}{opacity} property will force the object to
- be blended, which decreases performance considerably depending on the hardware in use.
-
- \note MapPolylines are implemented using the OpenGL GL_LINES
- primitive. There have been occasional reports of issues and rendering
- inconsistencies on some (particularly quite old) platforms. No workaround
- is yet available for these issues.
-
- \section2 Example Usage
-
- The following snippet shows a MapPolyline with 4 points, making a shape
- like the top part of a "question mark" (?), near Brisbane, Australia.
- The line drawn is 3 pixels in width and green in color.
-
- \code
- Map {
- MapPolyline {
- line.width: 3
- line.color: 'green'
- path: [
- { latitude: -27, longitude: 153.0 },
- { latitude: -27, longitude: 154.1 },
- { latitude: -28, longitude: 153.5 },
- { latitude: -29, longitude: 153.5 }
- ]
- }
- }
- \endcode
-
- \image api-mappolyline.png
-*/
-
-QDeclarativeMapLineProperties::QDeclarativeMapLineProperties(QObject *parent) :
- QObject(parent),
- width_(1.0),
- color_(Qt::black)
-{
-}
-
-/*!
- \internal
-*/
-QColor QDeclarativeMapLineProperties::color() const
-{
- return color_;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeMapLineProperties::setColor(const QColor &color)
-{
- if (color_ == color)
- return;
-
- color_ = color;
- emit colorChanged(color_);
-}
-
-/*!
- \internal
-*/
-qreal QDeclarativeMapLineProperties::width() const
-{
- return width_;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeMapLineProperties::setWidth(qreal width)
-{
- if (width_ == width)
- return;
-
- width_ = width;
- emit widthChanged(width_);
-}
-
-struct Vertex
-{
- QVector2D position;
-};
-
-QGeoMapPolylineGeometry::QGeoMapPolylineGeometry()
-{
-}
-
-/*!
- \internal
-*/
-void QGeoMapPolylineGeometry::updateSourcePoints(const QGeoMap &map,
- const QList<QGeoCoordinate> &path,
- const QGeoCoordinate geoLeftBound)
-{
- bool foundValid = false;
- double minX = -1.0;
- double minY = -1.0;
- double maxX = -1.0;
- double maxY = -1.0;
-
- if (!sourceDirty_)
- return;
-
- geoLeftBound_ = geoLeftBound;
-
- // clear the old data and reserve enough memory
- srcPoints_.clear();
- srcPoints_.reserve(path.size() * 2);
- srcPointTypes_.clear();
- srcPointTypes_.reserve(path.size());
-
- QDoubleVector2D origin, lastAddedPoint;
-
- const double mapWidthHalf = map.viewportWidth()/2.0;
- double unwrapBelowX = 0;
- if (preserveGeometry_)
- unwrapBelowX = map.geoProjection().coordinateToItemPosition(geoLeftBound_, false).x();
-
- for (int i = 0; i < path.size(); ++i) {
- const QGeoCoordinate &coord = path.at(i);
-
- if (!coord.isValid())
- continue;
-
- QDoubleVector2D point = map.geoProjection().coordinateToItemPosition(coord, false);
-
- // We can get NaN if the map isn't set up correctly, or the projection
- // is faulty -- probably best thing to do is abort
- if (!qIsFinite(point.x()) || !qIsFinite(point.y()))
- return;
-
- bool isPointLessThanUnwrapBelowX = (point.x() < unwrapBelowX);
- bool isCoordNotLeftBound = !qFuzzyCompare(geoLeftBound_.longitude(), coord.longitude());
- bool isPointNotUnwrapBelowX = !qFuzzyCompare(point.x(), unwrapBelowX);
- bool isPointNotMapWidthHalf = !qFuzzyCompare(mapWidthHalf, point.x());
-
- // unwrap x to preserve geometry if moved to border of map
- if (preserveGeometry_ && isPointLessThanUnwrapBelowX
- && isCoordNotLeftBound
- && isPointNotUnwrapBelowX
- && isPointNotMapWidthHalf) {
- double distance = geoDistanceToScreenWidth(map, geoLeftBound_, coord);
- point.setX(unwrapBelowX + distance);
- }
-
- if (!foundValid) {
- foundValid = true;
- srcOrigin_ = coord; // TODO: Make this consistent with the left bound
- origin = point;
- point = QDoubleVector2D(0,0);
-
- minX = point.x();
- maxX = minX;
- minY = point.y();
- maxY = minY;
-
- srcPoints_ << point.x() << point.y();
- srcPointTypes_ << QPainterPath::MoveToElement;
- lastAddedPoint = point;
- } else {
- point -= origin;
-
- minX = qMin(point.x(), minX);
- minY = qMin(point.y(), minY);
- maxX = qMax(point.x(), maxX);
- maxY = qMax(point.y(), maxY);
-
- if ((point - lastAddedPoint).manhattanLength() > 3 ||
- i == path.size() - 1) {
- srcPoints_ << point.x() << point.y();
- srcPointTypes_ << QPainterPath::LineToElement;
- lastAddedPoint = point;
- }
- }
- }
-
- sourceBounds_ = QRectF(QPointF(minX, minY), QPointF(maxX, maxY));
-}
-
-////////////////////////////////////////////////////////////////////////////
-/* Polyline clip */
-
-enum ClipPointType {
- InsidePoint = 0x00,
- LeftPoint = 0x01,
- RightPoint = 0x02,
- BottomPoint = 0x04,
- TopPoint = 0x08
-};
-
-static inline int clipPointType(qreal x, qreal y, const QRectF &rect)
-{
- int type = InsidePoint;
- if (x < rect.left())
- type |= LeftPoint;
- else if (x > rect.right())
- type |= RightPoint;
- if (y < rect.top())
- type |= TopPoint;
- else if (y > rect.bottom())
- type |= BottomPoint;
- return type;
-}
-
-static void clipSegmentToRect(qreal x0, qreal y0, qreal x1, qreal y1,
- const QRectF &clipRect,
- QVector<qreal> &outPoints,
- QVector<QPainterPath::ElementType> &outTypes)
-{
- int type0 = clipPointType(x0, y0, clipRect);
- int type1 = clipPointType(x1, y1, clipRect);
- bool accept = false;
-
- while (true) {
- if (!(type0 | type1)) {
- accept = true;
- break;
- } else if (type0 & type1) {
- break;
- } else {
- qreal x = 0.0;
- qreal y = 0.0;
- int outsideType = type0 ? type0 : type1;
-
- if (outsideType & BottomPoint) {
- x = x0 + (x1 - x0) * (clipRect.bottom() - y0) / (y1 - y0);
- y = clipRect.bottom() - 0.1;
- } else if (outsideType & TopPoint) {
- x = x0 + (x1 - x0) * (clipRect.top() - y0) / (y1 - y0);
- y = clipRect.top() + 0.1;
- } else if (outsideType & RightPoint) {
- y = y0 + (y1 - y0) * (clipRect.right() - x0) / (x1 - x0);
- x = clipRect.right() - 0.1;
- } else if (outsideType & LeftPoint) {
- y = y0 + (y1 - y0) * (clipRect.left() - x0) / (x1 - x0);
- x = clipRect.left() + 0.1;
- }
-
- if (outsideType == type0) {
- x0 = x;
- y0 = y;
- type0 = clipPointType(x0, y0, clipRect);
- } else {
- x1 = x;
- y1 = y;
- type1 = clipPointType(x1, y1, clipRect);
- }
- }
- }
-
- if (accept) {
- if (outPoints.size() >= 2) {
- qreal lastX, lastY;
- lastY = outPoints.at(outPoints.size() - 1);
- lastX = outPoints.at(outPoints.size() - 2);
-
- if (!qFuzzyCompare(lastY, y0) || !qFuzzyCompare(lastX, x0)) {
- outTypes << QPainterPath::MoveToElement;
- outPoints << x0 << y0;
- }
- } else {
- outTypes << QPainterPath::MoveToElement;
- outPoints << x0 << y0;
- }
-
- outTypes << QPainterPath::LineToElement;
- outPoints << x1 << y1;
- }
-}
-
-static void clipPathToRect(const QVector<qreal> &points,
- const QVector<QPainterPath::ElementType> &types,
- const QRectF &clipRect,
- QVector<qreal> &outPoints,
- QVector<QPainterPath::ElementType> &outTypes)
-{
- outPoints.clear();
- outPoints.reserve(points.size());
- outTypes.clear();
- outTypes.reserve(types.size());
-
- qreal lastX, lastY;
- for (int i = 0; i < types.size(); ++i) {
- if (i > 0 && types[i] != QPainterPath::MoveToElement) {
- qreal x = points[i * 2], y = points[i * 2 + 1];
- clipSegmentToRect(lastX, lastY, x, y, clipRect, outPoints, outTypes);
- }
-
- lastX = points[i * 2];
- lastY = points[i * 2 + 1];
- }
-}
-
-/*!
- \internal
-*/
-void QGeoMapPolylineGeometry::updateScreenPoints(const QGeoMap &map,
- qreal strokeWidth)
-{
- if (!screenDirty_)
- return;
-
- QPointF origin = map.geoProjection().coordinateToItemPosition(srcOrigin_, false).toPointF();
-
- if (!qIsFinite(origin.x()) || !qIsFinite(origin.y())) {
- clear();
- return;
- }
-
- // Create the viewport rect in the same coordinate system
- // as the actual points
- QRectF viewport(0, 0, map.viewportWidth(), map.viewportHeight());
- viewport.adjust(-strokeWidth, -strokeWidth, strokeWidth, strokeWidth);
- viewport.translate(-1 * origin);
-
- // Perform clipping to the viewport limits
- QVector<qreal> points;
- QVector<QPainterPath::ElementType> types;
-
- if (clipToViewport_) {
- clipPathToRect(srcPoints_, srcPointTypes_, viewport, points, types);
- } else {
- points = srcPoints_;
- types = srcPointTypes_;
- }
-
- QVectorPath vp(points.data(), types.size(), types.data());
- QTriangulatingStroker ts;
- ts.process(vp, QPen(QBrush(Qt::black), strokeWidth), viewport, QPainter::Qt4CompatiblePainting);
-
- clear();
-
- // Nothing is on the screen
- if (ts.vertexCount() == 0)
- return;
-
- // QTriangulatingStroker#vertexCount is actually the length of the array,
- // not the number of vertices
- screenVertices_.reserve(ts.vertexCount());
-
- QRectF bb;
-
- QPointF pt;
- const float *vs = ts.vertices();
- for (int i = 0; i < (ts.vertexCount()/2*2); i += 2) {
- pt = QPointF(vs[i], vs[i + 1]);
- screenVertices_ << pt;
-
- if (!qIsFinite(pt.x()) || !qIsFinite(pt.y()))
- break;
-
- if (!bb.contains(pt)) {
- if (pt.x() < bb.left())
- bb.setLeft(pt.x());
-
- if (pt.x() > bb.right())
- bb.setRight(pt.x());
-
- if (pt.y() < bb.top())
- bb.setTop(pt.y());
-
- if (pt.y() > bb.bottom())
- bb.setBottom(pt.y());
- }
- }
-
- screenBounds_ = bb;
- this->translate( -1 * sourceBounds_.topLeft());
-}
-
-QDeclarativePolylineMapItem::QDeclarativePolylineMapItem(QQuickItem *parent)
-: QDeclarativeGeoMapItemBase(parent), dirtyMaterial_(true), updatingGeometry_(false)
-{
- setFlag(ItemHasContents, true);
- QObject::connect(&line_, SIGNAL(colorChanged(QColor)),
- this, SLOT(updateAfterLinePropertiesChanged()));
- QObject::connect(&line_, SIGNAL(widthChanged(qreal)),
- this, SLOT(updateAfterLinePropertiesChanged()));
-}
-
-QDeclarativePolylineMapItem::~QDeclarativePolylineMapItem()
-{
-}
-
-/*!
- \internal
-*/
-void QDeclarativePolylineMapItem::updateAfterLinePropertiesChanged()
-{
- // mark dirty just in case we're a width change
- geometry_.markSourceDirty();
- polishAndUpdate();
-}
-
-/*!
- \internal
-*/
-void QDeclarativePolylineMapItem::setMap(QDeclarativeGeoMap *quickMap, QGeoMap *map)
-{
- QDeclarativeGeoMapItemBase::setMap(quickMap,map);
- if (map) {
- geometry_.markSourceDirty();
- polishAndUpdate();
- }
-}
-
-/*!
- \qmlproperty list<coordinate> MapPolyline::path
-
- This property holds the ordered list of coordinates which
- define the polyline.
-*/
-
-QJSValue QDeclarativePolylineMapItem::path() const
-{
- QQmlContext *context = QQmlEngine::contextForObject(this);
- if (!context)
- return QJSValue();
- QQmlEngine *engine = context->engine();
- QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(engine);
-
- QV4::Scope scope(v4);
- QV4::Scoped<QV4::ArrayObject> pathArray(scope, v4->newArrayObject(path_.length()));
- for (int i = 0; i < path_.length(); ++i) {
- const QGeoCoordinate &c = path_.at(i);
-
- QV4::ScopedValue cv(scope, v4->fromVariant(QVariant::fromValue(c)));
- pathArray->putIndexed(i, cv);
- }
-
- return QJSValue(v4, pathArray.asReturnedValue());
-}
-
-void QDeclarativePolylineMapItem::setPath(const QJSValue &value)
-{
- if (!value.isArray())
- return;
-
- QList<QGeoCoordinate> pathList;
- quint32 length = value.property(QStringLiteral("length")).toUInt();
- for (quint32 i = 0; i < length; ++i) {
- bool ok;
- QGeoCoordinate c = parseCoordinate(value.property(i), &ok);
-
- if (!ok || !c.isValid()) {
- qmlWarning(this) << "Unsupported path type";
- return;
- }
-
- pathList.append(c);
- }
-
- setPathFromGeoList(pathList);
-}
-
-/*!
- \internal
-*/
-void QDeclarativePolylineMapItem::setPathFromGeoList(const QList<QGeoCoordinate> &path)
-{
- if (path_ == path)
- return;
-
- path_ = path;
- geoLeftBound_ = getLeftBound(path_, deltaXs_, minX_);
- geometry_.setPreserveGeometry(true, geoLeftBound_);
- geometry_.markSourceDirty();
- polishAndUpdate();
- emit pathChanged();
-}
-
-/*!
- \qmlmethod int MapPolyline::pathLength()
-
- Returns the number of coordinates of the polyline.
-
- \since Qt Location 5.6
-
- \sa path
-*/
-int QDeclarativePolylineMapItem::pathLength() const
-{
- return path_.size();
-}
-
-/*!
- \qmlmethod void MapPolyline::addCoordinate(coordinate)
-
- Adds a coordinate to the end of the path.
-
- \sa insertCoordinate, removeCoordinate, path
-*/
-void QDeclarativePolylineMapItem::addCoordinate(const QGeoCoordinate &coordinate)
-{
- path_.append(coordinate);
- geoLeftBound_ = getLeftBound(path_, deltaXs_, minX_, geoLeftBound_);
- geometry_.setPreserveGeometry(true, geoLeftBound_);
- geometry_.markSourceDirty();
- polishAndUpdate();
- emit pathChanged();
-}
-
-/*!
- \qmlmethod void MapPolyline::insertCoordinate(index, coordinate)
-
- Inserts a \a coordinate to the path at the given \a index.
-
- \since Qt Location 5.6
-
- \sa addCoordinate, removeCoordinate, path
-*/
-void QDeclarativePolylineMapItem::insertCoordinate(int index, const QGeoCoordinate &coordinate)
-{
- if (index < 0 || index > path_.size())
- return;
-
- path_.insert(index, coordinate);
- geoLeftBound_ = getLeftBound(path_, deltaXs_, minX_);
- geometry_.setPreserveGeometry(true, geoLeftBound_);
- geometry_.markSourceDirty();
- polishAndUpdate();
- emit pathChanged();
-}
-
-/*!
- \qmlmethod void MapPolyline::replaceCoordinate(index, coordinate)
-
- Replaces the coordinate in the current path at the given \a index
- with the new \a coordinate.
-
- \since Qt Location 5.6
-
- \sa addCoordinate, insertCoordinate, removeCoordinate, path
-*/
-void QDeclarativePolylineMapItem::replaceCoordinate(int index, const QGeoCoordinate &coordinate)
-{
- if (index < 0 || index >= path_.size())
- return;
-
- path_[index] = coordinate;
- geoLeftBound_ = getLeftBound(path_, deltaXs_, minX_);
- geometry_.setPreserveGeometry(true, geoLeftBound_);
- geometry_.markSourceDirty();
- polishAndUpdate();
- emit pathChanged();
-}
-
-/*!
- \qmlmethod coordinate MapPolyline::coordinateAt(index)
-
- Gets the coordinate of the polyline at the given \a index.
- If the index is outside the path's bounds then an invalid
- coordinate is returned.
-
- \since Qt Location 5.6
-*/
-QGeoCoordinate QDeclarativePolylineMapItem::coordinateAt(int index) const
-{
- if (index < 0 || index >= path_.size())
- return QGeoCoordinate();
-
- return path_.at(index);
-}
-
-/*!
- \qmlmethod coordinate MapPolyline::containsCoordinate(coordinate)
-
- Returns true if the given \a coordinate is part of the path.
-
- \since Qt Location 5.6
-*/
-bool QDeclarativePolylineMapItem::containsCoordinate(const QGeoCoordinate &coordinate)
-{
- return path_.indexOf(coordinate) > -1;
-}
-
-/*!
- \qmlmethod void MapPolyline::removeCoordinate(coordinate)
-
- Removes \a coordinate from the path. If there are multiple instances of the
- same coordinate, the one added last is removed.
-
- If \a coordinate is not in the path this method does nothing.
-
- \sa addCoordinate, insertCoordinate, path
-*/
-void QDeclarativePolylineMapItem::removeCoordinate(const QGeoCoordinate &coordinate)
-{
- int index = path_.lastIndexOf(coordinate);
- removeCoordinate(index);
-}
-
-/*!
- \qmlmethod void MapPolyline::removeCoordinate(index)
-
- Removes a coordinate from the path at the given \a index.
-
- If \a index is invalid then this method does nothing.
-
- \since Qt Location 5.6
-
- \sa addCoordinate, insertCoordinate, path
-*/
-void QDeclarativePolylineMapItem::removeCoordinate(int index)
-{
- if (index < 0 || index >= path_.size())
- return;
-
- path_.removeAt(index);
- geoLeftBound_ = getLeftBound(path_, deltaXs_, minX_);
- geometry_.setPreserveGeometry(true, geoLeftBound_);
- geometry_.markSourceDirty();
- polishAndUpdate();
- emit pathChanged();
-}
-
-/*!
- \qmlpropertygroup Location::MapPolyline::line
- \qmlproperty int MapPolyline::line.width
- \qmlproperty color MapPolyline::line.color
-
- This property is part of the line property group. The line
- property group holds the width and color used to draw the line.
-
- The width is in pixels and is independent of the zoom level of the map.
- The default values correspond to a black border with a width of 1 pixel.
-
- For no line, use a width of 0 or a transparent color.
-*/
-
-QDeclarativeMapLineProperties *QDeclarativePolylineMapItem::line()
-{
- return &line_;
-}
-
-QGeoCoordinate QDeclarativePolylineMapItem::computeLeftBound(const QList<QGeoCoordinate> &path,
- QVector<double> &deltaXs,
- double &minX)
-{
- if (path.isEmpty()) {
- minX = qInf();
- return QGeoCoordinate();
- }
- deltaXs.resize(path.size());
-
- deltaXs[0] = minX = 0.0;
- int minId = 0;
-
- for (int i = 1; i < path.size(); i++) {
- const QGeoCoordinate &geoFrom = path.at(i-1);
- const QGeoCoordinate &geoTo = path.at(i);
- double longiFrom = geoFrom.longitude();
- double longiTo = geoTo.longitude();
- double deltaLongi = longiTo - longiFrom;
- if (qAbs(deltaLongi) > 180.0) {
- if (longiTo > 0.0)
- longiTo -= 360.0;
- else
- longiTo += 360.0;
- deltaLongi = longiTo - longiFrom;
- }
- deltaXs[i] = deltaXs[i-1] + deltaLongi;
- if (deltaXs[i] < minX) {
- minX = deltaXs[i];
- minId = i;
- }
- }
- return path.at(minId);
-}
-
-QGeoCoordinate QDeclarativePolylineMapItem::updateLeftBound(const QList<QGeoCoordinate> &path,
- QVector<double> &deltaXs,
- double &minX,
- QGeoCoordinate currentLeftBound)
-{
- if (path.isEmpty()) {
- deltaXs.clear();
- minX = qInf();
- return QGeoCoordinate();
- } else if (path.size() == 1) {
- deltaXs.resize(1);
- deltaXs[0] = minX = 0.0;
- return path.last();
- } else if ( path.size() != deltaXs.size() + 1 ) { // something went wrong. This case should not happen
- return computeLeftBound(path, deltaXs, minX);
- }
-
- const QGeoCoordinate &geoFrom = path.at(path.size()-2);
- const QGeoCoordinate &geoTo = path.last();
- double longiFrom = geoFrom.longitude();
- double longiTo = geoTo.longitude();
- double deltaLongi = longiTo - longiFrom;
- if (qAbs(deltaLongi) > 180.0) {
- if (longiTo > 0.0)
- longiTo -= 360.0;
- else
- longiTo += 360.0;
- deltaLongi = longiTo - longiFrom;
- }
-
- deltaXs.push_back(deltaXs.last() + deltaLongi);
- if (deltaXs.last() < minX) {
- minX = deltaXs.last();
- return path.last();
- } else {
- return currentLeftBound;
- }
-}
-
-QGeoCoordinate QDeclarativePolylineMapItem::getLeftBound(const QList<QGeoCoordinate> &path,
- QVector<double> &deltaXs,
- double &minX)
-{
- return QDeclarativePolylineMapItem::computeLeftBound(path, deltaXs, minX);
-}
-
-// Optimizing the common addCoordinate() path
-QGeoCoordinate QDeclarativePolylineMapItem::getLeftBound(const QList<QGeoCoordinate> &path,
- QVector<double> &deltaXs,
- double &minX,
- QGeoCoordinate currentLeftBound)
-{
- return QDeclarativePolylineMapItem::updateLeftBound(path, deltaXs, minX, currentLeftBound);
-}
-
-/*!
- \internal
-*/
-void QDeclarativePolylineMapItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
-{
- if (updatingGeometry_ || newGeometry.topLeft() == oldGeometry.topLeft()) {
- QDeclarativeGeoMapItemBase::geometryChanged(newGeometry, oldGeometry);
- return;
- }
-
- QDoubleVector2D newPoint = QDoubleVector2D(x(),y()) + QDoubleVector2D(geometry_.firstPointOffset());
- QGeoCoordinate newCoordinate = map()->geoProjection().itemPositionToCoordinate(newPoint, false);
- if (newCoordinate.isValid()) {
- double firstLongitude = path_.at(0).longitude();
- double firstLatitude = path_.at(0).latitude();
- double minMaxLatitude = firstLatitude;
- // prevent dragging over valid min and max latitudes
- for (int i = 0; i < path_.count(); ++i) {
- double newLatitude = path_.at(i).latitude()
- + newCoordinate.latitude() - firstLatitude;
- if (!QLocationUtils::isValidLat(newLatitude)) {
- if (qAbs(newLatitude) > qAbs(minMaxLatitude)) {
- minMaxLatitude = newLatitude;
- }
- }
- }
- // calculate offset needed to re-position the item within map border
- double offsetLatitude = minMaxLatitude - QLocationUtils::clipLat(minMaxLatitude);
- for (int i = 0; i < path_.count(); ++i) {
- QGeoCoordinate coord = path_.at(i);
- // handle dateline crossing
- coord.setLongitude(QLocationUtils::wrapLong(coord.longitude()
- + newCoordinate.longitude() - firstLongitude));
- coord.setLatitude(coord.latitude()
- + newCoordinate.latitude() - firstLatitude - offsetLatitude);
- path_.replace(i, coord);
- }
-
- geoLeftBound_.setLongitude(QLocationUtils::wrapLong(geoLeftBound_.longitude()
- + newCoordinate.longitude() - firstLongitude));
- geometry_.setPreserveGeometry(true, geoLeftBound_);
- geometry_.markSourceDirty();
- polishAndUpdate();
- emit pathChanged();
- }
-
- // Not calling QDeclarativeGeoMapItemBase::geometryChanged() as it will be called from a nested
- // call to this function.
-}
-
-/*!
- \internal
-*/
-void QDeclarativePolylineMapItem::afterViewportChanged(const QGeoMapViewportChangeEvent &event)
-{
- if (event.mapSize.width() <= 0 || event.mapSize.height() <= 0)
- return;
-
- // if the scene is tilted, we must regenerate our geometry every frame
- if (map()->cameraCapabilities().supportsTilting()
- && (event.cameraData.tilt() > 0.1
- || event.cameraData.tilt() < -0.1)) {
- geometry_.markSourceDirty();
- }
-
- // if the scene is rolled, we must regen too
- if (map()->cameraCapabilities().supportsRolling()
- && (event.cameraData.roll() > 0.1
- || event.cameraData.roll() < -0.1)) {
- geometry_.markSourceDirty();
- }
-
- // otherwise, only regen on rotate, resize and zoom
- if (event.bearingChanged || event.mapSizeChanged || event.zoomLevelChanged) {
- geometry_.markSourceDirty();
- }
- geometry_.setPreserveGeometry(true, geometry_.geoLeftBound());
- geometry_.markScreenDirty();
- polishAndUpdate();
-}
-
-/*!
- \internal
-*/
-void QDeclarativePolylineMapItem::updatePolish()
-{
- if (!map() || path_.count() == 0)
- return;
-
- QScopedValueRollback<bool> rollback(updatingGeometry_);
- updatingGeometry_ = true;
-
- geometry_.updateSourcePoints(*map(), path_, geoLeftBound_);
- geometry_.updateScreenPoints(*map(), line_.width());
-
- setWidth(geometry_.sourceBoundingBox().width());
- setHeight(geometry_.sourceBoundingBox().height());
-
- setPositionOnMap(path_.at(0), -1 * geometry_.sourceBoundingBox().topLeft());
-}
-
-/*!
- \internal
-*/
-QSGNode *QDeclarativePolylineMapItem::updateMapItemPaintNode(QSGNode *oldNode, UpdatePaintNodeData *data)
-{
- Q_UNUSED(data);
-
- MapPolylineNode *node = static_cast<MapPolylineNode *>(oldNode);
-
- if (!node) {
- node = new MapPolylineNode();
- }
-
- //TODO: update only material
- if (geometry_.isScreenDirty() || dirtyMaterial_ || !oldNode) {
- node->update(line_.color(), &geometry_);
- geometry_.setPreserveGeometry(false);
- geometry_.markClean();
- dirtyMaterial_ = false;
- }
- return node;
-}
-
-bool QDeclarativePolylineMapItem::contains(const QPointF &point) const
-{
- QVector<QPointF> vertices = geometry_.vertices();
- QPolygonF tri;
- for (int i = 0; i < vertices.size(); ++i) {
- tri << vertices[i];
- if (tri.size() == 3) {
- if (tri.containsPoint(point,Qt::OddEvenFill))
- return true;
- tri.remove(0);
- }
- }
-
- return false;
-}
-
-//////////////////////////////////////////////////////////////////////
-
-/*!
- \internal
-*/
-MapPolylineNode::MapPolylineNode() :
- geometry_(QSGGeometry::defaultAttributes_Point2D(),0),
- blocked_(true)
-{
- geometry_.setDrawingMode(QSGGeometry::DrawTriangleStrip);
- QSGGeometryNode::setMaterial(&fill_material_);
- QSGGeometryNode::setGeometry(&geometry_);
-}
-
-
-/*!
- \internal
-*/
-MapPolylineNode::~MapPolylineNode()
-{
-}
-
-/*!
- \internal
-*/
-bool MapPolylineNode::isSubtreeBlocked() const
-{
- return blocked_;
-}
-
-/*!
- \internal
-*/
-void MapPolylineNode::update(const QColor &fillColor,
- const QGeoMapItemGeometry *shape)
-{
- if (shape->size() == 0) {
- blocked_ = true;
- return;
- } else {
- blocked_ = false;
- }
-
- QSGGeometry *fill = QSGGeometryNode::geometry();
- shape->allocateAndFill(fill);
- markDirty(DirtyGeometry);
-
- if (fillColor != fill_material_.color()) {
- fill_material_.setColor(fillColor);
- setMaterial(&fill_material_);
- markDirty(DirtyMaterial);
- }
-}
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativepolylinemapitem_p.h b/src/imports/location/qdeclarativepolylinemapitem_p.h
deleted file mode 100644
index 8c827b6f..00000000
--- a/src/imports/location/qdeclarativepolylinemapitem_p.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEPOLYLINEMAPITEM
-#define QDECLARATIVEPOLYLINEMAPITEM
-
-//
-// 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 "qdeclarativegeomapitembase_p.h"
-#include "qgeomapitemgeometry_p.h"
-
-#include <QSGGeometryNode>
-#include <QSGFlatColorMaterial>
-
-QT_BEGIN_NAMESPACE
-
-class MapPolylineNode;
-
-class QDeclarativeMapLineProperties : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(qreal width READ width WRITE setWidth NOTIFY widthChanged)
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
-
-public:
- explicit QDeclarativeMapLineProperties(QObject *parent = 0);
-
- QColor color() const;
- void setColor(const QColor &color);
-
- qreal width() const;
- void setWidth(qreal width);
-
-Q_SIGNALS:
- void widthChanged(qreal width);
- void colorChanged(const QColor &color);
-
-private:
- qreal width_;
- QColor color_;
-};
-
-class QGeoMapPolylineGeometry : public QGeoMapItemGeometry
-{
-public:
- QGeoMapPolylineGeometry();
-
- void updateSourcePoints(const QGeoMap &map,
- const QList<QGeoCoordinate> &path,
- const QGeoCoordinate geoLeftBound);
-
- void updateScreenPoints(const QGeoMap &map,
- qreal strokeWidth);
-
-private:
- QVector<qreal> srcPoints_;
- QVector<QPainterPath::ElementType> srcPointTypes_;
-
-
-};
-
-class QDeclarativePolylineMapItem : public QDeclarativeGeoMapItemBase
-{
- Q_OBJECT
-
- Q_PROPERTY(QJSValue path READ path WRITE setPath NOTIFY pathChanged)
- Q_PROPERTY(QDeclarativeMapLineProperties *line READ line CONSTANT)
-
-public:
- explicit QDeclarativePolylineMapItem(QQuickItem *parent = 0);
- ~QDeclarativePolylineMapItem();
-
- virtual void setMap(QDeclarativeGeoMap *quickMap, QGeoMap *map) Q_DECL_OVERRIDE;
- //from QuickItem
- virtual QSGNode *updateMapItemPaintNode(QSGNode *, UpdatePaintNodeData *) Q_DECL_OVERRIDE;
-
- Q_INVOKABLE int pathLength() const;
- Q_INVOKABLE void addCoordinate(const QGeoCoordinate &coordinate);
- Q_INVOKABLE void insertCoordinate(int index, const QGeoCoordinate &coordinate);
- Q_INVOKABLE void replaceCoordinate(int index, const QGeoCoordinate &coordinate);
- Q_INVOKABLE QGeoCoordinate coordinateAt(int index) const;
- Q_INVOKABLE bool containsCoordinate(const QGeoCoordinate &coordinate);
- Q_INVOKABLE void removeCoordinate(const QGeoCoordinate &coordinate);
- Q_INVOKABLE void removeCoordinate(int index);
-
- QJSValue path() const;
- virtual void setPath(const QJSValue &value);
-
- bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
-
- QDeclarativeMapLineProperties *line();
-
- static QGeoCoordinate computeLeftBound(const QList<QGeoCoordinate> &path, QVector<double> &deltaXs, double &minX);
- static QGeoCoordinate updateLeftBound(const QList<QGeoCoordinate> &path, QVector<double> &deltaXs, double &minX, QGeoCoordinate currentLeftBound);
- static QGeoCoordinate getLeftBound(const QList<QGeoCoordinate> &path, QVector<double> &deltaXs, double &minX);
- static QGeoCoordinate getLeftBound(const QList<QGeoCoordinate> &path, QVector<double> &deltaXs, double &minX, QGeoCoordinate currentLeftBound);
-
-Q_SIGNALS:
- void pathChanged();
-
-protected:
- void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE;
- void setPathFromGeoList(const QList<QGeoCoordinate> &path);
- void updatePolish() Q_DECL_OVERRIDE;
-
-protected Q_SLOTS:
- void updateAfterLinePropertiesChanged();
- virtual void afterViewportChanged(const QGeoMapViewportChangeEvent &event) Q_DECL_OVERRIDE;
-
-private:
- void pathPropertyChanged();
-
- QDeclarativeMapLineProperties line_;
- QList<QGeoCoordinate> path_;
- QGeoCoordinate geoLeftBound_;
- QColor color_;
- bool dirtyMaterial_;
- QGeoMapPolylineGeometry geometry_;
- bool updatingGeometry_;
- // for the left bound calculation
- QVector<double> deltaXs_; // longitude deltas from path_[0]
- double minX_; // minimum value inside deltaXs_
-};
-
-//////////////////////////////////////////////////////////////////////
-
-class MapPolylineNode : public QSGGeometryNode
-{
-
-public:
- MapPolylineNode();
- ~MapPolylineNode();
-
- void update(const QColor &fillColor, const QGeoMapItemGeometry *shape);
- bool isSubtreeBlocked() const;
-
-private:
- QSGFlatColorMaterial fill_material_;
- QSGGeometry geometry_;
- bool blocked_;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeMapLineProperties)
-QML_DECLARE_TYPE(QDeclarativePolylineMapItem)
-
-#endif /* QDECLARATIVEPOLYLINEMAPITEM_H_ */
diff --git a/src/imports/location/qdeclarativerectanglemapitem.cpp b/src/imports/location/qdeclarativerectanglemapitem.cpp
deleted file mode 100644
index b91c4c08..00000000
--- a/src/imports/location/qdeclarativerectanglemapitem.cpp
+++ /dev/null
@@ -1,452 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativerectanglemapitem_p.h"
-#include "qdeclarativepolygonmapitem_p.h"
-#include "qgeocameracapabilities_p.h"
-#include "qlocationutils_p.h"
-#include <QPainterPath>
-#include <qnumeric.h>
-#include <QRectF>
-#include <QPointF>
-#include <QtCore/QScopedValueRollback>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype MapRectangle
- \instantiates QDeclarativeRectangleMapItem
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-maps
- \since Qt Location 5.5
-
- \brief The MapRectangle type displays a rectangle on a Map.
-
- The MapRectangle type displays a rectangle on a Map. Rectangles are a
- special case of Polygon with exactly 4 vertices and 4 "straight" edges. In
- this case, "straight" means that the top-left point has the same latitude
- as the top-right point (the top edge), and the bottom-left point has the
- same latitude as the bottom-right point (the bottom edge). Similarly, the
- points on the left side have the same longitude, and the points on the
- right side have the same longitude.
-
- To specify the rectangle, it requires a \l topLeft and \l bottomRight point,
- both given by a \l {coordinate}.
-
- By default, the rectangle is displayed with transparent fill and a 1-pixel
- thick black border. This can be changed using the \l color, \l border.color
- and \l border.width properties.
-
- \note Similar to the \l MapPolygon type, MapRectangles are geographic
- items, thus dragging a MapRectangle causes its vertices to be recalculated
- in the geographic coordinate space. Apparent stretching of the item
- occurs when dragged to the a different latitude, however, its edges
- remain straight.
-
- \section2 Performance
-
- MapRectangles have a rendering cost identical to a MapPolygon with 4
- vertices.
-
- Like the other map objects, MapRectangle is normally drawn without a smooth
- appearance. Setting the \l opacity property will force the object to be
- blended, which decreases performance considerably depending on the hardware
- in use.
-
- \section2 Example Usage
-
- The following snippet shows a map containing a MapRectangle, spanning
- from (-27, 153) to (-28, 153.5), near Brisbane, Australia. The rectangle
- is filled in green, with a 2 pixel black border.
-
- \code
- Map {
- MapRectangle {
- color: 'green'
- border.width: 2
- topLeft {
- latitude: -27
- longitude: 153
- }
- bottomRight {
- latitude: -28
- longitude: 153.5
- }
- }
- }
- \endcode
-
- \image api-maprectangle.png
-*/
-
-struct Vertex
-{
- QVector2D position;
-};
-
-QGeoMapRectangleGeometry::QGeoMapRectangleGeometry()
-{
-}
-
-/*!
- \internal
-*/
-void QGeoMapRectangleGeometry::updatePoints(const QGeoMap &map,
- const QGeoCoordinate &topLeft,
- const QGeoCoordinate &bottomRight)
-{
- if (!screenDirty_ && !sourceDirty_)
- return;
-
- QDoubleVector2D tl = map.geoProjection().coordinateToItemPosition(topLeft, false);
- QDoubleVector2D br = map.geoProjection().coordinateToItemPosition(bottomRight, false);
-
- // We can get NaN if the map isn't set up correctly, or the projection
- // is faulty -- probably best thing to do is abort
- if (!qIsFinite(tl.x()) || !qIsFinite(tl.y()))
- return;
- if (!qIsFinite(br.x()) || !qIsFinite(br.y()))
- return;
-
- if ( preserveGeometry_ ) {
- double unwrapBelowX = map.geoProjection().coordinateToItemPosition(geoLeftBound_, false).x();
- if (br.x() < unwrapBelowX)
- br.setX(tl.x() + screenBounds_.width());
- }
-
- QRectF re(tl.toPointF(), br.toPointF());
- re.translate(-1 * tl.toPointF());
-
- clear();
- screenVertices_.reserve(6);
-
- screenVertices_ << re.topLeft();
- screenVertices_ << re.topRight();
- screenVertices_ << re.bottomLeft();
-
- screenVertices_ << re.topRight();
- screenVertices_ << re.bottomLeft();
- screenVertices_ << re.bottomRight();
-
- firstPointOffset_ = QPointF(0,0);
- srcOrigin_ = topLeft;
- screenBounds_ = re;
-
- screenOutline_ = QPainterPath();
- screenOutline_.addRect(re);
-
- geoLeftBound_ = topLeft;
-}
-
-QDeclarativeRectangleMapItem::QDeclarativeRectangleMapItem(QQuickItem *parent)
-: QDeclarativeGeoMapItemBase(parent), color_(Qt::transparent), dirtyMaterial_(true),
- updatingGeometry_(false)
-{
- setFlag(ItemHasContents, true);
- QObject::connect(&border_, SIGNAL(colorChanged(QColor)),
- this, SLOT(markSourceDirtyAndUpdate()));
- QObject::connect(&border_, SIGNAL(widthChanged(qreal)),
- this, SLOT(markSourceDirtyAndUpdate()));
-}
-
-QDeclarativeRectangleMapItem::~QDeclarativeRectangleMapItem()
-{
-}
-
-/*!
- \internal
-*/
-void QDeclarativeRectangleMapItem::setMap(QDeclarativeGeoMap *quickMap, QGeoMap *map)
-{
- QDeclarativeGeoMapItemBase::setMap(quickMap,map);
- if (map)
- markSourceDirtyAndUpdate();
-}
-
-/*!
- \qmlpropertygroup Location::MapRectangle::border
- \qmlproperty int MapRectangle::border.width
- \qmlproperty color MapRectangle::border.color
-
- This property is part of the border property group. The border property group
- holds the width and color used to draw the border of the rectangle.
- The width is in pixels and is independent of the zoom level of the map.
-
- The default values correspond to a black border with a width of 1 pixel.
- For no line, use a width of 0 or a transparent color.
-*/
-QDeclarativeMapLineProperties *QDeclarativeRectangleMapItem::border()
-{
- return &border_;
-}
-
-/*!
- \qmlproperty coordinate MapRectangle::topLeft
-
- This property holds the top-left coordinate of the MapRectangle which
- can be used to retrieve its longitude, latitude and altitude.
-*/
-void QDeclarativeRectangleMapItem::setTopLeft(const QGeoCoordinate &topLeft)
-{
- if (topLeft_ == topLeft)
- return;
-
- topLeft_ = topLeft;
-
- markSourceDirtyAndUpdate();
- emit topLeftChanged(topLeft_);
-}
-
-QGeoCoordinate QDeclarativeRectangleMapItem::topLeft()
-{
- return topLeft_;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeRectangleMapItem::markSourceDirtyAndUpdate()
-{
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- polishAndUpdate();
-}
-
-/*!
- \qmlproperty coordinate MapRectangle::bottomRight
-
- This property holds the bottom-right coordinate of the MapRectangle which
- can be used to retrieve its longitude, latitude and altitude.
-*/
-void QDeclarativeRectangleMapItem::setBottomRight(const QGeoCoordinate &bottomRight)
-{
- if (bottomRight_ == bottomRight)
- return;
-
- bottomRight_ = bottomRight;
-
- markSourceDirtyAndUpdate();
- emit bottomRightChanged(bottomRight_);
-}
-
-QGeoCoordinate QDeclarativeRectangleMapItem::bottomRight()
-{
- return bottomRight_;
-}
-
-/*!
- \qmlproperty color MapRectangle::color
-
- This property holds the fill color of the rectangle. For no fill, use
- a transparent color.
-*/
-QColor QDeclarativeRectangleMapItem::color() const
-{
- return color_;
-}
-
-void QDeclarativeRectangleMapItem::setColor(const QColor &color)
-{
- if (color_ == color)
- return;
- color_ = color;
- dirtyMaterial_ = true;
- polishAndUpdate();
- emit colorChanged(color_);
-}
-
-/*!
- \qmlproperty real MapRectangle::opacity
-
- This property holds the opacity of the item. Opacity is specified as a
- number between 0 (fully transparent) and 1 (fully opaque). The default is 1.
-
- An item with 0 opacity will still receive mouse events. To stop mouse events, set the
- visible property of the item to false.
-*/
-
-/*!
- \internal
-*/
-QSGNode *QDeclarativeRectangleMapItem::updateMapItemPaintNode(QSGNode *oldNode, UpdatePaintNodeData *data)
-{
- Q_UNUSED(data);
-
- MapPolygonNode *node = static_cast<MapPolygonNode *>(oldNode);
-
- if (!node) {
- node = new MapPolygonNode();
- }
-
- //TODO: update only material
- if (geometry_.isScreenDirty() || borderGeometry_.isScreenDirty() || dirtyMaterial_) {
- node->update(color_, border_.color(), &geometry_, &borderGeometry_);
- geometry_.setPreserveGeometry(false);
- borderGeometry_.setPreserveGeometry(false);
- geometry_.markClean();
- borderGeometry_.markClean();
- dirtyMaterial_ = false;
- }
- return node;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeRectangleMapItem::updatePolish()
-{
- if (!map() || !topLeft().isValid() || !bottomRight().isValid())
- return;
-
- QScopedValueRollback<bool> rollback(updatingGeometry_);
- updatingGeometry_ = true;
-
- geometry_.updatePoints(*map(), topLeft_, bottomRight_);
-
- QList<QGeoCoordinate> pathClosed;
- pathClosed << topLeft_;
- pathClosed << QGeoCoordinate(topLeft_.latitude(), bottomRight_.longitude());
- pathClosed << bottomRight_;
- pathClosed << QGeoCoordinate(bottomRight_.latitude(), topLeft_.longitude());
- pathClosed << pathClosed.first();
-
- if (border_.color() != Qt::transparent && border_.width() > 0) {
- borderGeometry_.updateSourcePoints(*map(), pathClosed, topLeft_);
- borderGeometry_.updateScreenPoints(*map(), border_.width());
-
- QList<QGeoMapItemGeometry *> geoms;
- geoms << &geometry_ << &borderGeometry_;
- QRectF combined = QGeoMapItemGeometry::translateToCommonOrigin(geoms);
-
- setWidth(combined.width());
- setHeight(combined.height());
- } else {
- borderGeometry_.clear();
-
- setWidth(geometry_.screenBoundingBox().width());
- setHeight(geometry_.screenBoundingBox().height());
- }
-
- setPositionOnMap(pathClosed.at(0), geometry_.firstPointOffset());
-}
-
-/*!
- \internal
-*/
-void QDeclarativeRectangleMapItem::afterViewportChanged(const QGeoMapViewportChangeEvent &event)
-{
- if (event.mapSize.width() <= 0 || event.mapSize.height() <= 0)
- return;
-
- // if the scene is tilted, we must regenerate our geometry every frame
- if (map()->cameraCapabilities().supportsTilting()
- && (event.cameraData.tilt() > 0.1
- || event.cameraData.tilt() < -0.1)) {
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- }
-
- // if the scene is rolled, we must regen too
- if (map()->cameraCapabilities().supportsRolling()
- && (event.cameraData.roll() > 0.1
- || event.cameraData.roll() < -0.1)) {
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- }
-
- // otherwise, only regen on rotate, resize and zoom
- if (event.bearingChanged || event.mapSizeChanged || event.zoomLevelChanged) {
- geometry_.markSourceDirty();
- borderGeometry_.markSourceDirty();
- }
- geometry_.setPreserveGeometry(true, topLeft_);
- borderGeometry_.setPreserveGeometry(true, topLeft_);
- geometry_.markScreenDirty();
- borderGeometry_.markScreenDirty();
- polishAndUpdate();
-}
-
-/*!
- \internal
-*/
-bool QDeclarativeRectangleMapItem::contains(const QPointF &point) const
-{
- return (geometry_.contains(point) || borderGeometry_.contains(point));
-}
-
-/*!
- \internal
-*/
-void QDeclarativeRectangleMapItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
-{
- if (updatingGeometry_ || newGeometry.topLeft() == oldGeometry.topLeft()) {
- QDeclarativeGeoMapItemBase::geometryChanged(newGeometry, oldGeometry);
- return;
- }
-
- QDoubleVector2D newTopLeftPoint = QDoubleVector2D(x(),y());
- QGeoCoordinate newTopLeft = map()->geoProjection().itemPositionToCoordinate(newTopLeftPoint, false);
- if (newTopLeft.isValid()) {
- // calculate new geo width while checking for dateline crossing
- const double lonW = bottomRight_.longitude() > topLeft_.longitude() ?
- bottomRight_.longitude() - topLeft_.longitude() :
- bottomRight_.longitude() + 360 - topLeft_.longitude();
- const double latH = qAbs(bottomRight_.latitude() - topLeft_.latitude());
- QGeoCoordinate newBottomRight;
- // prevent dragging over valid min and max latitudes
- if (QLocationUtils::isValidLat(newTopLeft.latitude() - latH)) {
- newBottomRight.setLatitude(newTopLeft.latitude() - latH);
- } else {
- newBottomRight.setLatitude(QLocationUtils::clipLat(newTopLeft.latitude() - latH));
- newTopLeft.setLatitude(newBottomRight.latitude() + latH);
- }
- // handle dateline crossing
- newBottomRight.setLongitude(QLocationUtils::wrapLong(newTopLeft.longitude() + lonW));
- newBottomRight.setAltitude(newTopLeft.altitude());
- topLeft_ = newTopLeft;
- bottomRight_ = newBottomRight;
- geometry_.setPreserveGeometry(true, newTopLeft);
- borderGeometry_.setPreserveGeometry(true, newTopLeft);
- markSourceDirtyAndUpdate();
- emit topLeftChanged(topLeft_);
- emit bottomRightChanged(bottomRight_);
- }
-
- // Not calling QDeclarativeGeoMapItemBase::geometryChanged() as it will be called from a nested
- // call to this function.
-}
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qdeclarativerectanglemapitem_p.h b/src/imports/location/qdeclarativerectanglemapitem_p.h
deleted file mode 100644
index fb9936b0..00000000
--- a/src/imports/location/qdeclarativerectanglemapitem_p.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVERECTANGLEMAPITEM_H_
-#define QDECLARATIVERECTANGLEMAPITEM_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 "qdeclarativegeomapitembase_p.h"
-#include "qgeomapitemgeometry_p.h"
-#include "qdeclarativepolylinemapitem_p.h"
-#include <QSGGeometryNode>
-#include <QSGFlatColorMaterial>
-
-QT_BEGIN_NAMESPACE
-
-class QGeoMapRectangleGeometry : public QGeoMapItemGeometry
-{
-public:
- QGeoMapRectangleGeometry();
-
- void updatePoints(const QGeoMap &map,
- const QGeoCoordinate &topLeft,
- const QGeoCoordinate &bottomRight);
-};
-
-class MapRectangleNode;
-
-class QDeclarativeRectangleMapItem: public QDeclarativeGeoMapItemBase
-{
- Q_OBJECT
-
- Q_PROPERTY(QGeoCoordinate topLeft READ topLeft WRITE setTopLeft NOTIFY topLeftChanged)
- Q_PROPERTY(QGeoCoordinate bottomRight READ bottomRight WRITE setBottomRight NOTIFY bottomRightChanged)
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
- Q_PROPERTY(QDeclarativeMapLineProperties *border READ border)
-
-public:
- explicit QDeclarativeRectangleMapItem(QQuickItem *parent = 0);
- ~QDeclarativeRectangleMapItem();
-
- virtual void setMap(QDeclarativeGeoMap *quickMap, QGeoMap *map) Q_DECL_OVERRIDE;
- //from QuickItem
- virtual QSGNode *updateMapItemPaintNode(QSGNode *, UpdatePaintNodeData *) Q_DECL_OVERRIDE;
-
- QGeoCoordinate topLeft();
- void setTopLeft(const QGeoCoordinate &center);
-
- QGeoCoordinate bottomRight();
- void setBottomRight(const QGeoCoordinate &center);
-
- QColor color() const;
- void setColor(const QColor &color);
-
- QDeclarativeMapLineProperties *border();
-
- bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
-
-Q_SIGNALS:
- void topLeftChanged(const QGeoCoordinate &topLeft);
- void bottomRightChanged(const QGeoCoordinate &bottomRight);
- void colorChanged(const QColor &color);
-
-protected:
- void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE;
- void updatePolish() Q_DECL_OVERRIDE;
-
-protected Q_SLOTS:
- void markSourceDirtyAndUpdate();
- virtual void afterViewportChanged(const QGeoMapViewportChangeEvent &event) Q_DECL_OVERRIDE;
-
-private:
- QGeoCoordinate topLeft_;
- QGeoCoordinate bottomRight_;
- QDeclarativeMapLineProperties border_;
- QColor color_;
- bool dirtyMaterial_;
- QGeoMapRectangleGeometry geometry_;
- QGeoMapPolylineGeometry borderGeometry_;
- bool updatingGeometry_;
-};
-
-//////////////////////////////////////////////////////////////////////
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeRectangleMapItem)
-
-#endif /* QDECLARATIVERECTANGLEMAPITEM_H_ */
diff --git a/src/imports/location/qdeclarativeroutemapitem.cpp b/src/imports/location/qdeclarativeroutemapitem.cpp
deleted file mode 100644
index 19930cc3..00000000
--- a/src/imports/location/qdeclarativeroutemapitem.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qdeclarativeroutemapitem_p.h"
-#include "qdeclarativepolylinemapitem_p.h"
-#include "qgeocameracapabilities_p.h"
-#include "qdeclarativegeoroute_p.h"
-
-#include <QtQml/QQmlInfo>
-#include <QtGui/QPainter>
-
-/*!
- \qmltype MapRoute
- \instantiates QDeclarativeRouteMapItem
- \inqmlmodule QtLocation
- \ingroup qml-QtLocation5-maps
- \since Qt Location 5.0
-
- \brief The MapRoute type displays a Route on a Map.
-
- The MapRoute type displays a Route obtained through a RouteModel or
- other means, on the Map as a Polyline following the path of the Route.
-
- MapRoute is really a \l MapPolyline, but with the path specified using the
- \l route property instead of directly in \l {coordinate}{coordinates}.
-
- By default, the route is displayed as a 1-pixel thick black line. This can
- be changed using the \l line.width and \l line.color properties.
-
- \section2 Performance
-
- For notes about the performance on MapRoute, refer to the documentation for
- \l MapPolyline.
-
- \section2 Example Usage
-
- Here is how to draw a \l{Route}{route} on a \l{Map}{map}:
-
- \snippet declarative/maps.qml QtQuick import
- \snippet declarative/maps.qml QtLocation import
- \codeline
- \snippet declarative/maps.qml MapRoute
-*/
-
-/*!
- \qmlpropertygroup Location::MapRoute::line
- \qmlproperty int MapRoute::line.width
- \qmlproperty color MapRoute::line.color
-
- This property is part of the line property group. The line
- property group holds the width and color used to draw the line.
-
- The width is in pixels and is independent of the zoom level of the map.
- The default values correspond to a black border with a width of 1 pixel.
-
- For no line, use a width of 0 or a transparent color.
-*/
-
-
-QDeclarativeRouteMapItem::QDeclarativeRouteMapItem(QQuickItem *parent)
-: QDeclarativePolylineMapItem(parent), route_(0)
-{
- setFlag(ItemHasContents, true);
-}
-
-QDeclarativeRouteMapItem::~QDeclarativeRouteMapItem()
-{
-}
-
-/*!
- \qmlproperty Route MapRoute::route
-
- This property holds the route to be drawn which can be used
- to represent one geographical route.
-*/
-QDeclarativeGeoRoute *QDeclarativeRouteMapItem::route() const
-{
- return route_;
-}
-
-void QDeclarativeRouteMapItem::setRoute(QDeclarativeGeoRoute *route)
-{
- if (route_ == route)
- return;
-
- route_ = route;
-
- connect(route_, SIGNAL(pathChanged()), this, SLOT(updateRoutePath()));
-
- if (route_)
- setPathFromGeoList(route_->routePath());
-
- emit routeChanged(route_);
-}
-
-void QDeclarativeRouteMapItem::updateRoutePath()
-{
- setPathFromGeoList(route_->routePath());
-}
-
-/*!
- \internal void QDeclarativeRouteMapItem::setPath(const QJSValue &value)
-
- Used to disable path property on the RouteMapItem
- */
-void QDeclarativeRouteMapItem::setPath(const QJSValue &value)
-{
- Q_UNUSED(value);
- qWarning() << "Can not set the path on QDeclarativeRouteMapItem."
- << "Please use the route property instead.";
-}
diff --git a/src/imports/location/qdeclarativeroutemapitem_p.h b/src/imports/location/qdeclarativeroutemapitem_p.h
deleted file mode 100644
index 3acac3cc..00000000
--- a/src/imports/location/qdeclarativeroutemapitem_p.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QDECLARATIVEROUTEMAPITEM_H_
-#define QDECLARATIVEROUTEMAPITEM_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 "qdeclarativegeomapitembase_p.h"
-#include "qdeclarativegeomap_p.h"
-#include "qdeclarativepolylinemapitem_p.h"
-#include <QPen>
-#include <QBrush>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeGeoRoute;
-
-class QDeclarativeRouteMapItem : public QDeclarativePolylineMapItem
-{
- Q_OBJECT
-
- Q_PROPERTY(QDeclarativeGeoRoute *route READ route WRITE setRoute NOTIFY routeChanged)
-
-public:
- explicit QDeclarativeRouteMapItem(QQuickItem *parent = 0);
- ~QDeclarativeRouteMapItem();
-
- QDeclarativeGeoRoute *route() const;
- void setRoute(QDeclarativeGeoRoute *route);
-
-Q_SIGNALS:
- void routeChanged(const QDeclarativeGeoRoute *route);
-
-private slots:
- void updateRoutePath();
-
-protected:
- void setPath(const QJSValue &value) Q_DECL_OVERRIDE;
-
-private:
- QDeclarativeGeoRoute *route_;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeRouteMapItem)
-
-#endif /* QDECLARATIVEROUTEMAPITEM_H_ */
diff --git a/src/imports/location/qgeomapitemgeometry.cpp b/src/imports/location/qgeomapitemgeometry.cpp
deleted file mode 100644
index ab90d0dd..00000000
--- a/src/imports/location/qgeomapitemgeometry.cpp
+++ /dev/null
@@ -1,140 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qgeomapitemgeometry_p.h"
-#include "qdeclarativegeomap_p.h"
-#include "qlocationutils_p.h"
-#include <QtQuick/QSGGeometry>
-#include "qdoublevector2d_p.h"
-
-QT_BEGIN_NAMESPACE
-
-QGeoMapItemGeometry::QGeoMapItemGeometry()
-: sourceDirty_(true), screenDirty_(true), clipToViewport_(true), preserveGeometry_(false)
-{
-}
-
-/*!
- \internal
-*/
-void QGeoMapItemGeometry::translate(const QPointF &offset)
-{
- for (int i = 0; i < screenVertices_.size(); ++i)
- screenVertices_[i] += offset;
-
- firstPointOffset_ += offset;
- screenOutline_.translate(offset);
- screenBounds_.translate(offset);
-}
-
-/*!
- \internal
-*/
-void QGeoMapItemGeometry::allocateAndFill(QSGGeometry *geom) const
-{
- const QVector<QPointF> &vx = screenVertices_;
- const QVector<quint32> &ix = screenIndices_;
-
- if (isIndexed()) {
- geom->allocate(vx.size(), ix.size());
- if (geom->indexType() == QSGGeometry::UnsignedShortType) {
- quint16 *its = geom->indexDataAsUShort();
- for (int i = 0; i < ix.size(); ++i)
- its[i] = ix[i];
- } else if (geom->indexType() == QSGGeometry::UnsignedIntType) {
- quint32 *its = geom->indexDataAsUInt();
- for (int i = 0; i < ix.size(); ++i)
- its[i] = ix[i];
- }
- } else {
- geom->allocate(vx.size());
- }
-
- QSGGeometry::Point2D *pts = geom->vertexDataAsPoint2D();
- for (int i = 0; i < vx.size(); ++i)
- pts[i].set(vx[i].x(), vx[i].y());
-}
-
-/*!
- \internal
-*/
-QRectF QGeoMapItemGeometry::translateToCommonOrigin(const QList<QGeoMapItemGeometry *> &geoms)
-{
- QGeoCoordinate origin = geoms.at(0)->origin();
-
- QPainterPath brects;
-
- // first get max offset
- QPointF maxOffset = geoms.at(0)->firstPointOffset();
- foreach (QGeoMapItemGeometry *g, geoms) {
- Q_ASSERT(g->origin() == origin);
- QPointF o = g->firstPointOffset();
- maxOffset.setX(qMax(o.x(), maxOffset.x()));
- maxOffset.setY(qMax(o.y(), maxOffset.y()));
- }
-
- // then translate everything
- foreach (QGeoMapItemGeometry *g, geoms) {
- g->translate(maxOffset - g->firstPointOffset());
- brects.addRect(g->sourceBoundingBox());
- }
-
- return brects.boundingRect();
-}
-
-/*!
- \internal
-*/
-double QGeoMapItemGeometry::geoDistanceToScreenWidth(const QGeoMap &map,
- const QGeoCoordinate &fromCoord,
- const QGeoCoordinate &toCoord)
-{
- // Do not wrap around half the globe
- Q_ASSERT(!qFuzzyCompare(fromCoord.longitude(), toCoord.longitude()));
-
- QGeoCoordinate mapMid = map.geoProjection().itemPositionToCoordinate(QDoubleVector2D(map.viewportWidth()/2.0, 0));
- double halfGeoDist = toCoord.longitude() - fromCoord.longitude();
- if (toCoord.longitude() < fromCoord.longitude())
- halfGeoDist += 360;
- halfGeoDist /= 2.0;
- QGeoCoordinate geoDelta = QGeoCoordinate(0,
- QLocationUtils::wrapLong(mapMid.longitude() + halfGeoDist));
- QDoubleVector2D halfScreenDist = map.geoProjection().coordinateToItemPosition(geoDelta, false)
- - QDoubleVector2D(map.viewportWidth()/2.0, 0);
- return halfScreenDist.x() * 2.0;
-}
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qgeomapitemgeometry_p.h b/src/imports/location/qgeomapitemgeometry_p.h
deleted file mode 100644
index 36b670f9..00000000
--- a/src/imports/location/qgeomapitemgeometry_p.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/****************************************************************************
- **
- ** Copyright (C) 2015 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 QGEOMAPITEMGEOMETRY_H
-#define QGEOMAPITEMGEOMETRY_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 <QPainterPath>
-#include <QPointF>
-#include <QRectF>
-#include <QVector>
-#include <QGeoCoordinate>
-#include <QVector2D>
-#include <QList>
-
-QT_BEGIN_NAMESPACE
-
-class QSGGeometry;
-class QGeoMap;
-
-class QGeoMapItemGeometry
-{
-public:
- QGeoMapItemGeometry();
-
- inline bool isSourceDirty() const { return sourceDirty_; }
- inline bool isScreenDirty() const { return screenDirty_; }
- inline void markSourceDirty() { sourceDirty_ = true; screenDirty_ = true; }
- inline void markScreenDirty() { screenDirty_ = true; clipToViewport_ = true; }
- inline void markFullScreenDirty() { screenDirty_ = true; clipToViewport_ = false;}
- inline void markClean() { screenDirty_ = (sourceDirty_ = false); clipToViewport_ = true;}
-
- inline void setPreserveGeometry(bool value, QGeoCoordinate geoLeftBound = QGeoCoordinate())
- {
- preserveGeometry_ = value;
- if (preserveGeometry_)
- geoLeftBound_ = geoLeftBound;
- }
- inline QGeoCoordinate geoLeftBound() { return geoLeftBound_; }
-
- inline QRectF sourceBoundingBox() const { return sourceBounds_; }
- inline QRectF screenBoundingBox() const { return screenBounds_; }
-
- inline QPointF firstPointOffset() const { return firstPointOffset_; }
- void translate(const QPointF &offset);
-
- inline const QGeoCoordinate &origin() const { return srcOrigin_; }
-
- inline bool contains(const QPointF &screenPoint) const {
- return screenOutline_.contains(screenPoint);
- }
-
- inline QVector2D vertex(quint32 index) const {
- return QVector2D(screenVertices_[index]);
- }
-
- inline QVector<QPointF> vertices() const { return screenVertices_; }
- inline QVector<quint32> indices() const { return screenIndices_; }
-
- inline bool isIndexed() const { return (!screenIndices_.isEmpty()); }
-
- /* Size is # of triangles */
- inline quint32 size() const
- {
- if (isIndexed())
- return screenIndices_.size() / 3;
- else
- return screenVertices_.size() / 3;
- }
-
- inline void clear() { firstPointOffset_ = QPointF(0,0);
- screenVertices_.clear(); screenIndices_.clear(); }
-
- void allocateAndFill(QSGGeometry *geom) const;
-
- double geoDistanceToScreenWidth(const QGeoMap &map,
- const QGeoCoordinate &fromCoord,
- const QGeoCoordinate &toCoord);
-
- static QRectF translateToCommonOrigin(const QList<QGeoMapItemGeometry *> &geoms);
-
-
-protected:
- bool sourceDirty_;
- bool screenDirty_;
- bool clipToViewport_;
- bool preserveGeometry_;
- QGeoCoordinate geoLeftBound_;
-
- QPointF firstPointOffset_;
-
- QPainterPath screenOutline_;
-
- QRectF sourceBounds_;
- QRectF screenBounds_;
-
- QGeoCoordinate srcOrigin_;
-
- QVector<QPointF> screenVertices_;
- QVector<quint32> screenIndices_;
-};
-
-QT_END_NAMESPACE
-
-#endif // QGEOMAPITEMGEOMETRY_H
diff --git a/src/imports/location/qquickgeomapgesturearea.cpp b/src/imports/location/qquickgeomapgesturearea.cpp
deleted file mode 100644
index 50709292..00000000
--- a/src/imports/location/qquickgeomapgesturearea.cpp
+++ /dev/null
@@ -1,1288 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 "qquickgeomapgesturearea_p.h"
-#include "qdeclarativegeomap_p.h"
-#include "error_messages.h"
-
-#include <QtGui/QGuiApplication>
-#include <QtGui/qevent.h>
-#include <QtGui/QWheelEvent>
-#include <QtGui/QStyleHints>
-#include <QtQml/qqmlinfo.h>
-#include <QtQuick/QQuickWindow>
-#include <QPropertyAnimation>
-#include <QDebug>
-#include <QtPositioning/private/qwebmercator_p.h>
-#include "math.h"
-#include "qgeomap_p.h"
-#include "qdoublevector2d_p.h"
-
-#define QML_MAP_FLICK_DEFAULTMAXVELOCITY 2500
-#define QML_MAP_FLICK_MINIMUMDECELERATION 500
-#define QML_MAP_FLICK_DEFAULTDECELERATION 2500
-#define QML_MAP_FLICK_MAXIMUMDECELERATION 10000
-
-#define QML_MAP_FLICK_VELOCITY_SAMPLE_PERIOD 50
-// FlickThreshold determines how far the "mouse" must have moved
-// before we perform a flick.
-static const int FlickThreshold = 20;
-// Really slow flicks can be annoying.
-const qreal MinimumFlickVelocity = 75.0;
-
-QT_BEGIN_NAMESPACE
-
-
-/*!
- \qmltype MapPinchEvent
- \instantiates QGeoMapPinchEvent
- \inqmlmodule QtLocation
-
- \brief MapPinchEvent type provides basic information about pinch event.
-
- MapPinchEvent type provides basic information about pinch event. They are
- present in handlers of MapPinch (for example pinchStarted/pinchUpdated). Events are only
- guaranteed to be valid for the duration of the handler.
-
- Except for the \l accepted property, all properties are read-only.
-
- \section2 Example Usage
-
- The following example enables the pinch gesture on a map and reacts to the
- finished event.
-
- \code
- Map {
- id: map
- gesture.enabled: true
- gesture.onPinchFinished:{
- var coordinate1 = map.toCoordinate(gesture.point1)
- var coordinate2 = map.toCoordinate(gesture.point2)
- console.log("Pinch started at:")
- console.log(" Points (" + gesture.point1.x + ", " + gesture.point1.y + ") - (" + gesture.point2.x + ", " + gesture.point2.y + ")")
- console.log(" Coordinates (" + coordinate1.latitude + ", " + coordinate1.longitude + ") - (" + coordinate2.latitude + ", " + coordinate2.longitude + ")")
- }
- }
- \endcode
-
- \ingroup qml-QtLocation5-maps
- \since Qt Location 5.0
-*/
-
-/*!
- \qmlproperty QPoint QtLocation::MapPinchEvent::center
-
- This read-only property holds the current center point.
-*/
-
-/*!
- \qmlproperty real QtLocation::MapPinchEvent::angle
-
- This read-only property holds the current angle between the two points in
- the range -180 to 180. Positive values for the angles mean counter-clockwise
- while negative values mean the clockwise direction. Zero degrees is at the
- 3 o'clock position.
-*/
-
-/*!
- \qmlproperty QPoint QtLocation::MapPinchEvent::point1
- \qmlproperty QPoint QtLocation::MapPinchEvent::point2
-
- These read-only properties hold the actual touch points generating the pinch.
- The points are not in any particular order.
-*/
-
-/*!
- \qmlproperty int QtLocation::MapPinchEvent::pointCount
-
- This read-only property holds the number of points currently touched.
- The MapPinch will not react until two touch points have initiated a gesture,
- but will remain active until all touch points have been released.
-*/
-
-/*!
- \qmlproperty bool QtLocation::MapPinchEvent::accepted
-
- Setting this property to false in the \c MapPinch::onPinchStarted handler
- will result in no further pinch events being generated, and the gesture
- ignored.
-*/
-
-/*!
- \qmltype MapGestureArea
- \instantiates QQuickGeoMapGestureArea
-
- \inqmlmodule QtLocation
-
- \brief The MapGestureArea type provides Map gesture interaction.
-
- MapGestureArea objects are used as part of a Map, to provide for panning,
- flicking and pinch-to-zoom gesture used on touch displays.
-
- A MapGestureArea is automatically created with a new Map and available with
- the \l{Map::gesture}{gesture} property. This is the only way
- to create a MapGestureArea, and once created this way cannot be destroyed
- without its parent Map.
-
- The two most commonly used properties of the MapGestureArea are the \l enabled
- and \l acceptedGestures properties. Both of these must be set before a
- MapGestureArea will have any effect upon interaction with the Map.
- The \l flickDeceleration property controls how quickly the map pan slows after contact
- is released while panning the map.
-
- \section2 Performance
-
- The MapGestureArea, when enabled, must process all incoming touch events in
- order to track the shape and size of the "pinch". The overhead added on
- touch events can be considered constant time.
-
- \section2 Example Usage
-
- The following example enables the pinch and pan gestures on the map, but not flicking. So the
- map scrolling will halt immediately on releasing the mouse button / touch.
-
- \code
- Map {
- gesture.enabled: true
- gesture.acceptedGestures: MapGestureArea.PinchGesture | MapGestureArea.PanGesture
- }
- \endcode
-
- \ingroup qml-QtLocation5-maps
- \since Qt Location 5.0
-*/
-
-/*!
- \qmlproperty bool QtLocation::MapGestureArea::enabled
-
- This property holds whether the gestures are enabled.
-*/
-
-/*!
- \qmlproperty bool QtLocation::MapGestureArea::pinchActive
-
- This read-only property holds whether pinch gesture is active.
-*/
-
-/*!
- \qmlproperty bool QtLocation::MapGestureArea::panActive
-
- This read-only property holds whether pan gesture is active.
-
- \note Change notifications for this property were introduced in Qt 5.5.
-*/
-
-/*!
- \qmlproperty real QtLocation::MapGestureArea::maximumZoomLevelChange
-
- This property holds the maximum zoom level change per pinch, essentially
- meant to be used for setting the zoom sensitivity.
-
- It is an indicative measure calculated from the dimensions of the
- map area, roughly corresponding how much zoom level could change with
- maximum pinch zoom. Default value is 4.0, maximum value is 10.0
-*/
-
-/*!
- \qmlproperty real MapGestureArea::flickDeceleration
-
- This property holds the rate at which a flick will decelerate.
-
- The default value is 2500.
-*/
-
-/*!
- \qmlsignal QtLocation::MapGestureArea::pinchStarted(PinchEvent event)
-
- This signal is emitted when a pinch gesture is started.
-
- The corresponding handler is \c onPinchStarted.
-
- \sa pinchUpdated, pinchFinished
-*/
-
-/*!
- \qmlsignal QtLocation::MapGestureArea::pinchUpdated(PinchEvent event)
-
- This signal is emitted as the user's fingers move across the map,
- after the \l pinchStarted signal is emitted.
-
- The corresponding handler is \c onPinchUpdated.
-
- \sa pinchStarted, pinchFinished
-*/
-
-/*!
- \qmlsignal QtLocation::MapGestureArea::pinchFinished(PinchEvent event)
-
- This signal is emitted at the end of a pinch gesture.
-
- The corresponding handler is \c onPinchFinished.
-
- \sa pinchStarted, pinchUpdated
-*/
-
-/*!
- \qmlsignal QtLocation::MapGestureArea::panStarted()
-
- This signal is emitted when the map begins to move due to user
- interaction. Typically this means that the user is dragging a finger -
- or a mouse with one of more mouse buttons pressed - on the map.
-
- The corresponding handler is \c onPanStarted.
-*/
-
-/*!
- \qmlsignal QtLocation::MapGestureArea::panFinished()
-
- This signal is emitted when the map stops moving due to user
- interaction. If a flick was generated, this signal is
- emitted before flick starts. If a flick was not
- generated, this signal is emitted when the
- user stops dragging - that is a mouse or touch release.
-
- The corresponding handler is \c onPanFinished.
-
-*/
-
-/*!
- \qmlsignal QtLocation::MapGestureArea::flickStarted()
-
- This signal is emitted when the map is flicked. A flick
- starts from the point where the mouse or touch was released,
- while still in motion.
-
- The corresponding handler is \c onFlichStarted.
-*/
-
-/*!
- \qmlsignal QtLocation::MapGestureArea::flickFinished()
-
- This signal is emitted when the map stops moving due to a flick.
-
- The corresponding handler is \c onFlickFinished.
-*/
-
-QQuickGeoMapGestureArea::QQuickGeoMapGestureArea(QDeclarativeGeoMap *map)
- : QQuickItem(map),
- m_map(0),
- m_declarativeMap(map),
- m_enabled(true),
- m_acceptedGestures(PinchGesture | PanGesture | FlickGesture),
- m_preventStealing(false),
- m_panEnabled(true)
-{
- m_flick.m_enabled = true,
- m_flick.m_maxVelocity = QML_MAP_FLICK_DEFAULTMAXVELOCITY;
- m_flick.m_deceleration = QML_MAP_FLICK_DEFAULTDECELERATION;
- m_flick.m_animation = 0;
- m_touchPointState = touchPoints0;
- m_pinchState = pinchInactive;
- m_flickState = flickInactive;
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::setMap(QGeoMap *map)
-{
- if (m_map || !map)
- return;
-
- m_map = map;
- m_flick.m_animation = new QQuickGeoCoordinateAnimation(this);
- m_flick.m_animation->setTargetObject(m_declarativeMap);
- m_flick.m_animation->setProperty(QStringLiteral("center"));
- m_flick.m_animation->setEasing(QEasingCurve(QEasingCurve::OutQuad));
- connect(m_flick.m_animation, &QQuickAbstractAnimation::stopped, this, &QQuickGeoMapGestureArea::handleFlickAnimationStopped);
-}
-
-/*!
- \qmlproperty bool QtQuick::MapGestureArea::preventStealing
- This property holds whether the mouse events may be stolen from this
- MapGestureArea.
-
- If a Map is placed within an item that filters child mouse
- and touch events, such as Flickable, the mouse and touch events
- may be stolen from the MapGestureArea if a gesture is recognized
- by the parent item, e.g. a flick gesture. If preventStealing is
- set to true, no item will steal the mouse and touch events.
-
- Note that setting preventStealing to true once an item has started
- stealing events will have no effect until the next press event.
-
- By default this property is false.
-*/
-
-bool QQuickGeoMapGestureArea::preventStealing() const
-{
- return m_preventStealing;
-}
-
-void QQuickGeoMapGestureArea::setPreventStealing(bool prevent)
-{
- if (prevent != m_preventStealing) {
- m_preventStealing = prevent;
- m_declarativeMap->setKeepMouseGrab(m_preventStealing && m_enabled);
- m_declarativeMap->setKeepTouchGrab(m_preventStealing && m_enabled);
- emit preventStealingChanged();
- }
-}
-
-QQuickGeoMapGestureArea::~QQuickGeoMapGestureArea()
-{
-}
-
-/*!
- \qmlproperty enumeration QtLocation::MapGestureArea::acceptedGestures
-
- This property holds the gestures that will be active. By default
- the zoom, pan and flick gestures are enabled.
-
- \list
- \li MapGestureArea.NoGesture - Don't support any additional gestures (value: 0x0000).
- \li MapGestureArea.PinchGesture - Support the map pinch gesture (value: 0x0001).
- \li MapGestureArea.PanGesture - Support the map pan gesture (value: 0x0002).
- \li MapGestureArea.FlickGesture - Support the map flick gesture (value: 0x0004).
- \endlist
-*/
-
-QQuickGeoMapGestureArea::AcceptedGestures QQuickGeoMapGestureArea::acceptedGestures() const
-{
- return m_acceptedGestures;
-}
-
-
-void QQuickGeoMapGestureArea::setAcceptedGestures(AcceptedGestures acceptedGestures)
-{
- if (acceptedGestures == m_acceptedGestures)
- return;
- m_acceptedGestures = acceptedGestures;
-
- setPanEnabled(acceptedGestures & PanGesture);
- setFlickEnabled(acceptedGestures & FlickGesture);
- setPinchEnabled(acceptedGestures & PinchGesture);
-
- emit acceptedGesturesChanged();
-}
-
-/*!
- \internal
-*/
-bool QQuickGeoMapGestureArea::isPinchActive() const
-{
- return m_pinchState == pinchActive;
-}
-
-/*!
- \internal
-*/
-bool QQuickGeoMapGestureArea::isPanActive() const
-{
- return m_flickState == panActive || m_flickState == flickActive;
-}
-
-/*!
- \internal
-*/
-bool QQuickGeoMapGestureArea::enabled() const
-{
- return m_enabled;
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::setEnabled(bool enabled)
-{
- if (enabled == m_enabled)
- return;
- m_enabled = enabled;
-
- if (enabled) {
- setPanEnabled(m_acceptedGestures & PanGesture);
- setFlickEnabled(m_acceptedGestures & FlickGesture);
- setPinchEnabled(m_acceptedGestures & PinchGesture);
- } else {
- setPanEnabled(false);
- setFlickEnabled(false);
- setPinchEnabled(false);
- }
-
- emit enabledChanged();
-}
-
-
-/*!
- \internal
-*/
-bool QQuickGeoMapGestureArea::pinchEnabled() const
-{
- return m_pinch.m_enabled;
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::setPinchEnabled(bool enabled)
-{
- if (enabled == m_pinch.m_enabled)
- return;
- m_pinch.m_enabled = enabled;
-}
-
-/*!
- \internal
-*/
-bool QQuickGeoMapGestureArea::panEnabled() const
-{
- return m_panEnabled;
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::setPanEnabled(bool enabled)
-{
- if (enabled == m_flick.m_enabled)
- return;
- m_panEnabled = enabled;
-
- // unlike the pinch, the pan existing functionality is to stop immediately
- if (!enabled)
- stopPan();
-}
-
-/*!
- \internal
-*/
-bool QQuickGeoMapGestureArea::flickEnabled() const
-{
- return m_flick.m_enabled;
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::setFlickEnabled(bool enabled)
-{
- if (enabled == m_flick.m_enabled)
- return;
- m_flick.m_enabled = enabled;
- // unlike the pinch, the flick existing functionality is to stop immediately
- if (!enabled) {
- stopFlick();
- }
-}
-
-/*!
- \internal
- Used internally to set the minimum zoom level of the gesture area.
- The caller is responsible to only send values that are valid
- for the map plugin. Negative values are ignored.
- */
-void QQuickGeoMapGestureArea::setMinimumZoomLevel(qreal min)
-{
- if (min >= 0)
- m_pinch.m_zoom.m_minimum = min;
-}
-
-/*!
- \internal
- */
-qreal QQuickGeoMapGestureArea::minimumZoomLevel() const
-{
- return m_pinch.m_zoom.m_minimum;
-}
-
-/*!
- \internal
- Used internally to set the maximum zoom level of the gesture area.
- The caller is responsible to only send values that are valid
- for the map plugin. Negative values are ignored.
- */
-void QQuickGeoMapGestureArea::setMaximumZoomLevel(qreal max)
-{
- if (max >= 0)
- m_pinch.m_zoom.m_maximum = max;
-}
-
-/*!
- \internal
- */
-qreal QQuickGeoMapGestureArea::maximumZoomLevel() const
-{
- return m_pinch.m_zoom.m_maximum;
-}
-
-/*!
- \internal
-*/
-qreal QQuickGeoMapGestureArea::maximumZoomLevelChange() const
-{
- return m_pinch.m_zoom.maximumChange;
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::setMaximumZoomLevelChange(qreal maxChange)
-{
- if (maxChange == m_pinch.m_zoom.maximumChange || maxChange < 0.1 || maxChange > 10.0)
- return;
- m_pinch.m_zoom.maximumChange = maxChange;
- emit maximumZoomLevelChangeChanged();
-}
-
-/*!
- \internal
-*/
-qreal QQuickGeoMapGestureArea::flickDeceleration() const
-{
- return m_flick.m_deceleration;
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::setFlickDeceleration(qreal deceleration)
-{
- if (deceleration < QML_MAP_FLICK_MINIMUMDECELERATION)
- deceleration = QML_MAP_FLICK_MINIMUMDECELERATION;
- else if (deceleration > QML_MAP_FLICK_MAXIMUMDECELERATION)
- deceleration = QML_MAP_FLICK_MAXIMUMDECELERATION;
- if (deceleration == m_flick.m_deceleration)
- return;
- m_flick.m_deceleration = deceleration;
- emit flickDecelerationChanged();
-}
-
-/*!
- \internal
-*/
-QTouchEvent::TouchPoint* createTouchPointFromMouseEvent(QMouseEvent *event, Qt::TouchPointState state)
-{
- // this is only partially filled. But since it is only partially used it works
- // more robust would be to store a list of QPointFs rather than TouchPoints
- QTouchEvent::TouchPoint* newPoint = new QTouchEvent::TouchPoint();
- newPoint->setPos(event->localPos());
- newPoint->setScenePos(event->windowPos());
- newPoint->setScreenPos(event->screenPos());
- newPoint->setState(state);
- newPoint->setId(0);
- return newPoint;
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::handleMousePressEvent(QMouseEvent *event)
-{
- m_mousePoint.reset(createTouchPointFromMouseEvent(event, Qt::TouchPointPressed));
- if (m_touchPoints.isEmpty()) update();
- event->accept();
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::handleMouseMoveEvent(QMouseEvent *event)
-{
- m_mousePoint.reset(createTouchPointFromMouseEvent(event, Qt::TouchPointMoved));
- if (m_touchPoints.isEmpty()) update();
- event->accept();
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::handleMouseReleaseEvent(QMouseEvent *event)
-{
- if (!m_mousePoint.isNull()) {
- //this looks super ugly , however is required in case we do not get synthesized MouseReleaseEvent
- //and we reset the point already in handleTouchUngrabEvent
- m_mousePoint.reset(createTouchPointFromMouseEvent(event, Qt::TouchPointReleased));
- if (m_touchPoints.isEmpty()) update();
- }
- event->accept();
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::handleMouseUngrabEvent()
-{
-
- if (m_touchPoints.isEmpty() && !m_mousePoint.isNull()) {
- m_mousePoint.reset();
- update();
- } else {
- m_mousePoint.reset();
- }
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::handleTouchUngrabEvent()
-{
- m_touchPoints.clear();
- //this is needed since in some cases mouse release is not delivered
- //(second touch point breaks mouse synthesized events)
- m_mousePoint.reset();
- update();
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::handleTouchEvent(QTouchEvent *event)
-{
- m_touchPoints.clear();
- m_mousePoint.reset();
-
- for (int i = 0; i < event->touchPoints().count(); ++i) {
- auto point = event->touchPoints().at(i);
- if (point.state() != Qt::TouchPointReleased)
- m_touchPoints << point;
- }
- if (event->touchPoints().count() >= 2)
- event->accept();
- else
- event->ignore();
- update();
-}
-
-void QQuickGeoMapGestureArea::handleWheelEvent(QWheelEvent *event)
-{
- if (!m_map)
- return;
-
- QGeoCoordinate wheelGeoPos = m_map->geoProjection().itemPositionToCoordinate(QDoubleVector2D(event->posF()), false);
- QPointF preZoomPoint = m_map->geoProjection().coordinateToItemPosition(wheelGeoPos, false).toPointF();
-
- double zoomLevelDelta = event->angleDelta().y() * qreal(0.001);
- m_declarativeMap->setZoomLevel(m_declarativeMap->zoomLevel() + zoomLevelDelta);
- QPointF postZoomPoint = m_map->geoProjection().coordinateToItemPosition(wheelGeoPos, false).toPointF();
-
- if (preZoomPoint != postZoomPoint)
- {
- qreal dx = postZoomPoint.x() - preZoomPoint.x();
- qreal dy = postZoomPoint.y() - preZoomPoint.y();
- QPointF mapCenterPoint(m_map->viewportWidth() / 2.0 + dx, m_map->viewportHeight() / 2.0 + dy);
-
- QGeoCoordinate mapCenterCoordinate = m_map->geoProjection().itemPositionToCoordinate(QDoubleVector2D(mapCenterPoint), false);
- m_declarativeMap->setCenter(mapCenterCoordinate);
- }
- event->accept();
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::clearTouchData()
-{
- m_velocityX = 0;
- m_velocityY = 0;
- m_sceneCenter.setX(0);
- m_sceneCenter.setY(0);
- m_touchCenterCoord.setLongitude(0);
- m_touchCenterCoord.setLatitude(0);
- m_startCoord.setLongitude(0);
- m_startCoord.setLatitude(0);
-}
-
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::updateVelocityList(const QPointF &pos)
-{
- // Take velocity samples every sufficient period of time, used later to determine the flick
- // duration and speed (when mouse is released).
- qreal elapsed = qreal(m_lastPosTime.elapsed());
-
- if (elapsed >= QML_MAP_FLICK_VELOCITY_SAMPLE_PERIOD) {
- elapsed /= 1000.;
- int dyFromLastPos = pos.y() - m_lastPos.y();
- int dxFromLastPos = pos.x() - m_lastPos.x();
- m_lastPos = pos;
- m_lastPosTime.restart();
- qreal velX = qreal(dxFromLastPos) / elapsed;
- qreal velY = qreal(dyFromLastPos) / elapsed;
- m_velocityX = qBound<qreal>(-m_flick.m_maxVelocity, velX, m_flick.m_maxVelocity);
- m_velocityY = qBound<qreal>(-m_flick.m_maxVelocity, velY, m_flick.m_maxVelocity);
- }
-}
-
-/*!
- \internal
-*/
-
-bool QQuickGeoMapGestureArea::isActive() const
-{
- return isPanActive() || isPinchActive();
-}
-
-/*!
- \internal
-*/
-// simplify the gestures by using a state-machine format (easy to move to a future state machine)
-void QQuickGeoMapGestureArea::update()
-{
- if (!m_map)
- return;
-
- // First state machine is for the number of touch points
-
- //combine touch with mouse event
- m_allPoints.clear();
- m_allPoints << m_touchPoints;
- if (m_allPoints.isEmpty() && !m_mousePoint.isNull())
- m_allPoints << *m_mousePoint.data();
-
- touchPointStateMachine();
-
- // Parallel state machine for pinch
- if (isPinchActive() || (m_enabled && m_pinch.m_enabled && (m_acceptedGestures & (PinchGesture))))
- pinchStateMachine();
-
- // Parallel state machine for pan (since you can pan at the same time as pinching)
- // The stopPan function ensures that pan stops immediately when disabled,
- // but the line below allows pan continue its current gesture if you disable
- // the whole gesture (enabled_ flag), this keeps the enabled_ consistent with the pinch
- if (isPanActive() || (m_enabled && m_flick.m_enabled && (m_acceptedGestures & (PanGesture | FlickGesture))))
- panStateMachine();
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::touchPointStateMachine()
-{
- // Transitions:
- switch (m_touchPointState) {
- case touchPoints0:
- if (m_allPoints.count() == 1) {
- clearTouchData();
- startOneTouchPoint();
- m_touchPointState = touchPoints1;
- } else if (m_allPoints.count() >= 2) {
- clearTouchData();
- startTwoTouchPoints();
- m_touchPointState = touchPoints2;
- }
- break;
- case touchPoints1:
- if (m_allPoints.count() == 0) {
- m_touchPointState = touchPoints0;
- } else if (m_allPoints.count() == 2) {
- m_touchCenterCoord = m_map->geoProjection().itemPositionToCoordinate(QDoubleVector2D(m_sceneCenter), false);
- startTwoTouchPoints();
- m_touchPointState = touchPoints2;
- }
- break;
- case touchPoints2:
- if (m_allPoints.count() == 0) {
- m_touchPointState = touchPoints0;
- } else if (m_allPoints.count() == 1) {
- m_touchCenterCoord = m_map->geoProjection().itemPositionToCoordinate(QDoubleVector2D(m_sceneCenter), false);
- startOneTouchPoint();
- m_touchPointState = touchPoints1;
- }
- break;
- };
-
- // Update
- switch (m_touchPointState) {
- case touchPoints0:
- break; // do nothing if no touch points down
- case touchPoints1:
- updateOneTouchPoint();
- break;
- case touchPoints2:
- updateTwoTouchPoints();
- break;
- }
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::startOneTouchPoint()
-{
- m_sceneStartPoint1 = mapFromScene(m_allPoints.at(0).scenePos());
- m_lastPos = m_sceneStartPoint1;
- m_lastPosTime.start();
- QGeoCoordinate startCoord = m_map->geoProjection().itemPositionToCoordinate(QDoubleVector2D(m_sceneStartPoint1), false);
- // ensures a smooth transition for panning
- m_startCoord.setLongitude(m_startCoord.longitude() + startCoord.longitude() -
- m_touchCenterCoord.longitude());
- m_startCoord.setLatitude(m_startCoord.latitude() + startCoord.latitude() -
- m_touchCenterCoord.latitude());
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::updateOneTouchPoint()
-{
- m_sceneCenter = mapFromScene(m_allPoints.at(0).scenePos());
- updateVelocityList(m_sceneCenter);
-}
-
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::startTwoTouchPoints()
-{
- m_sceneStartPoint1 = mapFromScene(m_allPoints.at(0).scenePos());
- m_sceneStartPoint2 = mapFromScene(m_allPoints.at(1).scenePos());
- QPointF startPos = (m_sceneStartPoint1 + m_sceneStartPoint2) * 0.5;
- m_lastPos = startPos;
- m_lastPosTime.start();
- QGeoCoordinate startCoord = m_map->geoProjection().itemPositionToCoordinate(QDoubleVector2D(startPos), false);
- m_startCoord.setLongitude(m_startCoord.longitude() + startCoord.longitude() -
- m_touchCenterCoord.longitude());
- m_startCoord.setLatitude(m_startCoord.latitude() + startCoord.latitude() -
- m_touchCenterCoord.latitude());
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::updateTwoTouchPoints()
-{
- QPointF p1 = mapFromScene(m_allPoints.at(0).scenePos());
- QPointF p2 = mapFromScene(m_allPoints.at(1).scenePos());
- qreal dx = p1.x() - p2.x();
- qreal dy = p1.y() - p2.y();
- m_distanceBetweenTouchPoints = sqrt(dx * dx + dy * dy);
- m_sceneCenter = (p1 + p2) / 2;
- updateVelocityList(m_sceneCenter);
-
- m_twoTouchAngle = QLineF(p1, p2).angle();
- if (m_twoTouchAngle > 180)
- m_twoTouchAngle -= 360;
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::pinchStateMachine()
-{
- PinchState lastState = m_pinchState;
- // Transitions:
- switch (m_pinchState) {
- case pinchInactive:
- if (m_allPoints.count() >= 2) {
- if (canStartPinch()) {
- m_declarativeMap->setKeepMouseGrab(true);
- m_declarativeMap->setKeepTouchGrab(true);
- startPinch();
- m_pinchState = pinchActive;
- } else {
- m_pinchState = pinchInactiveTwoPoints;
- }
- }
- break;
- case pinchInactiveTwoPoints:
- if (m_allPoints.count() <= 1) {
- m_pinchState = pinchInactive;
- } else {
- if (canStartPinch()) {
- m_declarativeMap->setKeepMouseGrab(true);
- m_declarativeMap->setKeepTouchGrab(true);
- startPinch();
- m_pinchState = pinchActive;
- }
- }
- break;
- case pinchActive:
- if (m_allPoints.count() <= 1) {
- m_pinchState = pinchInactive;
- m_declarativeMap->setKeepMouseGrab(m_preventStealing);
- m_declarativeMap->setKeepTouchGrab(m_preventStealing);
- endPinch();
- }
- break;
- }
- // This line implements an exclusive state machine, where the transitions and updates don't
- // happen on the same frame
- if (m_pinchState != lastState) {
- emit pinchActiveChanged();
- return;
- }
-
- // Update
- switch (m_pinchState) {
- case pinchInactive:
- case pinchInactiveTwoPoints:
- break; // do nothing
- case pinchActive:
- updatePinch();
- break;
- }
-}
-
-/*!
- \internal
-*/
-bool QQuickGeoMapGestureArea::canStartPinch()
-{
- const int startDragDistance = qApp->styleHints()->startDragDistance();
-
- if (m_allPoints.count() >= 2) {
- QPointF p1 = mapFromScene(m_allPoints.at(0).scenePos());
- QPointF p2 = mapFromScene(m_allPoints.at(1).scenePos());
- if (qAbs(p1.x()-m_sceneStartPoint1.x()) > startDragDistance
- || qAbs(p1.y()-m_sceneStartPoint1.y()) > startDragDistance
- || qAbs(p2.x()-m_sceneStartPoint2.x()) > startDragDistance
- || qAbs(p2.y()-m_sceneStartPoint2.y()) > startDragDistance) {
- m_pinch.m_event.setCenter(mapFromScene(m_sceneCenter));
- m_pinch.m_event.setAngle(m_twoTouchAngle);
- m_pinch.m_event.setPoint1(p1);
- m_pinch.m_event.setPoint2(p2);
- m_pinch.m_event.setPointCount(m_allPoints.count());
- m_pinch.m_event.setAccepted(true);
- emit pinchStarted(&m_pinch.m_event);
- return m_pinch.m_event.accepted();
- }
- }
- return false;
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::startPinch()
-{
- m_pinch.m_startDist = m_distanceBetweenTouchPoints;
- m_pinch.m_zoom.m_previous = m_declarativeMap->zoomLevel();
- m_pinch.m_lastAngle = m_twoTouchAngle;
-
- m_pinch.m_lastPoint1 = mapFromScene(m_allPoints.at(0).scenePos());
- m_pinch.m_lastPoint2 = mapFromScene(m_allPoints.at(1).scenePos());
-
- m_pinch.m_zoom.m_start = m_declarativeMap->zoomLevel();
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::updatePinch()
-{
- // Calculate the new zoom level if we have distance ( >= 2 touchpoints), otherwise stick with old.
- qreal newZoomLevel = m_pinch.m_zoom.m_previous;
- if (m_distanceBetweenTouchPoints) {
- newZoomLevel =
- // How much further/closer the current touchpoints are (in pixels) compared to pinch start
- ((m_distanceBetweenTouchPoints - m_pinch.m_startDist) *
- // How much one pixel corresponds in units of zoomlevel (and multiply by above delta)
- (m_pinch.m_zoom.maximumChange / ((width() + height()) / 2))) +
- // Add to starting zoom level. Sign of (dist-pinchstartdist) takes care of zoom in / out
- m_pinch.m_zoom.m_start;
- }
-
- m_pinch.m_event.setCenter(mapFromScene(m_sceneCenter));
- m_pinch.m_event.setAngle(m_twoTouchAngle);
-
- m_pinch.m_lastPoint1 = mapFromScene(m_allPoints.at(0).scenePos());
- m_pinch.m_lastPoint2 = mapFromScene(m_allPoints.at(1).scenePos());
- m_pinch.m_event.setPoint1(m_pinch.m_lastPoint1);
- m_pinch.m_event.setPoint2(m_pinch.m_lastPoint2);
- m_pinch.m_event.setPointCount(m_allPoints.count());
- m_pinch.m_event.setAccepted(true);
-
- m_pinch.m_lastAngle = m_twoTouchAngle;
- emit pinchUpdated(&m_pinch.m_event);
-
- if (m_acceptedGestures & PinchGesture) {
- // Take maximum and minimumzoomlevel into account
- qreal perPinchMinimumZoomLevel = qMax(m_pinch.m_zoom.m_start - m_pinch.m_zoom.maximumChange, m_pinch.m_zoom.m_minimum);
- qreal perPinchMaximumZoomLevel = qMin(m_pinch.m_zoom.m_start + m_pinch.m_zoom.maximumChange, m_pinch.m_zoom.m_maximum);
- newZoomLevel = qMin(qMax(perPinchMinimumZoomLevel, newZoomLevel), perPinchMaximumZoomLevel);
- m_declarativeMap->setZoomLevel(newZoomLevel);
- m_pinch.m_zoom.m_previous = newZoomLevel;
- }
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::endPinch()
-{
- QPointF p1 = mapFromScene(m_pinch.m_lastPoint1);
- QPointF p2 = mapFromScene(m_pinch.m_lastPoint2);
- m_pinch.m_event.setCenter((p1 + p2) / 2);
- m_pinch.m_event.setAngle(m_pinch.m_lastAngle);
- m_pinch.m_event.setPoint1(p1);
- m_pinch.m_event.setPoint2(p2);
- m_pinch.m_event.setAccepted(true);
- m_pinch.m_event.setPointCount(0);
- emit pinchFinished(&m_pinch.m_event);
- m_pinch.m_startDist = 0;
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::panStateMachine()
-{
- FlickState lastState = m_flickState;
-
- // Transitions
- switch (m_flickState) {
- case flickInactive:
- if (canStartPan()) {
- // Update startCoord_ to ensure smooth start for panning when going over startDragDistance
- QGeoCoordinate newStartCoord = m_map->geoProjection().itemPositionToCoordinate(QDoubleVector2D(m_sceneCenter), false);
- m_startCoord.setLongitude(newStartCoord.longitude());
- m_startCoord.setLatitude(newStartCoord.latitude());
- m_declarativeMap->setKeepMouseGrab(true);
- m_flickState = panActive;
- }
- break;
- case panActive:
- if (m_allPoints.count() == 0) {
- if (!tryStartFlick())
- {
- m_flickState = flickInactive;
- // mark as inactive for use by camera
- if (m_pinchState == pinchInactive) {
- m_declarativeMap->setKeepMouseGrab(m_preventStealing);
- m_map->prefetchData();
- }
- emit panFinished();
- } else {
- m_flickState = flickActive;
- emit panFinished();
- emit flickStarted();
- }
- }
- break;
- case flickActive:
- if (m_allPoints.count() > 0) { // re touched before movement ended
- stopFlick();
- m_declarativeMap->setKeepMouseGrab(true);
- m_flickState = panActive;
- }
- break;
- }
-
- if (m_flickState != lastState)
- emit panActiveChanged();
-
- // Update
- switch (m_flickState) {
- case flickInactive: // do nothing
- break;
- case panActive:
- updatePan();
- // this ensures 'panStarted' occurs after the pan has actually started
- if (lastState != panActive)
- emit panStarted();
- break;
- case flickActive:
- break;
- }
-}
-/*!
- \internal
-*/
-bool QQuickGeoMapGestureArea::canStartPan()
-{
- if (m_allPoints.count() == 0 || (m_acceptedGestures & PanGesture) == 0)
- return false;
-
- // Check if thresholds for normal panning are met.
- // (normal panning vs flicking: flicking will start from mouse release event).
- const int startDragDistance = qApp->styleHints()->startDragDistance() * 2;
- QPointF p1 = mapFromScene(m_allPoints.at(0).scenePos());
- int dyFromPress = int(p1.y() - m_sceneStartPoint1.y());
- int dxFromPress = int(p1.x() - m_sceneStartPoint1.x());
- if ((qAbs(dyFromPress) >= startDragDistance || qAbs(dxFromPress) >= startDragDistance))
- return true;
- return false;
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::updatePan()
-{
- QPointF startPoint = m_map->geoProjection().coordinateToItemPosition(m_startCoord, false).toPointF();
- int dx = static_cast<int>(m_sceneCenter.x() - startPoint.x());
- int dy = static_cast<int>(m_sceneCenter.y() - startPoint.y());
- QPointF mapCenterPoint;
- mapCenterPoint.setY(m_map->viewportHeight() / 2.0 - dy);
- mapCenterPoint.setX(m_map->viewportWidth() / 2.0 - dx);
- QGeoCoordinate animationStartCoordinate = m_map->geoProjection().itemPositionToCoordinate(QDoubleVector2D(mapCenterPoint), false);
- m_declarativeMap->setCenter(animationStartCoordinate);
-}
-
-/*!
- \internal
-*/
-bool QQuickGeoMapGestureArea::tryStartFlick()
-{
- if ((m_acceptedGestures & FlickGesture) == 0)
- return false;
- // if we drag then pause before release we should not cause a flick.
- qreal velocityX = 0.0;
- qreal velocityY = 0.0;
- if (m_lastPosTime.elapsed() < QML_MAP_FLICK_VELOCITY_SAMPLE_PERIOD) {
- velocityY = m_velocityY;
- velocityX = m_velocityX;
- }
- int flickTimeY = 0;
- int flickTimeX = 0;
- int flickPixelsX = 0;
- int flickPixelsY = 0;
- if (qAbs(velocityY) > MinimumFlickVelocity && qAbs(m_sceneCenter.y() - m_sceneStartPoint1.y()) > FlickThreshold) {
- // calculate Y flick animation values
- qreal acceleration = m_flick.m_deceleration;
- if ((velocityY > 0.0f) == (m_flick.m_deceleration > 0.0f))
- acceleration = acceleration * -1.0f;
- flickTimeY = static_cast<int>(-1000 * velocityY / acceleration);
- flickPixelsY = (flickTimeY * velocityY) / (1000.0 * 2);
- }
- if (qAbs(velocityX) > MinimumFlickVelocity && qAbs(m_sceneCenter.x() - m_sceneStartPoint1.x()) > FlickThreshold) {
- // calculate X flick animation values
- qreal acceleration = m_flick.m_deceleration;
- if ((velocityX > 0.0f) == (m_flick.m_deceleration > 0.0f))
- acceleration = acceleration * -1.0f;
- flickTimeX = static_cast<int>(-1000 * velocityX / acceleration);
- flickPixelsX = (flickTimeX * velocityX) / (1000.0 * 2);
- }
- int flickTime = qMax(flickTimeY, flickTimeX);
- if (flickTime > 0) {
- startFlick(flickPixelsX, flickPixelsY, flickTime);
- return true;
- }
- return false;
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::startFlick(int dx, int dy, int timeMs)
-{
- if (!m_flick.m_animation)
- return;
- if (timeMs < 0)
- return;
-
- QGeoCoordinate animationStartCoordinate = m_declarativeMap->center();
-
- if (m_flick.m_animation->isRunning())
- m_flick.m_animation->stop();
- QGeoCoordinate animationEndCoordinate = m_declarativeMap->center();
- m_flick.m_animation->setDuration(timeMs);
-
- double zoom = pow(2.0, m_declarativeMap->zoomLevel());
- double longitude = animationStartCoordinate.longitude() - (dx / zoom);
- double latitude = animationStartCoordinate.latitude() + (dy / zoom);
-
- if (dx > 0)
- m_flick.m_animation->setDirection(QQuickGeoCoordinateAnimation::East);
- else
- m_flick.m_animation->setDirection(QQuickGeoCoordinateAnimation::West);
-
- //keep animation in correct bounds
- if (latitude > 85.05113)
- latitude = 85.05113;
- else if (latitude < -85.05113)
- latitude = -85.05113;
-
- if (longitude > 180)
- longitude = longitude - 360;
- else if (longitude < -180)
- longitude = longitude + 360;
-
- animationEndCoordinate.setLongitude(longitude);
- animationEndCoordinate.setLatitude(latitude);
-
- m_flick.m_animation->setFrom(animationStartCoordinate);
- m_flick.m_animation->setTo(animationEndCoordinate);
- m_flick.m_animation->start();
-}
-
-void QQuickGeoMapGestureArea::stopPan()
-{
- if (m_flickState == flickActive) {
- stopFlick();
- } else if (m_flickState == panActive) {
- m_velocityX = 0;
- m_velocityY = 0;
- m_flickState = flickInactive;
- m_declarativeMap->setKeepMouseGrab(m_preventStealing);
- emit panFinished();
- emit panActiveChanged();
- m_map->prefetchData();
- }
-}
-
-/*!
- \internal
-*/
-void QQuickGeoMapGestureArea::stopFlick()
-{
- if (!m_flick.m_animation)
- return;
- m_velocityX = 0;
- m_velocityY = 0;
- if (m_flick.m_animation->isRunning())
- m_flick.m_animation->stop();
- else
- handleFlickAnimationStopped();
-}
-
-void QQuickGeoMapGestureArea::handleFlickAnimationStopped()
-{
- m_declarativeMap->setKeepMouseGrab(m_preventStealing);
- if (m_flickState == flickActive) {
- m_flickState = flickInactive;
- emit flickFinished();
- emit panActiveChanged();
- m_map->prefetchData();
- }
-}
-
-#include "moc_qquickgeomapgesturearea_p.cpp"
-
-QT_END_NAMESPACE
diff --git a/src/imports/location/qquickgeomapgesturearea_p.h b/src/imports/location/qquickgeomapgesturearea_p.h
deleted file mode 100644
index 51c5cc1e..00000000
--- a/src/imports/location/qquickgeomapgesturearea_p.h
+++ /dev/null
@@ -1,317 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 QQUICKGEOMAPGESTUREAREA_P_H
-#define QQUICKGEOMAPGESTUREAREA_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 <QtQuick/QQuickItem>
-#include <QTouchEvent>
-#include <QDebug>
-#include <QElapsedTimer>
-#include "qgeocoordinate.h"
-#include "qgeomap_p.h"
-#include "qquickgeocoordinateanimation_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QGraphicsSceneMouseEvent;
-class QDeclarativeGeoMap;
-class QTouchEvent;
-class QWheelEvent;
-class QGeoMap;
-
-class QGeoMapPinchEvent : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QPointF center READ center)
- Q_PROPERTY(qreal angle READ angle)
- Q_PROPERTY(QPointF point1 READ point1)
- Q_PROPERTY(QPointF point2 READ point2)
- Q_PROPERTY(int pointCount READ pointCount)
- Q_PROPERTY(bool accepted READ accepted WRITE setAccepted)
-
-public:
- QGeoMapPinchEvent(const QPointF &center, qreal angle,
- const QPointF &point1, const QPointF &point2,
- int pointCount = 0, bool accepted = true)
- : QObject(), m_center(center), m_angle(angle),
- m_point1(point1), m_point2(point2),
- m_pointCount(pointCount), m_accepted(accepted) {}
- QGeoMapPinchEvent()
- : QObject(),
- m_angle(0.0),
- m_pointCount(0),
- m_accepted(true) {}
-
- QPointF center() const { return m_center; }
- void setCenter(const QPointF &center) { m_center = center; }
- qreal angle() const { return m_angle; }
- void setAngle(qreal angle) { m_angle = angle; }
- QPointF point1() const { return m_point1; }
- void setPoint1(const QPointF &p) { m_point1 = p; }
- QPointF point2() const { return m_point2; }
- void setPoint2(const QPointF &p) { m_point2 = p; }
- int pointCount() const { return m_pointCount; }
- void setPointCount(int count) { m_pointCount = count; }
- bool accepted() const { return m_accepted; }
- void setAccepted(bool a) { m_accepted = a; }
-
-private:
- QPointF m_center;
- qreal m_angle;
- QPointF m_point1;
- QPointF m_point2;
- int m_pointCount;
- bool m_accepted;
-};
-
-class QQuickGeoMapGestureArea: public QQuickItem
-{
- Q_OBJECT
- Q_ENUMS(GeoMapGesture)
- Q_FLAGS(AcceptedGestures)
-
- Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged)
- Q_PROPERTY(bool pinchActive READ isPinchActive NOTIFY pinchActiveChanged)
- Q_PROPERTY(bool panActive READ isPanActive NOTIFY panActiveChanged)
- Q_PROPERTY(AcceptedGestures acceptedGestures READ acceptedGestures WRITE setAcceptedGestures NOTIFY acceptedGesturesChanged)
- Q_PROPERTY(qreal maximumZoomLevelChange READ maximumZoomLevelChange WRITE setMaximumZoomLevelChange NOTIFY maximumZoomLevelChangeChanged)
- Q_PROPERTY(qreal flickDeceleration READ flickDeceleration WRITE setFlickDeceleration NOTIFY flickDecelerationChanged)
- Q_PROPERTY(bool preventStealing READ preventStealing WRITE setPreventStealing NOTIFY preventStealingChanged REVISION 1)
-
-public:
- QQuickGeoMapGestureArea(QDeclarativeGeoMap *map);
- ~QQuickGeoMapGestureArea();
-
- enum GeoMapGesture {
- NoGesture = 0x0000,
- PinchGesture = 0x0001,
- PanGesture = 0x0002,
- FlickGesture = 0x004
- };
-
- Q_DECLARE_FLAGS(AcceptedGestures, GeoMapGesture)
-
- AcceptedGestures acceptedGestures() const;
- void setAcceptedGestures(AcceptedGestures acceptedGestures);
-
- bool isPinchActive() const;
- bool isPanActive() const;
- bool isActive() const;
-
- bool enabled() const;
- void setEnabled(bool enabled);
-
- qreal maximumZoomLevelChange() const;
- void setMaximumZoomLevelChange(qreal maxChange);
-
- qreal flickDeceleration() const;
- void setFlickDeceleration(qreal deceleration);
-
- void handleTouchEvent(QTouchEvent *event);
- void handleWheelEvent(QWheelEvent *event);
- void handleMousePressEvent(QMouseEvent *event);
- void handleMouseMoveEvent(QMouseEvent *event);
- void handleMouseReleaseEvent(QMouseEvent *event);
- void handleMouseUngrabEvent();
- void handleTouchUngrabEvent();
-
- void setMinimumZoomLevel(qreal min);
- qreal minimumZoomLevel() const;
-
- void setMaximumZoomLevel(qreal max);
- qreal maximumZoomLevel() const;
-
- void setMap(QGeoMap *map);
-
- bool preventStealing() const;
- void setPreventStealing(bool prevent);
-
-Q_SIGNALS:
- void panActiveChanged();
- void pinchActiveChanged();
- void enabledChanged();
- void maximumZoomLevelChangeChanged();
- void acceptedGesturesChanged();
- void flickDecelerationChanged();
- void pinchStarted(QGeoMapPinchEvent *pinch);
- void pinchUpdated(QGeoMapPinchEvent *pinch);
- void pinchFinished(QGeoMapPinchEvent *pinch);
- void panStarted();
- void panFinished();
- void flickStarted();
- void flickFinished();
- void preventStealingChanged();
-private:
- void update();
-
- // Create general data relating to the touch points
- void touchPointStateMachine();
- void startOneTouchPoint();
- void updateOneTouchPoint();
- void startTwoTouchPoints();
- void updateTwoTouchPoints();
-
- // All pinch related code, which encompasses zoom
- void pinchStateMachine();
- bool canStartPinch();
- void startPinch();
- void updatePinch();
- void endPinch();
-
- // Pan related code (regardles of number of touch points),
- // includes the flick based panning after letting go
- void panStateMachine();
- bool canStartPan();
- void updatePan();
- bool tryStartFlick();
- void startFlick(int dx, int dy, int timeMs = 0);
- void stopFlick();
-
- bool pinchEnabled() const;
- void setPinchEnabled(bool enabled);
- bool panEnabled() const;
- void setPanEnabled(bool enabled);
- bool flickEnabled() const;
- void setFlickEnabled(bool enabled);
-
-private Q_SLOTS:
- void handleFlickAnimationStopped();
-
-
-private:
- void stopPan();
- void clearTouchData();
- void updateVelocityList(const QPointF &pos);
-
-private:
- QGeoMap *m_map;
- QDeclarativeGeoMap *m_declarativeMap;
- bool m_enabled;
-
- struct Pinch
- {
- Pinch() : m_enabled(true), m_startDist(0), m_lastAngle(0.0) {}
-
- QGeoMapPinchEvent m_event;
- bool m_enabled;
- struct Zoom
- {
- Zoom() : m_minimum(-1.0), m_maximum(20.0), m_start(0.0), m_previous(0.0),
- maximumChange(4.0) {}
- qreal m_minimum;
- qreal m_maximum;
- qreal m_start;
- qreal m_previous;
- qreal maximumChange;
- } m_zoom;
-
- QPointF m_lastPoint1;
- QPointF m_lastPoint2;
- qreal m_startDist;
- qreal m_lastAngle;
- } m_pinch;
-
- AcceptedGestures m_acceptedGestures;
-
- struct Pan
- {
- qreal m_maxVelocity;
- qreal m_deceleration;
- QQuickGeoCoordinateAnimation *m_animation;
- bool m_enabled;
- } m_flick;
-
-
- // these are calculated regardless of gesture or number of touch points
- qreal m_velocityX;
- qreal m_velocityY;
- QElapsedTimer m_lastPosTime;
- QPointF m_lastPos;
- QList<QTouchEvent::TouchPoint> m_allPoints;
- QList<QTouchEvent::TouchPoint> m_touchPoints;
- QScopedPointer<QTouchEvent::TouchPoint> m_mousePoint;
- QPointF m_sceneStartPoint1;
-
- // only set when two points in contact
- QPointF m_sceneStartPoint2;
- QGeoCoordinate m_startCoord;
- QGeoCoordinate m_touchCenterCoord;
- qreal m_twoTouchAngle;
- qreal m_distanceBetweenTouchPoints;
- QPointF m_sceneCenter;
- bool m_preventStealing;
- bool m_panEnabled;
-
- // prototype state machine...
- enum TouchPointState
- {
- touchPoints0,
- touchPoints1,
- touchPoints2
- } m_touchPointState;
-
- enum PinchState
- {
- pinchInactive,
- pinchInactiveTwoPoints,
- pinchActive
- } m_pinchState;
-
- enum FlickState
- {
- flickInactive,
- panActive,
- flickActive
- } m_flickState;
-};
-
-QT_END_NAMESPACE
-QML_DECLARE_TYPE(QQuickGeoMapGestureArea)
-
-#endif // QQUICKGEOMAPGESTUREAREA_P_H