aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickcontainer.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2018-02-21 23:11:25 +0100
committerJ-P Nurmi <jpnurmi@qt.io>2018-04-13 11:26:45 +0000
commitec6cc9921f4b804ed309b7dbfae6ee3b1cf3d8a7 (patch)
tree02e9b87f41a139557c12333cc5473c038e429578 /src/quicktemplates2/qquickcontainer.cpp
parent3e3a4062ae8051d862b39420e0955ac5e9fbe7a2 (diff)
Control: add implicitContentWidth|Height properties
[ChangeLog][Controls][Control] Added implicitContentWidth and implicitContentHeight properties that can be used to simplify complex implicit size bindings. Change-Id: I6ccef572c013605058808ce2ad17f8bd82f49ef0 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickcontainer.cpp')
-rw-r--r--src/quicktemplates2/qquickcontainer.cpp67
1 files changed, 6 insertions, 61 deletions
diff --git a/src/quicktemplates2/qquickcontainer.cpp b/src/quicktemplates2/qquickcontainer.cpp
index b3d0e705..44f943d9 100644
--- a/src/quicktemplates2/qquickcontainer.cpp
+++ b/src/quicktemplates2/qquickcontainer.cpp
@@ -210,6 +210,8 @@ void QQuickContainerPrivate::init()
contentModel = new QQmlObjectModel(q);
QObject::connect(contentModel, &QQmlObjectModel::countChanged, q, &QQuickContainer::countChanged);
QObject::connect(contentModel, &QQmlObjectModel::childrenChanged, q, &QQuickContainer::contentChildrenChanged);
+ connect(q, &QQuickControl::implicitContentWidthChanged, this, &QQuickContainerPrivate::updateContentWidth);
+ connect(q, &QQuickControl::implicitContentHeightChanged, this, &QQuickContainerPrivate::updateContentHeight);
}
void QQuickContainerPrivate::cleanup()
@@ -385,20 +387,6 @@ void QQuickContainerPrivate::itemDestroyed(QQuickItem *item)
QQuickControlPrivate::itemDestroyed(item);
}
-void QQuickContainerPrivate::itemImplicitWidthChanged(QQuickItem *item)
-{
- QQuickControlPrivate::itemImplicitWidthChanged(item);
- if (item == contentItem)
- updateContentWidth();
-}
-
-void QQuickContainerPrivate::itemImplicitHeightChanged(QQuickItem *item)
-{
- QQuickControlPrivate::itemImplicitHeightChanged(item);
- if (item == contentItem)
- updateContentHeight();
-}
-
void QQuickContainerPrivate::contentData_append(QQmlListProperty<QObject> *prop, QObject *obj)
{
QQuickContainer *q = static_cast<QQuickContainer *>(prop->object);
@@ -456,67 +444,26 @@ void QQuickContainerPrivate::contentChildren_clear(QQmlListProperty<QQuickItem>
return QQuickContainerPrivate::get(q)->contentModel->clear();
}
-qreal QQuickContainerPrivate::getContentWidth() const
-{
- return contentItem ? contentItem->implicitWidth() : 0;
-}
-
-qreal QQuickContainerPrivate::getContentHeight() const
-{
- return contentItem ? contentItem->implicitHeight() : 0;
-}
-
void QQuickContainerPrivate::updateContentWidth()
{
Q_Q(QQuickContainer);
- if (hasContentWidth)
- return;
-
- const qreal oldContentWidth = contentWidth;
- contentWidth = getContentWidth();
- if (qFuzzyCompare(contentWidth, oldContentWidth))
+ if (hasContentWidth || qFuzzyCompare(contentWidth, implicitContentWidth))
return;
+ contentWidth = implicitContentWidth;
emit q->contentWidthChanged();
}
void QQuickContainerPrivate::updateContentHeight()
{
Q_Q(QQuickContainer);
- if (hasContentHeight)
- return;
-
- const qreal oldContentHeight = contentHeight;
- contentHeight = getContentHeight();
- if (qFuzzyCompare(contentHeight, oldContentHeight))
+ if (hasContentHeight || qFuzzyCompare(contentHeight, implicitContentHeight))
return;
+ contentHeight = implicitContentHeight;
emit q->contentHeightChanged();
}
-void QQuickContainerPrivate::updateContentSize()
-{
- Q_Q(QQuickContainer);
- if (hasContentWidth && hasContentHeight)
- return;
-
- const qreal oldContentWidth = contentWidth;
- if (!hasContentWidth)
- contentWidth = getContentWidth();
-
- const qreal oldContentHeight = contentHeight;
- if (!hasContentHeight)
- contentHeight = getContentHeight();
-
- const bool widthChanged = !qFuzzyCompare(contentWidth, oldContentWidth);
- const bool heightChanged = !qFuzzyCompare(contentHeight, oldContentHeight);
-
- if (widthChanged)
- emit q->contentWidthChanged();
- if (heightChanged)
- emit q->contentHeightChanged();
-}
-
QQuickContainer::QQuickContainer(QQuickItem *parent)
: QQuickControl(*(new QQuickContainerPrivate), parent)
{
@@ -955,8 +902,6 @@ void QQuickContainer::contentItemChange(QQuickItem *newItem, QQuickItem *oldItem
if (signalIndex != -1)
QMetaObject::connect(newItem, signalIndex, this, slotIndex);
}
-
- d->updateContentSize();
}
bool QQuickContainer::isContent(QQuickItem *item) const