summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaolo Angelelli <paolo.angelelli@qt.io>2018-12-06 17:14:27 +0100
committerPaolo Angelelli <paolo.angelelli@qt.io>2018-12-11 00:14:51 +0000
commit0b742aee9fb4bde4d754f62c195d8a2e831355e8 (patch)
tree0c218c858b0d82aca00cdaf539218d7280fa8b79 /src
parent56e07f78579196fc33580ca5f20073a156b0e2dd (diff)
downloadqtlocation-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.cpp59
-rw-r--r--src/location/labs/qmapobjectview_p.h2
-rw-r--r--src/location/labs/qmapobjectview_p_p.h13
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