summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBogDan Vatra <bogdan@kdab.com>2017-08-24 15:20:02 +0300
committerBogDan Vatra <bogdan@kdab.com>2017-09-13 11:57:20 +0000
commitc61f38b10bf6b4521ec8f847b8d4d5ec47477074 (patch)
treedf0851c277f005fef238aadb0a85f8be0b9e4020
parent5f26c3afbacd370eca53692eb3c9327c072d5fcf (diff)
downloadqtlocation-c61f38b10bf6b4521ec8f847b8d4d5ec47477074.tar.gz
Introduce QParameterizableObject
QParameterizableObject is a base class for QObjects-derived objects (but not QQuickItem-derived ones!) that need to have MapParameter(s) attached. Change-Id: Ib92b0676d8c8e02d08d9b76b05ecd4adc2d84e7b Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io> Reviewed-by: BogDan Vatra <bogdan@kdab.com>
-rw-r--r--src/location/declarativemaps/declarativemaps.pri6
-rw-r--r--src/location/declarativemaps/qparameterizableobject.cpp84
-rw-r--r--src/location/declarativemaps/qparameterizableobject_p.h80
3 files changed, 168 insertions, 2 deletions
diff --git a/src/location/declarativemaps/declarativemaps.pri b/src/location/declarativemaps/declarativemaps.pri
index 34c9f588..e607ea2b 100644
--- a/src/location/declarativemaps/declarativemaps.pri
+++ b/src/location/declarativemaps/declarativemaps.pri
@@ -27,6 +27,7 @@ PRIVATE_HEADERS += \
declarativemaps/locationvaluetypehelper_p.h \
declarativemaps/qquickgeomapgesturearea_p.h \
declarativemaps/qdeclarativegeomapitemgroup_p.h \
+ declarativemaps/qparameterizableobject_p.h \
declarativemaps/mapitemviewdelegateincubator_p.h \
../imports/positioning/qquickgeocoordinateanimation_p.h
@@ -53,9 +54,10 @@ SOURCES += \
declarativemaps/error_messages.cpp \
declarativemaps/locationvaluetypehelper.cpp \
declarativemaps/qquickgeomapgesturearea.cpp \
+ declarativemaps/qparameterizableobject.cpp \
declarativemaps/qdeclarativegeomapitemgroup.cpp \
- ../imports/positioning/qquickgeocoordinateanimation.cpp \
- declarativemaps/mapitemviewdelegateincubator.cpp
+ declarativemaps/mapitemviewdelegateincubator.cpp \
+ ../imports/positioning/qquickgeocoordinateanimation.cpp
load(qt_build_paths)
LIBS_PRIVATE += -L$$MODULE_BASE_OUTDIR/lib -lpoly2tri$$qtPlatformTargetSuffix() -lclip2tri$$qtPlatformTargetSuffix()
diff --git a/src/location/declarativemaps/qparameterizableobject.cpp b/src/location/declarativemaps/qparameterizableobject.cpp
new file mode 100644
index 00000000..a95f290e
--- /dev/null
+++ b/src/location/declarativemaps/qparameterizableobject.cpp
@@ -0,0 +1,84 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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 "qparameterizableobject_p.h"
+#include "qdeclarativegeomapparameter_p.h"
+#include <QtLocation/private/qgeomapparameter_p.h>
+
+QT_BEGIN_NAMESPACE
+
+QParameterizableObject::QParameterizableObject(QObject *parent)
+ : QObject(parent)
+{}
+
+QQmlListProperty<QDeclarativeGeoMapParameter> QParameterizableObject::declarativeParameters()
+{
+ return QQmlListProperty<QDeclarativeGeoMapParameter>(this, nullptr,
+ &QParameterizableObject::append,
+ &QParameterizableObject::count,
+ &QParameterizableObject::at,
+ &QParameterizableObject::clear);
+}
+
+QList<QGeoMapParameter*> QParameterizableObject::parameters() const
+{
+ QList<QGeoMapParameter*> params;
+ for (auto param : qAsConst(m_parameters))
+ params << param;
+ return params;
+}
+
+void QParameterizableObject::append(QQmlListProperty<QDeclarativeGeoMapParameter> *p, QDeclarativeGeoMapParameter *v)
+{
+ static_cast<QParameterizableObject*>(p->object)->m_parameters.append(v);
+}
+
+int QParameterizableObject::count(QQmlListProperty<QDeclarativeGeoMapParameter> *p)
+{
+ return static_cast<QParameterizableObject*>(p->object)->m_parameters.count();
+}
+
+QDeclarativeGeoMapParameter *QParameterizableObject::at(QQmlListProperty<QDeclarativeGeoMapParameter> *p, int idx)
+{
+ return static_cast<QParameterizableObject*>(p->object)->m_parameters.at(idx);
+}
+
+void QParameterizableObject::clear(QQmlListProperty<QDeclarativeGeoMapParameter> *p)
+{
+ static_cast<QParameterizableObject*>(p->object)->m_parameters.clear();
+}
+
+QT_END_NAMESPACE
diff --git a/src/location/declarativemaps/qparameterizableobject_p.h b/src/location/declarativemaps/qparameterizableobject_p.h
new file mode 100644
index 00000000..c6118c93
--- /dev/null
+++ b/src/location/declarativemaps/qparameterizableobject_p.h
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 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 QPARAMETERIZABLEOBJECT_H
+#define QPARAMETERIZABLEOBJECT_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 <QObject>
+#include <QQmlListProperty>
+#include <QQmlParserStatus>
+
+QT_BEGIN_NAMESPACE
+class QDeclarativeGeoMapParameter;
+class QGeoMapParameter;
+class Q_LOCATION_PRIVATE_EXPORT QParameterizableObject : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QQmlListProperty<QDeclarativeGeoMapParameter> parameters READ declarativeParameters DESIGNABLE false)
+ Q_CLASSINFO("DefaultProperty", "parameters")
+
+public:
+ explicit QParameterizableObject(QObject *parent = nullptr);
+ QList<QGeoMapParameter *> parameters() const;
+
+protected:
+ static void append(QQmlListProperty<QDeclarativeGeoMapParameter> *p, QDeclarativeGeoMapParameter *v);
+ static int count(QQmlListProperty<QDeclarativeGeoMapParameter> *p);
+ static QDeclarativeGeoMapParameter *at(QQmlListProperty<QDeclarativeGeoMapParameter> *p, int idx);
+ static void clear(QQmlListProperty<QDeclarativeGeoMapParameter> *p);
+
+ QQmlListProperty<QDeclarativeGeoMapParameter> declarativeParameters();
+ QList<QDeclarativeGeoMapParameter*> m_parameters;
+};
+QT_END_NAMESPACE
+
+#endif // QPARAMETERIZABLEOBJECT_H