diff options
Diffstat (limited to 'src/quicktemplates2/qquickspinbox.cpp')
-rw-r--r-- | src/quicktemplates2/qquickspinbox.cpp | 73 |
1 files changed, 68 insertions, 5 deletions
diff --git a/src/quicktemplates2/qquickspinbox.cpp b/src/quicktemplates2/qquickspinbox.cpp index f1361330..7f4f59fa 100644 --- a/src/quicktemplates2/qquickspinbox.cpp +++ b/src/quicktemplates2/qquickspinbox.cpp @@ -135,6 +135,9 @@ public: void handleRelease(const QPointF &point) override; void handleUngrab() override; + void itemImplicitWidthChanged(QQuickItem *item) override; + void itemImplicitHeightChanged(QQuickItem *item) override; + bool editable = false; bool wrap = false; int from = 0; @@ -403,6 +406,24 @@ void QQuickSpinBoxPrivate::handleUngrab() stopPressRepeat(); } +void QQuickSpinBoxPrivate::itemImplicitWidthChanged(QQuickItem *item) +{ + QQuickControlPrivate::itemImplicitWidthChanged(item); + if (item == up->indicator()) + emit up->implicitIndicatorWidthChanged(); + else if (item == down->indicator()) + emit down->implicitIndicatorWidthChanged(); +} + +void QQuickSpinBoxPrivate::itemImplicitHeightChanged(QQuickItem *item) +{ + QQuickControlPrivate::itemImplicitHeightChanged(item); + if (item == up->indicator()) + emit up->implicitIndicatorHeightChanged(); + else if (item == down->indicator()) + emit down->implicitIndicatorHeightChanged(); +} + QQuickSpinBox::QQuickSpinBox(QQuickItem *parent) : QQuickControl(*(new QQuickSpinBoxPrivate), parent) { @@ -418,6 +439,13 @@ QQuickSpinBox::QQuickSpinBox(QQuickItem *parent) #endif } +QQuickSpinBox::~QQuickSpinBox() +{ + Q_D(QQuickSpinBox); + d->removeImplicitSizeListener(d->up->indicator()); + d->removeImplicitSizeListener(d->down->indicator()); +} + /*! \qmlproperty int QtQuick.Controls::SpinBox::from @@ -688,9 +716,13 @@ void QQuickSpinBox::setValueFromText(const QJSValue &callback) \qmlproperty bool QtQuick.Controls::SpinBox::up.pressed \qmlproperty Item QtQuick.Controls::SpinBox::up.indicator \qmlproperty bool QtQuick.Controls::SpinBox::up.hovered + \qmlproperty real QtQuick.Controls::SpinBox::up.implicitIndicatorWidth + \qmlproperty real QtQuick.Controls::SpinBox::up.implicitIndicatorHeight These properties hold the up indicator item and whether it is pressed or - hovered. The \c up.hovered property was introduced in QtQuick.Controls 2.1. + hovered. The \c up.hovered property was introduced in QtQuick.Controls 2.1, + and the \c up.implicitIndicatorWidth and \c up.implicitIndicatorHeight + properties were introduced in QtQuick.Controls 2.5. \sa increase() */ @@ -705,9 +737,13 @@ QQuickSpinButton *QQuickSpinBox::up() const \qmlproperty bool QtQuick.Controls::SpinBox::down.pressed \qmlproperty Item QtQuick.Controls::SpinBox::down.indicator \qmlproperty bool QtQuick.Controls::SpinBox::down.hovered + \qmlproperty real QtQuick.Controls::SpinBox::down.implicitIndicatorWidth + \qmlproperty real QtQuick.Controls::SpinBox::down.implicitIndicatorHeight These properties hold the down indicator item and whether it is pressed or - hovered. The \c down.hovered property was introduced in QtQuick.Controls 2.1. + hovered. The \c down.hovered property was introduced in QtQuick.Controls 2.1, + and the \c down.implicitIndicatorWidth and \c down.implicitIndicatorHeight + properties were introduced in QtQuick.Controls 2.5. \sa decrease() */ @@ -1000,12 +1036,12 @@ void QQuickSpinBox::localeChange(const QLocale &newLocale, const QLocale &oldLoc QFont QQuickSpinBox::defaultFont() const { - return QQuickControlPrivate::themeFont(QPlatformTheme::EditorFont); + return QQuickTheme::font(QQuickTheme::SpinBox); } QPalette QQuickSpinBox::defaultPalette() const { - return QQuickControlPrivate::themePalette(QPlatformTheme::TextLineEditPalette); + return QQuickTheme::palette(QQuickTheme::SpinBox); } #if QT_CONFIG(accessibility) @@ -1082,13 +1118,24 @@ void QQuickSpinButton::setIndicator(QQuickItem *indicator) if (!d->indicator.isExecuting()) d->cancelIndicator(); + const qreal oldImplicitIndicatorWidth = implicitIndicatorWidth(); + const qreal oldImplicitIndicatorHeight = implicitIndicatorHeight(); + + QQuickSpinBox *spinBox = static_cast<QQuickSpinBox *>(parent()); + QQuickSpinBoxPrivate::get(spinBox)->removeImplicitSizeListener(d->indicator); delete d->indicator; d->indicator = indicator; if (indicator) { if (!indicator->parentItem()) - indicator->setParentItem(static_cast<QQuickItem *>(parent())); + indicator->setParentItem(spinBox); + QQuickSpinBoxPrivate::get(spinBox)->addImplicitSizeListener(indicator); } + + if (!qFuzzyCompare(oldImplicitIndicatorWidth, implicitIndicatorWidth())) + emit implicitIndicatorWidthChanged(); + if (!qFuzzyCompare(oldImplicitIndicatorHeight, implicitIndicatorHeight())) + emit implicitIndicatorHeightChanged(); if (!d->indicator.isExecuting()) emit indicatorChanged(); } @@ -1109,4 +1156,20 @@ void QQuickSpinButton::setHovered(bool hovered) emit hoveredChanged(); } +qreal QQuickSpinButton::implicitIndicatorWidth() const +{ + Q_D(const QQuickSpinButton); + if (!d->indicator) + return 0; + return d->indicator->implicitWidth(); +} + +qreal QQuickSpinButton::implicitIndicatorHeight() const +{ + Q_D(const QQuickSpinButton); + if (!d->indicator) + return 0; + return d->indicator->implicitHeight(); +} + QT_END_NAMESPACE |