diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2018-04-17 14:34:27 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2018-04-19 07:46:49 +0000 |
commit | c2768f0f2aad6dd78bf0e69317575357041cc3eb (patch) | |
tree | 12d55f8d59996cb6421004f2c710a6d6de944d75 | |
parent | 1a7be215415eacc9c1210b8e686d6ae517893806 (diff) |
Page: add implicit header and footer size properties
[ChangeLog][Controls][Page] Added implicitHeaderWidth, implicitHeaderHeight,
implicitFooterWidth, and implicitFooterHeight properties.
Change-Id: Ia6de025767e64dd2b44edafc2e7dfdf9a99e3b5f
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r-- | src/imports/controls/Page.qml | 8 | ||||
-rw-r--r-- | src/imports/controls/fusion/Page.qml | 8 | ||||
-rw-r--r-- | src/imports/controls/imagine/Page.qml | 8 | ||||
-rw-r--r-- | src/imports/controls/material/Page.qml | 8 | ||||
-rw-r--r-- | src/imports/controls/universal/Page.qml | 8 | ||||
-rw-r--r-- | src/imports/templates/qtquicktemplates2plugin.cpp | 1 | ||||
-rw-r--r-- | src/quicktemplates2/qquickpage.cpp | 110 | ||||
-rw-r--r-- | src/quicktemplates2/qquickpage_p.h | 17 | ||||
-rw-r--r-- | src/quicktemplates2/qquickpage_p_p.h | 2 |
9 files changed, 149 insertions, 21 deletions
diff --git a/src/imports/controls/Page.qml b/src/imports/controls/Page.qml index a6c00806..c5efda71 100644 --- a/src/imports/controls/Page.qml +++ b/src/imports/controls/Page.qml @@ -44,12 +44,12 @@ T.Page { implicitWidth: Math.max(implicitBackgroundWidth, contentWidth + leftPadding + rightPadding, - header && header.visible ? header.implicitWidth : 0, - footer && footer.visible ? footer.implicitWidth : 0) + implicitHeaderWidth, + implicitFooterWidth) implicitHeight: Math.max(implicitBackgroundHeight, contentHeight + topPadding + bottomPadding - + (header && header.visible ? header.implicitHeight + spacing : 0) - + (footer && footer.visible ? footer.implicitHeight + spacing : 0)) + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) background: Rectangle { color: control.palette.window diff --git a/src/imports/controls/fusion/Page.qml b/src/imports/controls/fusion/Page.qml index b258d493..a127c3be 100644 --- a/src/imports/controls/fusion/Page.qml +++ b/src/imports/controls/fusion/Page.qml @@ -46,12 +46,12 @@ T.Page { implicitWidth: Math.max(implicitBackgroundWidth, contentWidth + leftPadding + rightPadding, - header && header.visible ? header.implicitWidth : 0, - footer && footer.visible ? footer.implicitWidth : 0) + implicitHeaderWidth, + implicitFooterWidth) implicitHeight: Math.max(implicitBackgroundHeight, contentHeight + topPadding + bottomPadding - + (header && header.visible ? header.implicitHeight + spacing : 0) - + (footer && footer.visible ? footer.implicitHeight + spacing : 0)) + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) background: Rectangle { color: palette.window diff --git a/src/imports/controls/imagine/Page.qml b/src/imports/controls/imagine/Page.qml index 4b97c9d0..767d3dbd 100644 --- a/src/imports/controls/imagine/Page.qml +++ b/src/imports/controls/imagine/Page.qml @@ -44,12 +44,12 @@ T.Page { implicitWidth: Math.max(implicitBackgroundWidth, contentWidth + leftPadding + rightPadding, - header && header.visible ? header.implicitWidth : 0, - footer && footer.visible ? footer.implicitWidth : 0) + implicitHeaderWidth, + implicitFooterWidth) implicitHeight: Math.max(implicitBackgroundHeight, contentHeight + topPadding + bottomPadding - + (header && header.visible ? header.implicitHeight + spacing : 0) - + (footer && footer.visible ? footer.implicitHeight + spacing : 0)) + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) topPadding: background ? background.topPadding : 0 leftPadding: background ? background.leftPadding : 0 diff --git a/src/imports/controls/material/Page.qml b/src/imports/controls/material/Page.qml index c540a0bf..5c7ec17b 100644 --- a/src/imports/controls/material/Page.qml +++ b/src/imports/controls/material/Page.qml @@ -43,12 +43,12 @@ T.Page { implicitWidth: Math.max(implicitBackgroundWidth, contentWidth + leftPadding + rightPadding, - header && header.visible ? header.implicitWidth : 0, - footer && footer.visible ? footer.implicitWidth : 0) + implicitHeaderWidth, + implicitFooterWidth) implicitHeight: Math.max(implicitBackgroundHeight, contentHeight + topPadding + bottomPadding - + (header && header.visible ? header.implicitHeight + spacing : 0) - + (footer && footer.visible ? footer.implicitHeight + spacing : 0)) + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) background: Rectangle { color: control.Material.backgroundColor diff --git a/src/imports/controls/universal/Page.qml b/src/imports/controls/universal/Page.qml index bf4aa820..1c16dd5c 100644 --- a/src/imports/controls/universal/Page.qml +++ b/src/imports/controls/universal/Page.qml @@ -43,12 +43,12 @@ T.Page { implicitWidth: Math.max(implicitBackgroundWidth, contentWidth + leftPadding + rightPadding, - header && header.visible ? header.implicitWidth : 0, - footer && footer.visible ? footer.implicitWidth : 0) + implicitHeaderWidth, + implicitFooterWidth) implicitHeight: Math.max(implicitBackgroundHeight, contentHeight + topPadding + bottomPadding - + (header && header.visible ? header.implicitHeight + spacing : 0) - + (footer && footer.visible ? footer.implicitHeight + spacing : 0)) + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) background: Rectangle { color: control.Universal.background diff --git a/src/imports/templates/qtquicktemplates2plugin.cpp b/src/imports/templates/qtquicktemplates2plugin.cpp index fa6d98a7..6e5aec38 100644 --- a/src/imports/templates/qtquicktemplates2plugin.cpp +++ b/src/imports/templates/qtquicktemplates2plugin.cpp @@ -337,6 +337,7 @@ void QtQuickTemplates2Plugin::registerTypes(const char *uri) qmlRegisterType<QQuickComboBox, 5>(uri, 2, 5, "ComboBox"); qmlRegisterType<QQuickControl, 5>(uri, 2, 5, "Control"); qmlRegisterType<QQuickContainer, 5>(uri, 2, 5, "Container"); + qmlRegisterType<QQuickPage, 5>(uri, 2, 5, "Page"); qmlRegisterType<QQuickPopup, 5>(uri, 2, 5, "Popup"); qmlRegisterType<QQuickPopupAnchors>(); qmlRegisterType<QQuickRangeSlider, 5>(uri, 2, 5, "RangeSlider"); diff --git a/src/quicktemplates2/qquickpage.cpp b/src/quicktemplates2/qquickpage.cpp index 31a3914f..93196c4c 100644 --- a/src/quicktemplates2/qquickpage.cpp +++ b/src/quicktemplates2/qquickpage.cpp @@ -146,9 +146,37 @@ void QQuickPagePrivate::resizeContent() void QQuickPagePrivate::itemVisibilityChanged(QQuickItem *item) { + Q_Q(QQuickPage); QQuickPanePrivate::itemVisibilityChanged(item); - if (item == header || item == footer) + if (item == header) { + emit q->implicitHeaderWidthChanged(); + emit q->implicitHeaderHeightChanged(); relayout(); + } else if (item == footer) { + emit q->implicitFooterWidthChanged(); + emit q->implicitFooterHeightChanged(); + relayout(); + } +} + +void QQuickPagePrivate::itemImplicitWidthChanged(QQuickItem *item) +{ + Q_Q(QQuickPage); + QQuickPanePrivate::itemImplicitWidthChanged(item); + if (item == header) + emit q->implicitHeaderWidthChanged(); + else if (item == footer) + emit q->implicitFooterWidthChanged(); +} + +void QQuickPagePrivate::itemImplicitHeightChanged(QQuickItem *item) +{ + Q_Q(QQuickPage); + QQuickPanePrivate::itemImplicitHeightChanged(item); + if (item == header) + emit q->implicitHeaderHeightChanged(); + else if (item == footer) + emit q->implicitFooterHeightChanged(); } void QQuickPagePrivate::itemGeometryChanged(QQuickItem *item, QQuickGeometryChange change, const QRectF & diff) @@ -165,10 +193,14 @@ void QQuickPagePrivate::itemDestroyed(QQuickItem *item) if (item == header) { header = nullptr; relayout(); + emit q->implicitHeaderWidthChanged(); + emit q->implicitHeaderHeightChanged(); emit q->headerChanged(); } else if (item == footer) { footer = nullptr; relayout(); + emit q->implicitFooterWidthChanged(); + emit q->implicitFooterHeightChanged(); emit q->footerChanged(); } } @@ -327,6 +359,82 @@ void QQuickPage::setFooter(QQuickItem *footer) emit footerChanged(); } +/*! + \since QtQuick.Controls 2.5 (Qt 5.12) + \qmlproperty real QtQuick.Controls::Page::implicitHeaderWidth + \readonly + + This property holds the implicit header width. + + The value is equal to \c {header && header.visible ? header.implicitWidth : 0}. + + \sa implicitHeaderHeight, implicitFooterWidth +*/ +qreal QQuickPage::implicitHeaderWidth() const +{ + Q_D(const QQuickPage); + if (!d->header || !d->header->isVisible()) + return 0; + return d->header->implicitWidth(); +} + +/*! + \since QtQuick.Controls 2.5 (Qt 5.12) + \qmlproperty real QtQuick.Controls::Page::implicitHeaderHeight + \readonly + + This property holds the implicit header height. + + The value is equal to \c {header && header.visible ? header.implicitHeight : 0}. + + \sa implicitHeaderWidth, implicitFooterHeight +*/ +qreal QQuickPage::implicitHeaderHeight() const +{ + Q_D(const QQuickPage); + if (!d->header || !d->header->isVisible()) + return 0; + return d->header->implicitHeight(); +} + +/*! + \since QtQuick.Controls 2.5 (Qt 5.12) + \qmlproperty real QtQuick.Controls::Page::implicitFooterWidth + \readonly + + This property holds the implicit footer width. + + The value is equal to \c {footer && footer.visible ? footer.implicitWidth : 0}. + + \sa implicitFooterHeight, implicitHeaderWidth +*/ +qreal QQuickPage::implicitFooterWidth() const +{ + Q_D(const QQuickPage); + if (!d->footer || !d->footer->isVisible()) + return 0; + return d->footer->implicitWidth(); +} + +/*! + \since QtQuick.Controls 2.5 (Qt 5.12) + \qmlproperty real QtQuick.Controls::Page::implicitFooterHeight + \readonly + + This property holds the implicit footer height. + + The value is equal to \c {footer && footer.visible ? footer.implicitHeight : 0}. + + \sa implicitFooterWidth, implicitHeaderHeight +*/ +qreal QQuickPage::implicitFooterHeight() const +{ + Q_D(const QQuickPage); + if (!d->footer || !d->footer->isVisible()) + return 0; + return d->footer->implicitHeight(); +} + void QQuickPage::componentComplete() { Q_D(QQuickPage); diff --git a/src/quicktemplates2/qquickpage_p.h b/src/quicktemplates2/qquickpage_p.h index a39ac8e2..b7888ad6 100644 --- a/src/quicktemplates2/qquickpage_p.h +++ b/src/quicktemplates2/qquickpage_p.h @@ -64,6 +64,11 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickPage : public QQuickPane // 2.1 (Qt 5.8) Q_PROPERTY(qreal contentWidth READ contentWidth WRITE setContentWidth NOTIFY contentWidthChanged FINAL REVISION 1) Q_PROPERTY(qreal contentHeight READ contentHeight WRITE setContentHeight NOTIFY contentHeightChanged FINAL REVISION 1) + // 2.5 (Qt 5.12) + Q_PROPERTY(qreal implicitHeaderWidth READ implicitHeaderWidth NOTIFY implicitHeaderWidthChanged FINAL REVISION 5) + Q_PROPERTY(qreal implicitHeaderHeight READ implicitHeaderHeight NOTIFY implicitHeaderHeightChanged FINAL REVISION 5) + Q_PROPERTY(qreal implicitFooterWidth READ implicitFooterWidth NOTIFY implicitFooterWidthChanged FINAL REVISION 5) + Q_PROPERTY(qreal implicitFooterHeight READ implicitFooterHeight NOTIFY implicitFooterHeightChanged FINAL REVISION 5) public: explicit QQuickPage(QQuickItem *parent = nullptr); @@ -78,10 +83,22 @@ public: QQuickItem *footer() const; void setFooter(QQuickItem *footer); + // 2.5 (Qt 5.12) + qreal implicitHeaderWidth() const; + qreal implicitHeaderHeight() const; + + qreal implicitFooterWidth() const; + qreal implicitFooterHeight() const; + Q_SIGNALS: void titleChanged(); void headerChanged(); void footerChanged(); + // 2.5 (Qt 5.12) + void implicitHeaderWidthChanged(); + void implicitHeaderHeightChanged(); + void implicitFooterWidthChanged(); + void implicitFooterHeightChanged(); protected: QQuickPage(QQuickPagePrivate &dd, QQuickItem *parent); diff --git a/src/quicktemplates2/qquickpage_p_p.h b/src/quicktemplates2/qquickpage_p_p.h index 42ffcfb2..b7d89ac4 100644 --- a/src/quicktemplates2/qquickpage_p_p.h +++ b/src/quicktemplates2/qquickpage_p_p.h @@ -63,6 +63,8 @@ public: void resizeContent() override; void itemVisibilityChanged(QQuickItem *item) override; + void itemImplicitWidthChanged(QQuickItem *item) override; + void itemImplicitHeightChanged(QQuickItem *item) override; void itemGeometryChanged(QQuickItem *item, QQuickGeometryChange change, const QRectF & diff) override; void itemDestroyed(QQuickItem *item) override; |