diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2018-04-05 17:30:34 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2018-04-06 15:22:10 +0000 |
commit | ea4dc11ce772d34ee71e4dca0b09f329e2953c68 (patch) | |
tree | 29157a824063f161c44c751de449af06903c7a5a | |
parent | f447493bf9a8cf3490da0f5409d76e7f7fc98759 (diff) |
QQuickPopupItem: inherit QQuickPane
Change-Id: Ia32f3004cf540f995344286683d754558369f279
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
21 files changed, 47 insertions, 79 deletions
diff --git a/src/imports/controls/Dialog.qml b/src/imports/controls/Dialog.qml index 768d3ff1..144e2c48 100644 --- a/src/imports/controls/Dialog.qml +++ b/src/imports/controls/Dialog.qml @@ -51,9 +51,6 @@ T.Dialog { + (footer && footer.visible ? footer.implicitHeight + spacing : 0) + (contentHeight > 0 ? contentHeight + topPadding + bottomPadding : 0)) - contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0) - contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0) - padding: 12 background: Rectangle { diff --git a/src/imports/controls/Drawer.qml b/src/imports/controls/Drawer.qml index 78199695..ebdb138a 100644 --- a/src/imports/controls/Drawer.qml +++ b/src/imports/controls/Drawer.qml @@ -47,9 +47,6 @@ T.Drawer { implicitWidth: Math.max(background ? background.implicitWidth : 0, contentWidth + leftPadding + rightPadding) implicitHeight: Math.max(background ? background.implicitHeight : 0, contentHeight + topPadding + bottomPadding) - contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0) - contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0) - topPadding: control.edge === Qt.BottomEdge leftPadding: control.edge === Qt.RightEdge rightPadding: control.edge === Qt.LeftEdge diff --git a/src/imports/controls/Popup.qml b/src/imports/controls/Popup.qml index f7966be4..1192a65c 100644 --- a/src/imports/controls/Popup.qml +++ b/src/imports/controls/Popup.qml @@ -47,9 +47,6 @@ T.Popup { implicitHeight: Math.max(background ? background.implicitHeight : 0, contentHeight > 0 ? contentHeight + topPadding + bottomPadding : 0) - contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0) - contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0) - padding: 12 background: Rectangle { diff --git a/src/imports/controls/fusion/Dialog.qml b/src/imports/controls/fusion/Dialog.qml index a2366170..b9052aa2 100644 --- a/src/imports/controls/fusion/Dialog.qml +++ b/src/imports/controls/fusion/Dialog.qml @@ -53,9 +53,6 @@ T.Dialog { + (footer && footer.visible ? footer.implicitHeight + spacing : 0) + (contentHeight > 0 ? contentHeight + topPadding + bottomPadding : 0)) - contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0) - contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0) - padding: 6 background: Rectangle { diff --git a/src/imports/controls/fusion/Drawer.qml b/src/imports/controls/fusion/Drawer.qml index 2ee18a9b..6feb1692 100644 --- a/src/imports/controls/fusion/Drawer.qml +++ b/src/imports/controls/fusion/Drawer.qml @@ -49,9 +49,6 @@ T.Drawer { implicitWidth: Math.max(background ? background.implicitWidth : 0, contentWidth + leftPadding + rightPadding) implicitHeight: Math.max(background ? background.implicitHeight : 0, contentHeight + topPadding + bottomPadding) - contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0) - contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0) - topPadding: control.edge === Qt.BottomEdge leftPadding: control.edge === Qt.RightEdge rightPadding: control.edge === Qt.LeftEdge diff --git a/src/imports/controls/fusion/Popup.qml b/src/imports/controls/fusion/Popup.qml index 1ac87a25..71c506ac 100644 --- a/src/imports/controls/fusion/Popup.qml +++ b/src/imports/controls/fusion/Popup.qml @@ -49,9 +49,6 @@ T.Popup { implicitHeight: Math.max(background ? background.implicitHeight : 0, contentHeight > 0 ? contentHeight + topPadding + bottomPadding : 0) - contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0) - contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0) - padding: 6 background: Rectangle { diff --git a/src/imports/controls/imagine/Dialog.qml b/src/imports/controls/imagine/Dialog.qml index 241d426f..1c3c4f53 100644 --- a/src/imports/controls/imagine/Dialog.qml +++ b/src/imports/controls/imagine/Dialog.qml @@ -52,9 +52,6 @@ T.Dialog { + (footer && footer.visible ? footer.implicitHeight + spacing : 0) + (contentHeight > 0 ? contentHeight + topPadding + bottomPadding : 0)) - contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0) - contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0) - topPadding: background ? background.topPadding : 0 leftPadding: background ? background.leftPadding : 0 rightPadding: background ? background.rightPadding : 0 diff --git a/src/imports/controls/imagine/Drawer.qml b/src/imports/controls/imagine/Drawer.qml index f653375b..280518b4 100644 --- a/src/imports/controls/imagine/Drawer.qml +++ b/src/imports/controls/imagine/Drawer.qml @@ -47,9 +47,6 @@ T.Drawer { implicitWidth: Math.max(background ? background.implicitWidth : 0, contentWidth + leftPadding + rightPadding) implicitHeight: Math.max(background ? background.implicitHeight : 0, contentHeight + topPadding + bottomPadding) - contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0) - contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0) - topPadding: background ? background.topPadding : 0 leftPadding: background ? background.leftPadding : 0 rightPadding: background ? background.rightPadding : 0 diff --git a/src/imports/controls/imagine/Popup.qml b/src/imports/controls/imagine/Popup.qml index 089bc158..e0edc866 100644 --- a/src/imports/controls/imagine/Popup.qml +++ b/src/imports/controls/imagine/Popup.qml @@ -47,9 +47,6 @@ T.Popup { implicitHeight: Math.max(background ? background.implicitHeight : 0, contentHeight > 0 ? contentHeight + topPadding + bottomPadding : 0) - contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0) - contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0) - topPadding: background ? background.topPadding : undefined leftPadding: background ? background.leftPadding : undefined rightPadding: background ? background.rightPadding : undefined diff --git a/src/imports/controls/material/Dialog.qml b/src/imports/controls/material/Dialog.qml index 51d2c654..79258f82 100644 --- a/src/imports/controls/material/Dialog.qml +++ b/src/imports/controls/material/Dialog.qml @@ -53,9 +53,6 @@ T.Dialog { + (footer && footer.visible ? footer.implicitHeight + spacing : 0) + (contentHeight > 0 ? contentHeight + topPadding + bottomPadding : 0)) - contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0) - contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0) - padding: 24 topPadding: 20 diff --git a/src/imports/controls/material/Drawer.qml b/src/imports/controls/material/Drawer.qml index 1d9314b8..ce9b49a4 100644 --- a/src/imports/controls/material/Drawer.qml +++ b/src/imports/controls/material/Drawer.qml @@ -47,9 +47,6 @@ T.Drawer { implicitWidth: Math.max(background ? background.implicitWidth : 0, contentWidth + leftPadding + rightPadding) implicitHeight: Math.max(background ? background.implicitHeight : 0, contentHeight + topPadding + bottomPadding) - contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0) - contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0) - topPadding: !dim && edge === Qt.BottomEdge && Material.elevation === 0 leftPadding: !dim && edge === Qt.RightEdge && Material.elevation === 0 rightPadding: !dim && edge === Qt.LeftEdge && Material.elevation === 0 diff --git a/src/imports/controls/material/Popup.qml b/src/imports/controls/material/Popup.qml index adc070a4..549ba0f0 100644 --- a/src/imports/controls/material/Popup.qml +++ b/src/imports/controls/material/Popup.qml @@ -49,9 +49,6 @@ T.Popup { implicitHeight: Math.max(background ? background.implicitHeight : 0, contentHeight > 0 ? contentHeight + topPadding + bottomPadding : 0) - contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0) - contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0) - padding: 12 enter: Transition { diff --git a/src/imports/controls/universal/Dialog.qml b/src/imports/controls/universal/Dialog.qml index 3d17e77b..98a5efea 100644 --- a/src/imports/controls/universal/Dialog.qml +++ b/src/imports/controls/universal/Dialog.qml @@ -51,9 +51,6 @@ T.Dialog { + (footer && footer.visible ? footer.implicitHeight + spacing : 0) + (contentHeight > 0 ? contentHeight + topPadding + bottomPadding : 0)) - contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0) - contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0) - padding: 24 verticalPadding: 18 diff --git a/src/imports/controls/universal/Drawer.qml b/src/imports/controls/universal/Drawer.qml index dbb3f2a9..2fe252e5 100644 --- a/src/imports/controls/universal/Drawer.qml +++ b/src/imports/controls/universal/Drawer.qml @@ -46,9 +46,6 @@ T.Drawer { implicitWidth: Math.max(background ? background.implicitWidth : 0, contentWidth + leftPadding + rightPadding) implicitHeight: Math.max(background ? background.implicitHeight : 0, contentHeight + topPadding + bottomPadding) - contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0) - contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0) - topPadding: control.edge === Qt.BottomEdge leftPadding: control.edge === Qt.RightEdge rightPadding: control.edge === Qt.LeftEdge diff --git a/src/imports/controls/universal/Popup.qml b/src/imports/controls/universal/Popup.qml index 9d250782..243c793b 100644 --- a/src/imports/controls/universal/Popup.qml +++ b/src/imports/controls/universal/Popup.qml @@ -46,9 +46,6 @@ T.Popup { implicitHeight: Math.max(background ? background.implicitHeight : 0, contentHeight > 0 ? contentHeight + topPadding + bottomPadding : 0) - contentWidth: contentItem.implicitWidth || (contentChildren.length === 1 ? contentChildren[0].implicitWidth : 0) - contentHeight: contentItem.implicitHeight || (contentChildren.length === 1 ? contentChildren[0].implicitHeight : 0) - padding: 12 background: Rectangle { diff --git a/src/quicktemplates2/qquickpane.cpp b/src/quicktemplates2/qquickpane.cpp index 7721704a..cf89822a 100644 --- a/src/quicktemplates2/qquickpane.cpp +++ b/src/quicktemplates2/qquickpane.cpp @@ -220,7 +220,11 @@ qreal QQuickPanePrivate::getContentHeight() const void QQuickPanePrivate::updateContentWidth() { Q_Q(QQuickPane); - if (hasContentWidth || !componentComplete) + if (hasContentWidth) + return; + + // a special case for width<->height dependent content (wrapping text) in ScrollView + if (contentWidth < 0 && !componentComplete) return; qreal oldContentWidth = contentWidth; @@ -235,7 +239,11 @@ void QQuickPanePrivate::updateContentWidth() void QQuickPanePrivate::updateContentHeight() { Q_Q(QQuickPane); - if (hasContentHeight || !componentComplete) + if (hasContentHeight) + return; + + // a special case for width<->height dependent content (wrapping text) in ScrollView + if (contentWidth < 0 && !componentComplete) return; qreal oldContentHeight = contentHeight; diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index f7baae9b..6995b45d 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -254,8 +254,6 @@ QQuickPopupPrivate::QQuickPopupPrivate() leftMargin(0), rightMargin(0), bottomMargin(0), - contentWidth(0), - contentHeight(0), transitionState(QQuickPopupPrivate::NoTransition), closePolicy(DefaultClosePolicy), parentItem(nullptr), @@ -1049,17 +1047,13 @@ void QQuickPopup::setImplicitHeight(qreal height) qreal QQuickPopup::contentWidth() const { Q_D(const QQuickPopup); - return d->contentWidth; + return d->popupItem->contentWidth(); } void QQuickPopup::setContentWidth(qreal width) { Q_D(QQuickPopup); - if (qFuzzyCompare(d->contentWidth, width)) - return; - - d->contentWidth = width; - emit contentWidthChanged(); + d->popupItem->setContentWidth(width); } /*! @@ -1075,17 +1069,13 @@ void QQuickPopup::setContentWidth(qreal width) qreal QQuickPopup::contentHeight() const { Q_D(const QQuickPopup); - return d->contentHeight; + return d->popupItem->contentHeight(); } void QQuickPopup::setContentHeight(qreal height) { Q_D(QQuickPopup); - if (qFuzzyCompare(d->contentHeight, height)) - return; - - d->contentHeight = height; - emit contentHeightChanged(); + d->popupItem->setContentHeight(height); } /*! @@ -2371,6 +2361,14 @@ void QQuickPopup::contentItemChange(QQuickItem *newItem, QQuickItem *oldItem) Q_UNUSED(oldItem); } +void QQuickPopup::contentSizeChange(const QSizeF &newSize, const QSizeF &oldSize) +{ + if (!qFuzzyCompare(newSize.width(), oldSize.width())) + emit contentWidthChanged(); + if (!qFuzzyCompare(newSize.height(), oldSize.height())) + emit contentHeightChanged(); +} + void QQuickPopup::fontChange(const QFont &newFont, const QFont &oldFont) { Q_UNUSED(newFont); diff --git a/src/quicktemplates2/qquickpopup_p.h b/src/quicktemplates2/qquickpopup_p.h index 1a9439d6..98e3c72f 100644 --- a/src/quicktemplates2/qquickpopup_p.h +++ b/src/quicktemplates2/qquickpopup_p.h @@ -401,6 +401,7 @@ protected: #endif virtual void contentItemChange(QQuickItem *newItem, QQuickItem *oldItem); + virtual void contentSizeChange(const QSizeF &newSize, const QSizeF &oldSize); virtual void fontChange(const QFont &newFont, const QFont &oldFont); virtual void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); virtual void localeChange(const QLocale &newLocale, const QLocale &oldLocale); diff --git a/src/quicktemplates2/qquickpopup_p_p.h b/src/quicktemplates2/qquickpopup_p_p.h index 1688b808..37c9ffe5 100644 --- a/src/quicktemplates2/qquickpopup_p_p.h +++ b/src/quicktemplates2/qquickpopup_p_p.h @@ -180,8 +180,6 @@ public: qreal leftMargin; qreal rightMargin; qreal bottomMargin; - qreal contentWidth; - qreal contentHeight; QPointF pressPoint; TransitionState transitionState; QQuickPopup::ClosePolicy closePolicy; diff --git a/src/quicktemplates2/qquickpopupitem.cpp b/src/quicktemplates2/qquickpopupitem.cpp index d1247bf6..757fa701 100644 --- a/src/quicktemplates2/qquickpopupitem.cpp +++ b/src/quicktemplates2/qquickpopupitem.cpp @@ -37,7 +37,7 @@ #include "qquickpopupitem_p_p.h" #include "qquickapplicationwindow_p.h" #include "qquickshortcutcontext_p_p.h" -#include "qquickcontrol_p_p.h" +#include "qquickpane_p_p.h" #include "qquickcontentitem_p.h" #include "qquickpopup_p_p.h" #include "qquickdeferredexecute_p_p.h" @@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE -class QQuickPopupItemPrivate : public QQuickControlPrivate +class QQuickPopupItemPrivate : public QQuickPanePrivate { Q_DECLARE_PUBLIC(QQuickPopupItem) @@ -83,13 +83,13 @@ QQuickPopupItemPrivate::QQuickPopupItemPrivate(QQuickPopup *popup) void QQuickPopupItemPrivate::implicitWidthChanged() { - QQuickControlPrivate::implicitWidthChanged(); + QQuickPanePrivate::implicitWidthChanged(); emit popup->implicitWidthChanged(); } void QQuickPopupItemPrivate::implicitHeightChanged() { - QQuickControlPrivate::implicitHeightChanged(); + QQuickPanePrivate::implicitHeightChanged(); emit popup->implicitHeightChanged(); } @@ -112,7 +112,7 @@ void QQuickPopupItemPrivate::resolvePalette() QQuickItem *QQuickPopupItemPrivate::getContentItem() { Q_Q(QQuickPopupItem); - if (QQuickItem *item = QQuickControlPrivate::getContentItem()) + if (QQuickItem *item = QQuickPanePrivate::getContentItem()) return item; return new QQuickContentItem(popup, q); @@ -155,7 +155,7 @@ void QQuickPopupItemPrivate::executeBackground(bool complete) } QQuickPopupItem::QQuickPopupItem(QQuickPopup *popup) - : QQuickControl(*(new QQuickPopupItemPrivate(popup)), nullptr) + : QQuickPane(*(new QQuickPopupItemPrivate(popup)), nullptr) { setParent(popup); setFlag(ItemIsFocusScope); @@ -309,28 +309,35 @@ void QQuickPopupItem::wheelEvent(QWheelEvent *event) void QQuickPopupItem::contentItemChange(QQuickItem *newItem, QQuickItem *oldItem) { Q_D(QQuickPopupItem); - QQuickControl::contentItemChange(newItem, oldItem); + QQuickPane::contentItemChange(newItem, oldItem); d->popup->contentItemChange(newItem, oldItem); } +void QQuickPopupItem::contentSizeChange(const QSizeF &newSize, const QSizeF &oldSize) +{ + Q_D(QQuickPopupItem); + QQuickPane::contentSizeChange(newSize, oldSize); + d->popup->contentSizeChange(newSize, oldSize); +} + void QQuickPopupItem::fontChange(const QFont &newFont, const QFont &oldFont) { Q_D(QQuickPopupItem); - QQuickControl::fontChange(newFont, oldFont); + QQuickPane::fontChange(newFont, oldFont); d->popup->fontChange(newFont, oldFont); } void QQuickPopupItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) { Q_D(QQuickPopupItem); - QQuickControl::geometryChanged(newGeometry, oldGeometry); + QQuickPane::geometryChanged(newGeometry, oldGeometry); d->popup->geometryChanged(newGeometry, oldGeometry); } void QQuickPopupItem::localeChange(const QLocale &newLocale, const QLocale &oldLocale) { Q_D(QQuickPopupItem); - QQuickControl::localeChange(newLocale, oldLocale); + QQuickPane::localeChange(newLocale, oldLocale); d->popup->localeChange(newLocale, oldLocale); } @@ -343,21 +350,21 @@ void QQuickPopupItem::mirrorChange() void QQuickPopupItem::itemChange(ItemChange change, const ItemChangeData &data) { Q_D(QQuickPopupItem); - QQuickControl::itemChange(change, data); + QQuickPane::itemChange(change, data); d->popup->itemChange(change, data); } void QQuickPopupItem::paddingChange(const QMarginsF &newPadding, const QMarginsF &oldPadding) { Q_D(QQuickPopupItem); - QQuickControl::paddingChange(newPadding, oldPadding); + QQuickPane::paddingChange(newPadding, oldPadding); d->popup->paddingChange(newPadding, oldPadding); } void QQuickPopupItem::paletteChange(const QPalette &newPalette, const QPalette &oldPalette) { Q_D(QQuickPopupItem); - QQuickControl::paletteChange(newPalette, oldPalette); + QQuickPane::paletteChange(newPalette, oldPalette); d->popup->paletteChange(newPalette, oldPalette); } @@ -383,7 +390,7 @@ QAccessible::Role QQuickPopupItem::accessibleRole() const void QQuickPopupItem::accessibilityActiveChanged(bool active) { Q_D(const QQuickPopupItem); - QQuickControl::accessibilityActiveChanged(active); + QQuickPane::accessibilityActiveChanged(active); d->popup->accessibilityActiveChanged(active); } #endif diff --git a/src/quicktemplates2/qquickpopupitem_p_p.h b/src/quicktemplates2/qquickpopupitem_p_p.h index 0187b77a..736ff0d2 100644 --- a/src/quicktemplates2/qquickpopupitem_p_p.h +++ b/src/quicktemplates2/qquickpopupitem_p_p.h @@ -48,14 +48,14 @@ // We mean it. // -#include <QtQuickTemplates2/private/qquickcontrol_p.h> +#include <QtQuickTemplates2/private/qquickpane_p.h> QT_BEGIN_NAMESPACE class QQuickPopup; class QQuickPopupItemPrivate; -class QQuickPopupItem : public QQuickControl +class QQuickPopupItem : public QQuickPane { Q_OBJECT @@ -88,6 +88,7 @@ protected: #endif void contentItemChange(QQuickItem *newItem, QQuickItem *oldItem) override; + void contentSizeChange(const QSizeF &newSize, const QSizeF &oldSize) override; void fontChange(const QFont &newFont, const QFont &oldFont) override; void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override; void localeChange(const QLocale &newLocale, const QLocale &oldLocale) override; |