aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickpane.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/qquickpane.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/qquickpane.cpp')
-rw-r--r--src/quicktemplates2/qquickpane.cpp96
1 files changed, 29 insertions, 67 deletions
diff --git a/src/quicktemplates2/qquickpane.cpp b/src/quicktemplates2/qquickpane.cpp
index d4c38fb6..72a5ee17 100644
--- a/src/quicktemplates2/qquickpane.cpp
+++ b/src/quicktemplates2/qquickpane.cpp
@@ -116,6 +116,18 @@ QQuickPanePrivate::QQuickPanePrivate()
{
}
+void QQuickPanePrivate::init()
+{
+ Q_Q(QQuickPane);
+ q->setFlag(QQuickItem::ItemIsFocusScope);
+ q->setAcceptedMouseButtons(Qt::AllButtons);
+#if QT_CONFIG(cursor)
+ q->setCursor(Qt::ArrowCursor);
+#endif
+ connect(q, &QQuickControl::implicitContentWidthChanged, this, &QQuickPanePrivate::updateContentWidth);
+ connect(q, &QQuickControl::implicitContentHeightChanged, this, &QQuickPanePrivate::updateContentHeight);
+}
+
QList<QQuickItem *> QQuickPanePrivate::contentChildItems() const
{
if (!contentItem)
@@ -136,21 +148,17 @@ QQuickItem *QQuickPanePrivate::getContentItem()
void QQuickPanePrivate::itemImplicitWidthChanged(QQuickItem *item)
{
QQuickControlPrivate::itemImplicitWidthChanged(item);
- if (item == contentItem || item == firstChild)
- updateContentWidth();
+
+ if (item == firstChild)
+ updateImplicitContentWidth();
}
void QQuickPanePrivate::itemImplicitHeightChanged(QQuickItem *item)
{
QQuickControlPrivate::itemImplicitHeightChanged(item);
- if (item == contentItem || item == firstChild)
- updateContentHeight();
-}
-void QQuickPanePrivate::itemDestroyed(QQuickItem *item)
-{
- if (item == contentItem)
- updateContentSize();
+ if (item == firstChild)
+ updateImplicitContentHeight();
}
void QQuickPanePrivate::contentChildrenChange()
@@ -165,7 +173,7 @@ void QQuickPanePrivate::contentChildrenChange()
firstChild = newFirstChild;
}
- updateContentSize();
+ updateImplicitContentSize();
emit q->contentChildrenChanged();
}
@@ -204,18 +212,11 @@ qreal QQuickPanePrivate::getContentHeight() const
void QQuickPanePrivate::updateContentWidth()
{
Q_Q(QQuickPane);
- if (hasContentWidth)
- return;
-
- // a special case for width<->height dependent content (wrapping text) in ScrollView
- if (contentWidth < 0 && !componentComplete)
- return;
-
- qreal oldContentWidth = contentWidth;
- contentWidth = getContentWidth();
- if (qFuzzyCompare(contentWidth, oldContentWidth))
+ if (hasContentWidth || qFuzzyCompare(contentWidth, implicitContentWidth))
return;
+ const qreal oldContentWidth = contentWidth;
+ contentWidth = implicitContentWidth;
q->contentSizeChange(QSizeF(contentWidth, contentHeight), QSizeF(oldContentWidth, contentHeight));
emit q->contentWidthChanged();
}
@@ -223,56 +224,20 @@ void QQuickPanePrivate::updateContentWidth()
void QQuickPanePrivate::updateContentHeight()
{
Q_Q(QQuickPane);
- if (hasContentHeight)
- return;
-
- // a special case for width<->height dependent content (wrapping text) in ScrollView
- if (contentWidth < 0 && !componentComplete)
- return;
-
- qreal oldContentHeight = contentHeight;
- contentHeight = getContentHeight();
- if (qFuzzyCompare(contentHeight, oldContentHeight))
+ if (hasContentHeight || qFuzzyCompare(contentHeight, implicitContentHeight))
return;
+ const qreal oldContentHeight = contentHeight;
+ contentHeight = implicitContentHeight;
q->contentSizeChange(QSizeF(contentWidth, contentHeight), QSizeF(contentWidth, oldContentHeight));
emit q->contentHeightChanged();
}
-void QQuickPanePrivate::updateContentSize()
-{
- Q_Q(QQuickPane);
- if ((hasContentWidth && hasContentHeight) || !componentComplete)
- 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 || heightChanged)
- q->contentSizeChange(QSizeF(contentWidth, contentHeight), QSizeF(oldContentWidth, oldContentHeight));
-
- if (widthChanged)
- emit q->contentWidthChanged();
- if (heightChanged)
- emit q->contentHeightChanged();
-}
-
QQuickPane::QQuickPane(QQuickItem *parent)
: QQuickControl(*(new QQuickPanePrivate), parent)
{
- setFlag(QQuickItem::ItemIsFocusScope);
- setAcceptedMouseButtons(Qt::AllButtons);
-#if QT_CONFIG(cursor)
- setCursor(Qt::ArrowCursor);
-#endif
+ Q_D(QQuickPane);
+ d->init();
}
QQuickPane::~QQuickPane()
@@ -285,11 +250,8 @@ QQuickPane::~QQuickPane()
QQuickPane::QQuickPane(QQuickPanePrivate &dd, QQuickItem *parent)
: QQuickControl(dd, parent)
{
- setFlag(QQuickItem::ItemIsFocusScope);
- setAcceptedMouseButtons(Qt::AllButtons);
-#if QT_CONFIG(cursor)
- setCursor(Qt::ArrowCursor);
-#endif
+ Q_D(QQuickPane);
+ d->init();
}
/*!
@@ -421,7 +383,7 @@ void QQuickPane::componentComplete()
{
Q_D(QQuickPane);
QQuickControl::componentComplete();
- d->updateContentSize();
+ d->updateImplicitContentSize();
}
void QQuickPane::contentItemChange(QQuickItem *newItem, QQuickItem *oldItem)