diff options
author | BogDan Vatra <bogdan@kdab.com> | 2017-08-24 15:20:02 +0300 |
---|---|---|
committer | BogDan Vatra <bogdan@kdab.com> | 2017-09-13 11:57:20 +0000 |
commit | c61f38b10bf6b4521ec8f847b8d4d5ec47477074 (patch) | |
tree | df0851c277f005fef238aadb0a85f8be0b9e4020 | |
parent | 5f26c3afbacd370eca53692eb3c9327c072d5fcf (diff) | |
download | qtlocation-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.pri | 6 | ||||
-rw-r--r-- | src/location/declarativemaps/qparameterizableobject.cpp | 84 | ||||
-rw-r--r-- | src/location/declarativemaps/qparameterizableobject_p.h | 80 |
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 |