summaryrefslogtreecommitdiff
path: root/src/locationlabs
diff options
context:
space:
mode:
authorPaolo Angelelli <paolo.angelelli@qt.io>2018-01-19 18:51:26 +0100
committerPaolo Angelelli <paolo.angelelli@qt.io>2018-02-07 16:43:29 +0000
commit538640b70f2062285415c3c324926bc06e814e9d (patch)
tree6cb71b76f1c9b4e9edbfbee16a61008977d4fc9b /src/locationlabs
parent2184cee7b90bc4c2b612bfed5225e7ab7b1a0ff8 (diff)
downloadqtlocation-538640b70f2062285415c3c324926bc06e814e9d.tar.gz
Introduce MapRouteObject
Change-Id: I3680550ae22ef4b143f2e545f672905737a41df2 Reviewed-by: BogDan Vatra <bogdan@kdab.com>
Diffstat (limited to 'src/locationlabs')
-rw-r--r--src/locationlabs/qmaprouteobject.cpp162
-rw-r--r--src/locationlabs/qmaprouteobject_p.h90
-rw-r--r--src/locationlabs/qmaprouteobject_p_p.h78
3 files changed, 330 insertions, 0 deletions
diff --git a/src/locationlabs/qmaprouteobject.cpp b/src/locationlabs/qmaprouteobject.cpp
new file mode 100644
index 00000000..6dd98e4d
--- /dev/null
+++ b/src/locationlabs/qmaprouteobject.cpp
@@ -0,0 +1,162 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 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 <QtLocation/private/qdeclarativegeoroute_p.h>
+#include "qmaprouteobject_p.h"
+#include "qmaprouteobject_p_p.h"
+
+QT_BEGIN_NAMESPACE
+
+/*
+
+ QGeoMapRoutePrivate
+
+*/
+
+QMapRouteObjectPrivate::QMapRouteObjectPrivate(QGeoMapObject *q) : QGeoMapObjectPrivate(q)
+{
+
+}
+
+QMapRouteObjectPrivate::QMapRouteObjectPrivate(const QMapRouteObjectPrivate &other) : QGeoMapObjectPrivate(other)
+{
+ // QGeoMapRoutePrivate doesn't contain anything because QGeoRoute has already everything necessary.
+}
+
+QMapRouteObjectPrivate::~QMapRouteObjectPrivate()
+{
+
+}
+
+QGeoMapObject::Type QMapRouteObjectPrivate::type() const
+{
+ return QGeoMapObject::RouteType;
+}
+
+QDeclarativeGeoRoute *QMapRouteObjectPrivate::declarativeGeoRoute() const
+{
+ const QMapRouteObject *r = static_cast<QMapRouteObject *>(q);
+ return r->m_route;
+}
+
+QGeoRoute QMapRouteObjectPrivate::route() const
+{
+ const QDeclarativeGeoRoute *r = declarativeGeoRoute();
+ if (r)
+ return r->route();
+ return {};
+}
+
+void QMapRouteObjectPrivate::setRoute(const QDeclarativeGeoRoute *route)
+{
+ Q_UNUSED(route)
+}
+
+bool QMapRouteObjectPrivate::equals(const QGeoMapObjectPrivate &other) const
+{
+ if (other.type() != type()) // This check might be unnecessary, depending on how equals gets used
+ return false;
+
+ const QMapRouteObjectPrivate &o = static_cast<const QMapRouteObjectPrivate &>(other);
+ return (QGeoMapObjectPrivate::equals(o)
+ && route() == o.route()); // Could also be done shallow, comparing declarativeGeoRoute()
+}
+
+QGeoMapObjectPrivate *QMapRouteObjectPrivate::clone()
+{
+ return new QMapRouteObjectPrivate(*this);
+}
+
+
+/*
+
+ QGeoMapRoute
+
+*/
+
+QMapRouteObject::QMapRouteObject(QObject *parent)
+ : QGeoMapObject(QExplicitlySharedDataPointer<QGeoMapObjectPrivate>(new QMapRouteObjectPrivate(this)), parent)
+{
+
+}
+
+QMapRouteObject::~QMapRouteObject()
+{
+
+}
+
+QDeclarativeGeoRoute *QMapRouteObject::route() const
+{
+ return m_route;
+}
+
+QGeoRoute QMapRouteObject::geoRoute() const
+{
+ if (m_route)
+ return m_route->route();
+ return {};
+}
+
+void QMapRouteObject::setRoute(QDeclarativeGeoRoute *route)
+{
+ if (route == m_route)
+ return;
+// if ((!m_route && !route) || (m_route && route && m_route->route() == route->route()))
+// return;
+
+ m_route = route;
+ QMapRouteObjectPrivate *d = static_cast<QMapRouteObjectPrivate *>(d_ptr.data());
+ d->setRoute(route);
+ emit routeChanged(route);
+}
+
+void QMapRouteObject::setMap(QGeoMap *map)
+{
+ QMapRouteObjectPrivate *d = static_cast<QMapRouteObjectPrivate *>(d_ptr.data());
+ if (d->m_map == map)
+ return;
+
+ QGeoMapObject::setMap(map); // This is where the specialized pimpl gets created and injected
+
+ if (!map) {
+ // Map was set, now it has ben re-set to NULL
+ d_ptr = new QMapRouteObjectPrivate(*d);
+ // Destroy old pimpl
+ delete d;
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/locationlabs/qmaprouteobject_p.h b/src/locationlabs/qmaprouteobject_p.h
new file mode 100644
index 00000000..dcc35807
--- /dev/null
+++ b/src/locationlabs/qmaprouteobject_p.h
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 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 QDECLARATIVEMAPROUTEDELEGATE_P_H
+#define QDECLARATIVEMAPROUTEDELEGATE_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/qlocationglobal_p.h>
+#include <QtQml/qqml.h>
+
+#include <QtLocation/private/qgeomapobject_p.h>
+#include <QtLocation/private/qparameterizableobject_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QDeclarativeGeoRoute;
+class QGeoRoute;
+class QMapRouteObjectPrivate;
+class Q_LOCATION_PRIVATE_EXPORT QMapRouteObject : public QGeoMapObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QDeclarativeGeoRoute *route READ route WRITE setRoute NOTIFY routeChanged)
+
+public:
+ explicit QMapRouteObject(QObject *parent = nullptr);
+ ~QMapRouteObject() override;
+
+ QDeclarativeGeoRoute *route() const;
+ QGeoRoute geoRoute() const;
+
+ void setMap(QGeoMap *map) override;
+ void setRoute(QDeclarativeGeoRoute * route);
+
+signals:
+ void routeChanged(QDeclarativeGeoRoute * route);
+
+protected:
+ QDeclarativeGeoRoute *m_route = nullptr;
+
+ friend class QMapRouteObjectPrivate;
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QMapRouteObject)
+
+#endif // QDECLARATIVEMAPROUTEDELEGATE_P_H
diff --git a/src/locationlabs/qmaprouteobject_p_p.h b/src/locationlabs/qmaprouteobject_p_p.h
new file mode 100644
index 00000000..113f14a0
--- /dev/null
+++ b/src/locationlabs/qmaprouteobject_p_p.h
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 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 QGEOMAPROUTE_P_P_H
+#define QGEOMAPROUTE_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 <QtLocation/private/qgeomapobject_p_p.h>
+#include <QtLocation/private/qdeclarativegeoroute_p.h>
+QT_BEGIN_NAMESPACE
+
+class QGeoRoute;
+
+class Q_LOCATION_PRIVATE_EXPORT QMapRouteObjectPrivate : public QGeoMapObjectPrivate
+{
+public:
+ QMapRouteObjectPrivate(QGeoMapObject *q);
+ QMapRouteObjectPrivate(const QMapRouteObjectPrivate &other);
+ ~QMapRouteObjectPrivate() override;
+
+ virtual QGeoMapObject::Type type() const override final;
+
+ QDeclarativeGeoRoute *declarativeGeoRoute() const;
+
+ virtual QGeoRoute route() const;
+ virtual void setRoute(const QDeclarativeGeoRoute *route);
+
+ // QGeoMapObjectPrivate interface
+ bool equals(const QGeoMapObjectPrivate &other) const override;
+ QGeoMapObjectPrivate *clone() override;
+};
+
+QT_END_NAMESPACE
+
+#endif // QGEOMAPROUTE_P_P_H