aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickspinbox.cpp
diff options
context:
space:
mode:
authorJan Arve Sæther <jan-arve.saether@qt.io>2020-10-29 17:01:27 +0100
committerJan Arve Sæther <jan-arve.saether@qt.io>2020-12-10 16:21:21 +0100
commit64fd0b53b378ef91725d4950720c3bdfaee11498 (patch)
tree4860bf008c3437a41575e9a05dda8eba96f05848 /src/quicktemplates2/qquickspinbox.cpp
parent8d061f542181cfe0ac9052948c869d87ce80589b (diff)
Add support for ScrollBar arrow buttons
In order to achieve this, it separates out QQuickSpinButton into a separate file (and renames it since it's not only purposed for SpinBox anymore). This allows it to be also used by QQuickScrollBar. Fixes: QTBUG-88115 Pick-to: 6.0 Change-Id: I2dea42b29750b7bc619031f40a43717fc10c177b Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickspinbox.cpp')
-rw-r--r--src/quicktemplates2/qquickspinbox.cpp147
1 files changed, 9 insertions, 138 deletions
diff --git a/src/quicktemplates2/qquickspinbox.cpp b/src/quicktemplates2/qquickspinbox.cpp
index 58c6abaf..d8c8b689 100644
--- a/src/quicktemplates2/qquickspinbox.cpp
+++ b/src/quicktemplates2/qquickspinbox.cpp
@@ -36,6 +36,7 @@
#include "qquickspinbox_p.h"
#include "qquickcontrol_p_p.h"
+#include "qquickindicatorbutton_p.h"
#include "qquickdeferredexecute_p_p.h"
#include <QtGui/qguiapplication.h>
@@ -149,32 +150,14 @@ public:
int delayTimer = 0;
int repeatTimer = 0;
QString displayText;
- QQuickSpinButton *up = nullptr;
- QQuickSpinButton *down = nullptr;
+ QQuickIndicatorButton *up = nullptr;
+ QQuickIndicatorButton *down = nullptr;
QValidator *validator = nullptr;
mutable QJSValue textFromValue;
mutable QJSValue valueFromText;
Qt::InputMethodHints inputMethodHints = Qt::ImhDigitsOnly;
};
-class QQuickSpinButtonPrivate : public QObjectPrivate
-{
- Q_DECLARE_PUBLIC(QQuickSpinButton)
-
-public:
- static QQuickSpinButtonPrivate *get(QQuickSpinButton *button)
- {
- return button->d_func();
- }
-
- void cancelIndicator();
- void executeIndicator(bool complete = false);
-
- bool pressed = false;
- bool hovered = false;
- QQuickDeferredPointer<QQuickItem> indicator;
-};
-
int QQuickSpinBoxPrivate::boundValue(int value, bool wrap) const
{
bool inverted = from > to;
@@ -443,8 +426,8 @@ QQuickSpinBox::QQuickSpinBox(QQuickItem *parent)
: QQuickControl(*(new QQuickSpinBoxPrivate), parent)
{
Q_D(QQuickSpinBox);
- d->up = new QQuickSpinButton(this);
- d->down = new QQuickSpinButton(this);
+ d->up = new QQuickIndicatorButton(this);
+ d->down = new QQuickIndicatorButton(this);
setFlag(ItemIsFocusScope);
setFiltersChildMouseEvents(true);
@@ -741,7 +724,7 @@ void QQuickSpinBox::setValueFromText(const QJSValue &callback)
\sa increase()
*/
-QQuickSpinButton *QQuickSpinBox::up() const
+QQuickIndicatorButton *QQuickSpinBox::up() const
{
Q_D(const QQuickSpinBox);
return d->up;
@@ -761,7 +744,7 @@ QQuickSpinButton *QQuickSpinBox::up() const
\sa decrease()
*/
-QQuickSpinButton *QQuickSpinBox::down() const
+QQuickIndicatorButton *QQuickSpinBox::down() const
{
Q_D(const QQuickSpinBox);
return d->down;
@@ -1002,8 +985,8 @@ void QQuickSpinBox::classBegin()
void QQuickSpinBox::componentComplete()
{
Q_D(QQuickSpinBox);
- QQuickSpinButtonPrivate::get(d->up)->executeIndicator(true);
- QQuickSpinButtonPrivate::get(d->down)->executeIndicator(true);
+ QQuickIndicatorButtonPrivate::get(d->up)->executeIndicator(true);
+ QQuickIndicatorButtonPrivate::get(d->down)->executeIndicator(true);
QQuickControl::componentComplete();
if (!d->setValue(d->value, /* allowWrap = */ false, /* modified = */ false)) {
@@ -1069,118 +1052,6 @@ void QQuickSpinBox::accessibilityActiveChanged(bool active)
}
#endif
-static inline QString indicatorName() { return QStringLiteral("indicator"); }
-
-void QQuickSpinButtonPrivate::cancelIndicator()
-{
- Q_Q(QQuickSpinButton);
- quickCancelDeferred(q, indicatorName());
-}
-
-void QQuickSpinButtonPrivate::executeIndicator(bool complete)
-{
- Q_Q(QQuickSpinButton);
- if (indicator.wasExecuted())
- return;
-
- if (!indicator || complete)
- quickBeginDeferred(q, indicatorName(), indicator);
- if (complete)
- quickCompleteDeferred(q, indicatorName(), indicator);
-}
-
-QQuickSpinButton::QQuickSpinButton(QQuickSpinBox *parent)
- : QObject(*(new QQuickSpinButtonPrivate), parent)
-{
-}
-
-bool QQuickSpinButton::isPressed() const
-{
- Q_D(const QQuickSpinButton);
- return d->pressed;
-}
-
-void QQuickSpinButton::setPressed(bool pressed)
-{
- Q_D(QQuickSpinButton);
- if (d->pressed == pressed)
- return;
-
- d->pressed = pressed;
- emit pressedChanged();
-}
-
-QQuickItem *QQuickSpinButton::indicator() const
-{
- QQuickSpinButtonPrivate *d = const_cast<QQuickSpinButtonPrivate *>(d_func());
- if (!d->indicator)
- d->executeIndicator();
- return d->indicator;
-}
-
-void QQuickSpinButton::setIndicator(QQuickItem *indicator)
-{
- Q_D(QQuickSpinButton);
- if (d->indicator == indicator)
- return;
-
- 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);
- QQuickControlPrivate::hideOldItem(d->indicator);
- d->indicator = indicator;
-
- if (indicator) {
- if (!indicator->parentItem())
- 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();
-}
-
-bool QQuickSpinButton::isHovered() const
-{
- Q_D(const QQuickSpinButton);
- return d->hovered;
-}
-
-void QQuickSpinButton::setHovered(bool hovered)
-{
- Q_D(QQuickSpinButton);
- if (d->hovered == hovered)
- return;
-
- d->hovered = 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
#include "moc_qquickspinbox_p.cpp"