diff options
author | BogDan Vatra <bogdan@kdab.com> | 2018-02-04 09:39:18 +0200 |
---|---|---|
committer | Paolo Angelelli <paolo.angelelli@qt.io> | 2018-03-27 10:36:22 +0000 |
commit | bda6fa9d1f67525e741b45362c58ac4f1a780624 (patch) | |
tree | afa32b6b3e7ef975ee424f69607ff0973f57d2b2 | |
parent | acc8bc079cda6a31a9d19dca860a1a2db378addf (diff) | |
download | qtlocation-bda6fa9d1f67525e741b45362c58ac4f1a780624.tar.gz |
Introduce setParentVisiblity
It's needed to determine the item visibility without altering
user-set visibility values.
Change-Id: Ibc78cdbc4eab83ddf93326e58ab4d2a883de444b
Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
-rw-r--r-- | src/location/declarativemaps/qgeomapobject.cpp | 27 | ||||
-rw-r--r-- | src/location/declarativemaps/qgeomapobject_p.h | 1 | ||||
-rw-r--r-- | src/location/declarativemaps/qgeomapobject_p_p.h | 2 |
3 files changed, 26 insertions, 4 deletions
diff --git a/src/location/declarativemaps/qgeomapobject.cpp b/src/location/declarativemaps/qgeomapobject.cpp index 9d94900f..9c97dd57 100644 --- a/src/location/declarativemaps/qgeomapobject.cpp +++ b/src/location/declarativemaps/qgeomapobject.cpp @@ -121,14 +121,28 @@ bool QGeoMapObject::visible() const void QGeoMapObject::setVisible(bool visible) { - if (visible == d_ptr->visible()) + if (visible == d_ptr->m_visible) return; + const bool oldVisible = QGeoMapObject::visible(); d_ptr->setVisible(visible); + if (d_ptr->m_componentCompleted) + setChildrenVisibility(); + if (QGeoMapObject::visible() != oldVisible) + emit visibleChanged(); +} +void QGeoMapObject::setParentVisiblity(bool visible) +{ + if (visible == d_ptr->m_parentVisible) + return; + + const bool oldVisible = QGeoMapObject::visible(); + d_ptr->setParentVisibility(visible); if (d_ptr->m_componentCompleted) setChildrenVisibility(); - emit visibleChanged(); + if (QGeoMapObject::visible() != oldVisible) + emit visibleChanged(); } QGeoMapObject::Type QGeoMapObject::type() const @@ -151,7 +165,7 @@ void QGeoMapObject::setChildrenVisibility() const bool v = visible(); const QList<QGeoMapObject *> kids = geoMapObjectChildren(); for (auto kid : qAsConst(kids)) - kid->setVisible(v); + kid->setParentVisiblity(v); } void QGeoMapObject::classBegin() @@ -249,7 +263,7 @@ bool QGeoMapObjectPrivate::equals(const QGeoMapObjectPrivate &other) const bool QGeoMapObjectPrivate::visible() const { - return m_visible; + return m_visible && m_parentVisible; } void QGeoMapObjectPrivate::setVisible(bool visible) @@ -257,4 +271,9 @@ void QGeoMapObjectPrivate::setVisible(bool visible) m_visible = visible; } +void QGeoMapObjectPrivate::setParentVisibility(bool visible) +{ + m_parentVisible = visible; +} + QT_END_NAMESPACE diff --git a/src/location/declarativemaps/qgeomapobject_p.h b/src/location/declarativemaps/qgeomapobject_p.h index 669a79f3..e6618804 100644 --- a/src/location/declarativemaps/qgeomapobject_p.h +++ b/src/location/declarativemaps/qgeomapobject_p.h @@ -99,6 +99,7 @@ public: bool visible() const; void setVisible(bool visible); + void setParentVisiblity(bool visible); Type type() const; diff --git a/src/location/declarativemaps/qgeomapobject_p_p.h b/src/location/declarativemaps/qgeomapobject_p_p.h index 000a992d..3ecd4c5c 100644 --- a/src/location/declarativemaps/qgeomapobject_p_p.h +++ b/src/location/declarativemaps/qgeomapobject_p_p.h @@ -72,12 +72,14 @@ public: virtual QGeoMapObject::Type type() const; virtual bool visible() const; virtual void setVisible(bool visible); + virtual void setParentVisibility(bool visible); virtual QGeoMapObjectPrivate *clone() = 0; // to allow proper detaching QGeoMapObject *q = nullptr; QPointer<QGeoMap> m_map; bool m_componentCompleted = false; bool m_visible = true; + bool m_parentVisible = true; protected: QGeoMapObjectPrivate(QGeoMapObject *q); |