diff options
author | Paolo Angelelli <paolo.angelelli@qt.io> | 2018-12-06 17:14:27 +0100 |
---|---|---|
committer | Paolo Angelelli <paolo.angelelli@qt.io> | 2018-12-11 00:14:51 +0000 |
commit | 0b742aee9fb4bde4d754f62c195d8a2e831355e8 (patch) | |
tree | 0c218c858b0d82aca00cdaf539218d7280fa8b79 /src | |
parent | 56e07f78579196fc33580ca5f20073a156b0e2dd (diff) | |
download | qtlocation-0b742aee9fb4bde4d754f62c195d8a2e831355e8.tar.gz |
Fix MapObjectView clone and equals
This also allow to properly subclass MapObjectViewPrivate, as the
model would be passed to the private implementation (and the
delegate too).
Change-Id: I0513a81120e8e8404fb35eb58fb2532487663ed9
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/location/labs/qmapobjectview.cpp | 59 | ||||
-rw-r--r-- | src/location/labs/qmapobjectview_p.h | 2 | ||||
-rw-r--r-- | src/location/labs/qmapobjectview_p_p.h | 13 |
3 files changed, 61 insertions, 13 deletions
diff --git a/src/location/labs/qmapobjectview.cpp b/src/location/labs/qmapobjectview.cpp index 2ffc27bc..7a7d7d3d 100644 --- a/src/location/labs/qmapobjectview.cpp +++ b/src/location/labs/qmapobjectview.cpp @@ -89,7 +89,8 @@ QGeoMapObject::Type QMapObjectViewPrivate::type() const */ -QMapObjectViewPrivateDefault::QMapObjectViewPrivateDefault(const QMapObjectViewPrivate &other) : QMapObjectViewPrivate(other.q) +QMapObjectViewPrivateDefault::QMapObjectViewPrivateDefault(const QMapObjectViewPrivate &other) +: QMapObjectViewPrivate(other.q), m_model(other.model()), m_delegate(other.delegate()) { } @@ -98,6 +99,26 @@ QMapObjectViewPrivateDefault::~QMapObjectViewPrivateDefault() } +QVariant QMapObjectViewPrivateDefault::model() const +{ + return m_model; +} + +void QMapObjectViewPrivateDefault::setModel(const QVariant &model) +{ + m_model = model; +} + +QQmlComponent *QMapObjectViewPrivateDefault::delegate() const +{ + return m_delegate; +} + +void QMapObjectViewPrivateDefault::setDelegate(QQmlComponent *delegate) +{ + m_delegate = delegate; +} + QMapObjectViewPrivateDefault::QMapObjectViewPrivateDefault(QGeoMapObject *q) : QMapObjectViewPrivate(q) { @@ -108,6 +129,17 @@ QGeoMapObjectPrivate *QMapObjectViewPrivateDefault::clone() return new QMapObjectViewPrivateDefault(*this); } +bool QMapObjectViewPrivateDefault::equals(const QGeoMapObjectPrivate &other) const +{ + if (other.type() != type()) + return false; + + const QMapObjectViewPrivate &o = static_cast<const QMapObjectViewPrivate &>(other); + return (QGeoMapObjectPrivate::equals(o) + && model() == o.model() + && delegate() == o.delegate()); +} + /* QMapObjectView @@ -160,10 +192,11 @@ void QMapObjectView::classBegin() void QMapObjectView::componentComplete() { QGeoMapObject::componentComplete(); - if (m_delegate) - m_delegateModel->setDelegate(m_delegate); - if (m_model.isValid()) - m_delegateModel->setModel(m_model); + QMapObjectViewPrivate *d = static_cast<QMapObjectViewPrivate *>(d_ptr.data()); + if (d->delegate()) + m_delegateModel->setDelegate(d->delegate()); + if (d->model().isValid()) + m_delegateModel->setModel(d->model()); m_delegateModel->componentComplete(); } @@ -175,7 +208,8 @@ void QMapObjectView::componentComplete() */ QVariant QMapObjectView::model() const { - return m_model; + const QMapObjectViewPrivate *d = static_cast<const QMapObjectViewPrivate *>(d_ptr.data()); + return d->model(); } /*! @@ -187,14 +221,16 @@ QVariant QMapObjectView::model() const */ QQmlComponent *QMapObjectView::delegate() const { - return m_delegate; + const QMapObjectViewPrivate *d = static_cast<const QMapObjectViewPrivate *>(d_ptr.data()); + return d->delegate(); } void QMapObjectView::setModel(QVariant model) { - if (m_model == model) + QMapObjectViewPrivate *d = static_cast<QMapObjectViewPrivate *>(d_ptr.data()); + if (d->model() == model) return; - m_model = model; + d->setModel(model); if (d_ptr->m_componentCompleted) m_delegateModel->setModel(model); @@ -204,9 +240,10 @@ void QMapObjectView::setModel(QVariant model) void QMapObjectView::setDelegate(QQmlComponent *delegate) { - if (m_delegate == delegate) + QMapObjectViewPrivate *d = static_cast<QMapObjectViewPrivate *>(d_ptr.data()); + if (d->delegate() == delegate) return; - m_delegate = delegate; + d->setDelegate(delegate); if (d_ptr->m_componentCompleted) m_delegateModel->setDelegate(delegate); diff --git a/src/location/labs/qmapobjectview_p.h b/src/location/labs/qmapobjectview_p.h index 49b80883..5e85aa7a 100644 --- a/src/location/labs/qmapobjectview_p.h +++ b/src/location/labs/qmapobjectview_p.h @@ -103,8 +103,6 @@ protected: void flushDelegateModel(); void flushUserAddedMapObjects(); - QVariant m_model; - QQmlComponent *m_delegate = nullptr; QQmlDelegateModel *m_delegateModel = nullptr; QVector<QPointer<QGeoMapObject>> m_instantiatedMapObjects; QVector<QPointer<QGeoMapObject>> m_pendingMapObjects; diff --git a/src/location/labs/qmapobjectview_p_p.h b/src/location/labs/qmapobjectview_p_p.h index 7550e209..e283f1b0 100644 --- a/src/location/labs/qmapobjectview_p_p.h +++ b/src/location/labs/qmapobjectview_p_p.h @@ -65,6 +65,11 @@ public: QMapObjectViewPrivate(QGeoMapObject *q); ~QMapObjectViewPrivate() override; + virtual QVariant model() const = 0; + virtual void setModel(const QVariant &model) = 0; + virtual QQmlComponent *delegate() const = 0; + virtual void setDelegate(QQmlComponent *delegate) = 0; + virtual QGeoMapObject::Type type() const override final; }; @@ -75,10 +80,18 @@ public: QMapObjectViewPrivateDefault(const QMapObjectViewPrivate &other); ~QMapObjectViewPrivateDefault() override; + virtual QVariant model() const override; + virtual void setModel(const QVariant &model) override; + virtual QQmlComponent *delegate() const override; + virtual void setDelegate(QQmlComponent *delegate) override; // QGeoMapObjectPrivate interface public: QGeoMapObjectPrivate *clone() override; + bool equals(const QGeoMapObjectPrivate &other) const override; + + QVariant m_model; + QQmlComponent *m_delegate = nullptr; }; QT_END_NAMESPACE |