Commit bb109b86 authored by Paolo Angelelli's avatar Paolo Angelelli
Browse files

Introduce MapCircleObject


Change-Id: Ic8b2ae65f461b55c3f655af66865c4e8bbf50d14
Reviewed-by: default avatarAlex Blasche <alexander.blasche@qt.io>
Showing with 455 additions and 0 deletions
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include <QtLocationLabs/private/qmapiconobject_p.h> #include <QtLocationLabs/private/qmapiconobject_p.h>
#include <QtLocationLabs/private/qmapobjectview_p.h> #include <QtLocationLabs/private/qmapobjectview_p.h>
#include <QtLocationLabs/private/qmaprouteobject_p.h> #include <QtLocationLabs/private/qmaprouteobject_p.h>
#include <QtLocationLabs/private/qmapcircleobject_p.h>
//#include <QtLocationLabs/private/qdeclarativenavigator_p.h> //#include <QtLocationLabs/private/qdeclarativenavigator_p.h>
#include <QtQml/qqmlextensionplugin.h> #include <QtQml/qqmlextensionplugin.h>
...@@ -75,6 +76,7 @@ public: ...@@ -75,6 +76,7 @@ public:
qmlRegisterType<QMapIconObject>(uri, major, minor, "MapIconObject"); qmlRegisterType<QMapIconObject>(uri, major, minor, "MapIconObject");
qmlRegisterType<QMapObjectView>(uri, major, minor, "MapObjectView"); qmlRegisterType<QMapObjectView>(uri, major, minor, "MapObjectView");
qmlRegisterType<QMapRouteObject>(uri, major, minor, "MapRouteObject"); qmlRegisterType<QMapRouteObject>(uri, major, minor, "MapRouteObject");
qmlRegisterType<QMapCircleObject>(uri, major, minor, "MapCircleObject");
// Register the latest Qt version as QML type version // Register the latest Qt version as QML type version
qmlRegisterModule(uri, QT_VERSION_MAJOR, QT_VERSION_MINOR); qmlRegisterModule(uri, QT_VERSION_MAJOR, QT_VERSION_MINOR);
......
/****************************************************************************
**
** 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 "qmapcircleobject_p.h"
#include "qmapcircleobject_p_p.h"
#include <QExplicitlySharedDataPointer>
QT_BEGIN_NAMESPACE
QMapCircleObjectPrivate::QMapCircleObjectPrivate(QGeoMapObject *q) : QGeoMapObjectPrivate(q)
{
}
QMapCircleObjectPrivate::~QMapCircleObjectPrivate()
{
}
QGeoMapObject::Type QMapCircleObjectPrivate::type() const
{
return QGeoMapObject::CircleType;
}
//
// QMapCircleObjectPrivate default implementation
//
QMapCircleObjectPrivateDefault::QMapCircleObjectPrivateDefault(QGeoMapObject *q) : QMapCircleObjectPrivate(q)
{
}
QMapCircleObjectPrivateDefault::QMapCircleObjectPrivateDefault(const QMapCircleObjectPrivate &other) : QMapCircleObjectPrivate(other.q)
{
m_center = other.center();
m_radius = other.radius();
m_fillColor = other.color();
m_borderColor = other.borderColor();
m_borderWidth = other.borderWidth();
}
QMapCircleObjectPrivateDefault::~QMapCircleObjectPrivateDefault()
{
}
QGeoCoordinate QMapCircleObjectPrivateDefault::center() const
{
return m_center;
}
void QMapCircleObjectPrivateDefault::setCenter(const QGeoCoordinate &center)
{
m_center = center;
}
qreal QMapCircleObjectPrivateDefault::radius() const
{
return m_radius;
}
void QMapCircleObjectPrivateDefault::setRadius(qreal radius)
{
m_radius = radius;
}
QColor QMapCircleObjectPrivateDefault::color() const
{
return m_fillColor;
}
void QMapCircleObjectPrivateDefault::setColor(const QColor &color)
{
m_fillColor = color;
}
QColor QMapCircleObjectPrivateDefault::borderColor() const
{
return m_borderColor;
}
void QMapCircleObjectPrivateDefault::setBorderColor(const QColor &color)
{
m_borderColor = color;
}
qreal QMapCircleObjectPrivateDefault::borderWidth() const
{
return m_borderWidth;
}
void QMapCircleObjectPrivateDefault::setBorderWidth(qreal width)
{
m_borderWidth = width;
}
bool QMapCircleObjectPrivate::equals(const QGeoMapObjectPrivate &other) const
{
if (other.type() != type()) // This check might be unnecessary, depending on how equals gets used
return false;
const QMapCircleObjectPrivate &o = static_cast<const QMapCircleObjectPrivate &>(other);
return (QGeoMapObjectPrivate::equals(o)
&& center() == o.center()
&& radius() == o.radius()
&& color() == o.color()
&& borderColor() == o.borderColor()
&& borderWidth() == o.borderWidth());
}
QGeoMapObjectPrivate *QMapCircleObjectPrivateDefault::clone()
{
return new QMapCircleObjectPrivateDefault(static_cast<QMapCircleObjectPrivate &>(*this));
}
QMapCircleObject::QMapCircleObject(QObject *parent)
: QGeoMapObject(QExplicitlySharedDataPointer<QGeoMapObjectPrivate>(new QMapCircleObjectPrivateDefault(this)), parent)
{
QMapCircleObjectPrivate *d = static_cast<QMapCircleObjectPrivate*>(d_ptr.data());
d->setBorderColor(QColor(Qt::black)); // These are QDeclarativeMapLineProperties defaults
d->setBorderWidth(1.0);
}
QMapCircleObject::~QMapCircleObject()
{
}
QGeoCoordinate QMapCircleObject::center() const
{
return static_cast<const QMapCircleObjectPrivate*>(d_ptr.data())->center();
}
qreal QMapCircleObject::radius() const
{
return static_cast<const QMapCircleObjectPrivate*>(d_ptr.data())->radius();
}
QColor QMapCircleObject::color() const
{
return static_cast<const QMapCircleObjectPrivate*>(d_ptr.data())->color();
}
QDeclarativeMapLineProperties *QMapCircleObject::border()
{
if (!m_border) {
m_border = new QDeclarativeMapLineProperties;
connect(m_border, &QDeclarativeMapLineProperties::colorChanged, this, [this](const QColor &color){
static_cast<QMapCircleObjectPrivate*>(d_ptr.data())->setBorderColor(color);
});
connect(m_border, &QDeclarativeMapLineProperties::widthChanged, this, [this](qreal width){
static_cast<QMapCircleObjectPrivate*>(d_ptr.data())->setBorderWidth(width);
});
}
return m_border;
}
void QMapCircleObject::setCenter(const QGeoCoordinate &center)
{
auto ptr = static_cast<QMapCircleObjectPrivate*>(d_ptr.data());
if (ptr->center() == center)
return;
ptr->setCenter(center);
emit centerChanged();
}
void QMapCircleObject::setRadius(qreal radius)
{
auto d = static_cast<QMapCircleObjectPrivate*>(d_ptr.data());
if (d->radius() == radius)
return;
d->setRadius(radius);
emit radiusChanged();
}
void QMapCircleObject::setColor(const QColor &color)
{
auto d = static_cast<QMapCircleObjectPrivate*>(d_ptr.data());
if (d->color() == color)
return;
d->setColor(color);
emit colorChanged();
}
void QMapCircleObject::setMap(QGeoMap *map)
{
QMapCircleObjectPrivate *d = static_cast<QMapCircleObjectPrivate *>(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 QMapCircleObjectPrivateDefault(*d);
// Old pimpl deleted implicitly by QExplicitlySharedDataPointer
}
}
QT_END_NAMESPACE
/****************************************************************************
**
** 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 QMAPCIRCLEOBJECT_P_H
#define QMAPCIRCLEOBJECT_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 <QtLocationLabs/private/qlocationlabsglobal_p.h>
#include <QtLocation/private/qgeomapobject_p.h>
#include <QtLocation/private/qdeclarativepolylinemapitem_p.h>
#include <QtCore/QUrl>
#include <QGeoCoordinate>
QT_BEGIN_NAMESPACE
class Q_LOCATIONLABS_PRIVATE_EXPORT QMapCircleObject : public QGeoMapObject
{
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:
QMapCircleObject(QObject *parent = nullptr);
~QMapCircleObject() override;
QGeoCoordinate center() const;
qreal radius() const;
QColor color() const;
void setCenter(const QGeoCoordinate &center);
void setRadius(qreal radius);
void setColor(const QColor &color);
QDeclarativeMapLineProperties * border();
void setMap(QGeoMap *map) override;
signals:
void centerChanged();
void radiusChanged();
void colorChanged();
protected:
QDeclarativeMapLineProperties *m_border = nullptr;
};
QT_END_NAMESPACE
#endif // QMAPCIRCLEOBJECT_P_H
/****************************************************************************
**
** 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 QMAPCIRCLEOBJECT_P_P_H
#define QMAPCIRCLEOBJECT_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 <QtLocationLabs/private/qlocationlabsglobal_p.h>
#include <QtLocation/private/qgeomapobject_p_p.h>
#include <QGeoCoordinate>
#include <QColor>
QT_BEGIN_NAMESPACE
class Q_LOCATIONLABS_PRIVATE_EXPORT QMapCircleObjectPrivate : public QGeoMapObjectPrivate
{
public:
QMapCircleObjectPrivate(QGeoMapObject *q);
~QMapCircleObjectPrivate() override;
virtual QGeoMapObject::Type type() const override final;
virtual QGeoCoordinate center() const = 0;
virtual void setCenter(const QGeoCoordinate &center) = 0;
virtual qreal radius() const = 0;
virtual void setRadius(qreal radius) = 0;
virtual QColor color() const = 0;
virtual void setColor(const QColor &color) = 0;
virtual QColor borderColor() const = 0;
virtual void setBorderColor(const QColor &color) = 0;
virtual qreal borderWidth() const = 0;
virtual void setBorderWidth(qreal width) = 0;
// QGeoMapObjectPrivate interface
bool equals(const QGeoMapObjectPrivate &other) const override;
};
class Q_LOCATIONLABS_PRIVATE_EXPORT QMapCircleObjectPrivateDefault : public QMapCircleObjectPrivate
{
public:
QMapCircleObjectPrivateDefault(QGeoMapObject *q);
QMapCircleObjectPrivateDefault(const QMapCircleObjectPrivate &other);
~QMapCircleObjectPrivateDefault() override;
// QMapCircleObjectPrivate interface
QGeoCoordinate center() const override;
void setCenter(const QGeoCoordinate &center) override;
qreal radius() const override;
void setRadius(qreal radius) override;
QColor color() const override;
void setColor(const QColor &color) override;
QColor borderColor() const override;
void setBorderColor(const QColor &color) override;
qreal borderWidth() const override;
void setBorderWidth(qreal width) override;
// QGeoMapObjectPrivate interface
QGeoMapObjectPrivate *clone() override;
public:
QGeoCoordinate m_center;
qreal m_radius = 0;
QColor m_fillColor = Qt::transparent;
QColor m_borderColor;
qreal m_borderWidth = 1.0;
private:
QMapCircleObjectPrivateDefault(const QMapCircleObjectPrivateDefault &other) = delete;
};
QT_END_NAMESPACE
#endif // QMAPCIRCLEOBJECT_P_P_H
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment