summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBogDan Vatra <bogdan@kdab.com>2018-02-04 09:39:18 +0200
committerPaolo Angelelli <paolo.angelelli@qt.io>2018-03-27 10:36:22 +0000
commitbda6fa9d1f67525e741b45362c58ac4f1a780624 (patch)
treeafa32b6b3e7ef975ee424f69607ff0973f57d2b2
parentacc8bc079cda6a31a9d19dca860a1a2db378addf (diff)
downloadqtlocation-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.cpp27
-rw-r--r--src/location/declarativemaps/qgeomapobject_p.h1
-rw-r--r--src/location/declarativemaps/qgeomapobject_p_p.h2
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);