diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2018-04-19 07:20:09 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2018-04-19 09:34:53 +0000 |
commit | 06071fd14d6cff4d3f9b3cdff92f5ddf4bf2b3bc (patch) | |
tree | 270a4f1d68b5b6ff30013ca0b47969fafbc96221 /src | |
parent | 37ef78bef2a1b8f6de7b196015a0343385ba36aa (diff) |
GroupBox: add implicitLabelWidth|Height
[ChangeLog][Controls][GroupBox] Added implicitLabelWidth and
implicitLabelHeight properties.
Change-Id: Ieae54a3b3044b306cd00f45101c6573b5291352d
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/imports/controls/GroupBox.qml | 4 | ||||
-rw-r--r-- | src/imports/controls/fusion/GroupBox.qml | 4 | ||||
-rw-r--r-- | src/imports/controls/imagine/GroupBox.qml | 4 | ||||
-rw-r--r-- | src/imports/controls/material/GroupBox.qml | 4 | ||||
-rw-r--r-- | src/imports/controls/universal/GroupBox.qml | 4 | ||||
-rw-r--r-- | src/imports/templates/qtquicktemplates2plugin.cpp | 1 | ||||
-rw-r--r-- | src/quicktemplates2/qquickgroupbox.cpp | 80 | ||||
-rw-r--r-- | src/quicktemplates2/qquickgroupbox_p.h | 11 |
8 files changed, 100 insertions, 12 deletions
diff --git a/src/imports/controls/GroupBox.qml b/src/imports/controls/GroupBox.qml index c97eeba3..c82e9b35 100644 --- a/src/imports/controls/GroupBox.qml +++ b/src/imports/controls/GroupBox.qml @@ -43,13 +43,13 @@ T.GroupBox { id: control implicitWidth: Math.max(implicitBackgroundWidth, - label ? label.implicitWidth + leftPadding + rightPadding : 0, + implicitLabelWidth + leftPadding + rightPadding, contentWidth + leftPadding + rightPadding) implicitHeight: Math.max(implicitBackgroundHeight, contentHeight + topPadding + bottomPadding) spacing: 6 padding: 12 - topPadding: padding + (label && label.implicitWidth > 0 ? label.implicitHeight + spacing : 0) + topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) label: Text { x: control.leftPadding diff --git a/src/imports/controls/fusion/GroupBox.qml b/src/imports/controls/fusion/GroupBox.qml index c270403b..ca7f2e2a 100644 --- a/src/imports/controls/fusion/GroupBox.qml +++ b/src/imports/controls/fusion/GroupBox.qml @@ -45,13 +45,13 @@ T.GroupBox { id: control implicitWidth: Math.max(implicitBackgroundWidth, - label ? label.implicitWidth + leftPadding + rightPadding : 0, + implicitLabelWidth + leftPadding + rightPadding, contentWidth + leftPadding + rightPadding) implicitHeight: Math.max(implicitBackgroundHeight, contentHeight + topPadding + bottomPadding) spacing: 6 padding: 9 - topPadding: padding + (label && label.implicitWidth > 0 ? label.implicitHeight + spacing : 0) + topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) label: Text { x: control.leftPadding diff --git a/src/imports/controls/imagine/GroupBox.qml b/src/imports/controls/imagine/GroupBox.qml index d18af5ba..af6e2376 100644 --- a/src/imports/controls/imagine/GroupBox.qml +++ b/src/imports/controls/imagine/GroupBox.qml @@ -44,11 +44,11 @@ T.GroupBox { id: control implicitWidth: Math.max(implicitBackgroundWidth, - label ? label.implicitWidth + leftPadding + rightPadding : 0, + implicitLabelWidth + leftPadding + rightPadding, contentWidth + leftPadding + rightPadding) implicitHeight: Math.max(implicitBackgroundHeight, contentHeight + topPadding + bottomPadding) - topPadding: (background ? background.topPadding : 0) + (label && label.implicitWidth > 0 ? label.implicitHeight + spacing : 0) + topPadding: (background ? background.topPadding : 0) + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) leftPadding: background ? background.leftPadding : 0 rightPadding: background ? background.rightPadding : 0 bottomPadding: background ? background.bottomPadding : 0 diff --git a/src/imports/controls/material/GroupBox.qml b/src/imports/controls/material/GroupBox.qml index 7edb26f2..78e9c29e 100644 --- a/src/imports/controls/material/GroupBox.qml +++ b/src/imports/controls/material/GroupBox.qml @@ -43,13 +43,13 @@ T.GroupBox { id: control implicitWidth: Math.max(implicitBackgroundWidth, - label ? label.implicitWidth + leftPadding + rightPadding : 0, + implicitLabelWidth + leftPadding + rightPadding, contentWidth + leftPadding + rightPadding) implicitHeight: Math.max(implicitBackgroundHeight, contentHeight + topPadding + bottomPadding) spacing: 6 padding: 12 - topPadding: Material.frameVerticalPadding + (label && label.implicitWidth > 0 ? label.implicitHeight + spacing : 0) + topPadding: Material.frameVerticalPadding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) bottomPadding: Material.frameVerticalPadding label: Text { diff --git a/src/imports/controls/universal/GroupBox.qml b/src/imports/controls/universal/GroupBox.qml index 09379bd2..1fe45dfd 100644 --- a/src/imports/controls/universal/GroupBox.qml +++ b/src/imports/controls/universal/GroupBox.qml @@ -42,13 +42,13 @@ T.GroupBox { id: control implicitWidth: Math.max(implicitBackgroundWidth, - label ? label.implicitWidth + leftPadding + rightPadding : 0, + implicitLabelWidth + leftPadding + rightPadding, contentWidth + leftPadding + rightPadding) implicitHeight: Math.max(implicitBackgroundHeight, contentHeight + topPadding + bottomPadding) spacing: 12 padding: 12 - topPadding: padding + (label && label.implicitWidth > 0 ? label.implicitHeight + spacing : 0) + topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) label: Text { x: control.leftPadding diff --git a/src/imports/templates/qtquicktemplates2plugin.cpp b/src/imports/templates/qtquicktemplates2plugin.cpp index 088b6552..df053b70 100644 --- a/src/imports/templates/qtquicktemplates2plugin.cpp +++ b/src/imports/templates/qtquicktemplates2plugin.cpp @@ -338,6 +338,7 @@ void QtQuickTemplates2Plugin::registerTypes(const char *uri) qmlRegisterType<QQuickControl, 5>(uri, 2, 5, "Control"); qmlRegisterType<QQuickContainer, 5>(uri, 2, 5, "Container"); qmlRegisterType<QQuickDialog, 5>(uri, 2, 5, "Dialog"); + qmlRegisterType<QQuickGroupBox, 5>(uri, 2, 5, "GroupBox"); qmlRegisterType<QQuickPage, 5>(uri, 2, 5, "Page"); qmlRegisterType<QQuickPopup, 5>(uri, 2, 5, "Popup"); qmlRegisterType<QQuickPopupAnchors>(); diff --git a/src/quicktemplates2/qquickgroupbox.cpp b/src/quicktemplates2/qquickgroupbox.cpp index cc74cce9..490d8bdd 100644 --- a/src/quicktemplates2/qquickgroupbox.cpp +++ b/src/quicktemplates2/qquickgroupbox.cpp @@ -94,6 +94,9 @@ public: void cancelLabel(); void executeLabel(bool complete = false); + void itemImplicitWidthChanged(QQuickItem *item) override; + void itemImplicitHeightChanged(QQuickItem *item) override; + QString title; QQuickDeferredPointer<QQuickItem> label; }; @@ -118,11 +121,33 @@ void QQuickGroupBoxPrivate::executeLabel(bool complete) quickCompleteDeferred(q, labelName(), label); } +void QQuickGroupBoxPrivate::itemImplicitWidthChanged(QQuickItem *item) +{ + Q_Q(QQuickGroupBox); + QQuickFramePrivate::itemImplicitWidthChanged(item); + if (item == label) + emit q->implicitLabelWidthChanged(); +} + +void QQuickGroupBoxPrivate::itemImplicitHeightChanged(QQuickItem *item) +{ + Q_Q(QQuickGroupBox); + QQuickFramePrivate::itemImplicitHeightChanged(item); + if (item == label) + emit q->implicitLabelHeightChanged(); +} + QQuickGroupBox::QQuickGroupBox(QQuickItem *parent) : QQuickFrame(*(new QQuickGroupBoxPrivate), parent) { } +QQuickGroupBox::~QQuickGroupBox() +{ + Q_D(QQuickGroupBox); + d->removeImplicitSizeListener(d->label); +} + /*! \qmlproperty string QtQuick.Controls::GroupBox::title @@ -172,14 +197,65 @@ void QQuickGroupBox::setLabel(QQuickItem *label) if (!d->label.isExecuting()) d->cancelLabel(); + const qreal oldImplicitLabelWidth = implicitLabelWidth(); + const qreal oldImplicitLabelHeight = implicitLabelHeight(); + + d->removeImplicitSizeListener(d->label); delete d->label; d->label = label; - if (label && !label->parentItem()) - label->setParentItem(this); + + if (label) { + if (!label->parentItem()) + label->setParentItem(this); + d->addImplicitSizeListener(label); + } + + if (!qFuzzyCompare(oldImplicitLabelWidth, implicitLabelWidth())) + emit implicitLabelWidthChanged(); + if (!qFuzzyCompare(oldImplicitLabelHeight, implicitLabelHeight())) + emit implicitLabelHeightChanged(); if (!d->label.isExecuting()) emit labelChanged(); } +/*! + \since QtQuick.Controls 2.5 (Qt 5.12) + \qmlproperty real QtQuick.Controls::GroupBox::implicitLabelWidth + \readonly + + This property holds the implicit label width. + + The value is equal to \c {label ? label.implicitWidth : 0}. + + \sa implicitLabelHeight +*/ +qreal QQuickGroupBox::implicitLabelWidth() const +{ + Q_D(const QQuickGroupBox); + if (!d->label) + return 0; + return d->label->implicitWidth(); +} + +/*! + \since QtQuick.Controls 2.5 (Qt 5.12) + \qmlproperty real QtQuick.Controls::GroupBox::implicitLabelHeight + \readonly + + This property holds the implicit label height. + + The value is equal to \c {label ? label.implicitHeight : 0}. + + \sa implicitLabelWidth +*/ +qreal QQuickGroupBox::implicitLabelHeight() const +{ + Q_D(const QQuickGroupBox); + if (!d->label) + return 0; + return d->label->implicitHeight(); +} + void QQuickGroupBox::componentComplete() { Q_D(QQuickGroupBox); diff --git a/src/quicktemplates2/qquickgroupbox_p.h b/src/quicktemplates2/qquickgroupbox_p.h index b46d91fd..de36d7d7 100644 --- a/src/quicktemplates2/qquickgroupbox_p.h +++ b/src/quicktemplates2/qquickgroupbox_p.h @@ -59,10 +59,14 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickGroupBox : public QQuickFrame Q_OBJECT Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged FINAL) Q_PROPERTY(QQuickItem *label READ label WRITE setLabel NOTIFY labelChanged FINAL) + // 2.5 (Qt 5.12) + Q_PROPERTY(qreal implicitLabelWidth READ implicitLabelWidth NOTIFY implicitLabelWidthChanged FINAL REVISION 5) + Q_PROPERTY(qreal implicitLabelHeight READ implicitLabelHeight NOTIFY implicitLabelHeightChanged FINAL REVISION 5) Q_CLASSINFO("DeferredPropertyNames", "background,contentItem,label") public: explicit QQuickGroupBox(QQuickItem *parent = nullptr); + ~QQuickGroupBox(); QString title() const; void setTitle(const QString &title); @@ -70,9 +74,16 @@ public: QQuickItem *label() const; void setLabel(QQuickItem *label); + // 2.5 (Qt 5.12) + qreal implicitLabelWidth() const; + qreal implicitLabelHeight() const; + Q_SIGNALS: void titleChanged(); void labelChanged(); + // 2.5 (Qt 5.12) + Q_REVISION(5) void implicitLabelWidthChanged(); + Q_REVISION(5) void implicitLabelHeightChanged(); protected: void componentComplete() override; |