aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates/qquickindicatorbutton_p.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quicktemplates/qquickindicatorbutton_p.cpp')
-rw-r--r--src/quicktemplates/qquickindicatorbutton_p.cpp133
1 files changed, 133 insertions, 0 deletions
diff --git a/src/quicktemplates/qquickindicatorbutton_p.cpp b/src/quicktemplates/qquickindicatorbutton_p.cpp
new file mode 100644
index 0000000000..22c13b9e4e
--- /dev/null
+++ b/src/quicktemplates/qquickindicatorbutton_p.cpp
@@ -0,0 +1,133 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+#include "qquickindicatorbutton_p.h"
+#include "qquickdeferredexecute_p_p.h"
+#include "qquickcontrol_p_p.h"
+
+QT_BEGIN_NAMESPACE
+
+class QQuickIndicatorButton;
+
+void QQuickIndicatorButtonPrivate::cancelIndicator()
+{
+ Q_Q(QQuickIndicatorButton);
+ quickCancelDeferred(q, indicatorName());
+}
+
+void QQuickIndicatorButtonPrivate::executeIndicator(bool complete)
+{
+ Q_Q(QQuickIndicatorButton);
+ if (indicator.wasExecuted())
+ return;
+
+ if (!indicator || complete)
+ quickBeginDeferred(q, indicatorName(), indicator);
+ if (complete)
+ quickCompleteDeferred(q, indicatorName(), indicator);
+}
+
+QQuickIndicatorButton::QQuickIndicatorButton(QObject *parent)
+ : QObject(*(new QQuickIndicatorButtonPrivate), parent)
+{
+}
+
+QQuickIndicatorButton::~QQuickIndicatorButton()
+{
+ Q_D(QQuickIndicatorButton);
+ QQuickControl *parentControl = static_cast<QQuickControl *>(parent());
+ if (parentControl)
+ QQuickControlPrivate::get(parentControl)->removeImplicitSizeListener(d->indicator);
+}
+
+bool QQuickIndicatorButton::isPressed() const
+{
+ Q_D(const QQuickIndicatorButton);
+ return d->pressed;
+}
+
+void QQuickIndicatorButton::setPressed(bool pressed)
+{
+ Q_D(QQuickIndicatorButton);
+ if (d->pressed == pressed)
+ return;
+
+ d->pressed = pressed;
+ emit pressedChanged();
+}
+
+QQuickItem *QQuickIndicatorButton::indicator() const
+{
+ QQuickIndicatorButtonPrivate *d = const_cast<QQuickIndicatorButtonPrivate *>(d_func());
+ if (!d->indicator)
+ d->executeIndicator();
+ return d->indicator;
+}
+
+void QQuickIndicatorButton::setIndicator(QQuickItem *indicator)
+{
+ Q_D(QQuickIndicatorButton);
+ if (d->indicator == indicator)
+ return;
+
+ if (!d->indicator.isExecuting())
+ d->cancelIndicator();
+
+ const qreal oldImplicitIndicatorWidth = implicitIndicatorWidth();
+ const qreal oldImplicitIndicatorHeight = implicitIndicatorHeight();
+
+ QQuickControl *par = static_cast<QQuickControl *>(parent());
+ QQuickControlPrivate::warnIfCustomizationNotSupported(par, indicator, QStringLiteral("indicator"));
+
+ QQuickControlPrivate::get(par)->removeImplicitSizeListener(d->indicator);
+ QQuickControlPrivate::hideOldItem(d->indicator);
+ d->indicator = indicator;
+
+ if (indicator) {
+ if (!indicator->parentItem())
+ indicator->setParentItem(par);
+ QQuickControlPrivate::get(par)->addImplicitSizeListener(indicator);
+ }
+
+ if (!qFuzzyCompare(oldImplicitIndicatorWidth, implicitIndicatorWidth()))
+ emit implicitIndicatorWidthChanged();
+ if (!qFuzzyCompare(oldImplicitIndicatorHeight, implicitIndicatorHeight()))
+ emit implicitIndicatorHeightChanged();
+ if (!d->indicator.isExecuting())
+ emit indicatorChanged();
+}
+
+bool QQuickIndicatorButton::isHovered() const
+{
+ Q_D(const QQuickIndicatorButton);
+ return d->hovered;
+}
+
+void QQuickIndicatorButton::setHovered(bool hovered)
+{
+ Q_D(QQuickIndicatorButton);
+ if (d->hovered == hovered)
+ return;
+
+ d->hovered = hovered;
+ emit hoveredChanged();
+}
+
+qreal QQuickIndicatorButton::implicitIndicatorWidth() const
+{
+ Q_D(const QQuickIndicatorButton);
+ if (!d->indicator)
+ return 0;
+ return d->indicator->implicitWidth();
+}
+
+qreal QQuickIndicatorButton::implicitIndicatorHeight() const
+{
+ Q_D(const QQuickIndicatorButton);
+ if (!d->indicator)
+ return 0;
+ return d->indicator->implicitHeight();
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickindicatorbutton_p.cpp"