Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquickindicatorbutton_p.cpp
Go to the documentation of this file.
1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
7
9
10class QQuickIndicatorButton;
11
12void QQuickIndicatorButtonPrivate::cancelIndicator()
13{
14 Q_Q(QQuickIndicatorButton);
15 quickCancelDeferred(q, indicatorName());
16}
17
19{
20 Q_Q(QQuickIndicatorButton);
21 if (indicator.wasExecuted())
22 return;
23
24 if (!indicator || complete)
25 quickBeginDeferred(q, indicatorName(), indicator);
26 if (complete)
27 quickCompleteDeferred(q, indicatorName(), indicator);
28}
29
30QQuickIndicatorButton::QQuickIndicatorButton(QObject *parent)
31 : QObject(*(new QQuickIndicatorButtonPrivate), parent)
32{
33}
34
35QQuickIndicatorButton::~QQuickIndicatorButton()
36{
37 Q_D(QQuickIndicatorButton);
38 QQuickControl *parentControl = static_cast<QQuickControl *>(parent());
39 if (parentControl)
40 QQuickControlPrivate::get(parentControl)->removeImplicitSizeListener(d->indicator);
41}
42
43bool QQuickIndicatorButton::isPressed() const
44{
45 Q_D(const QQuickIndicatorButton);
46 return d->pressed;
47}
48
49void QQuickIndicatorButton::setPressed(bool pressed)
50{
51 Q_D(QQuickIndicatorButton);
52 if (d->pressed == pressed)
53 return;
54
55 d->pressed = pressed;
56 emit pressedChanged();
57}
58
59QQuickItem *QQuickIndicatorButton::indicator() const
60{
61 QQuickIndicatorButtonPrivate *d = const_cast<QQuickIndicatorButtonPrivate *>(d_func());
62 if (!d->indicator)
63 d->executeIndicator();
64 return d->indicator;
65}
66
67void QQuickIndicatorButton::setIndicator(QQuickItem *indicator)
68{
69 Q_D(QQuickIndicatorButton);
70 if (d->indicator == indicator)
71 return;
72
73 if (!d->indicator.isExecuting())
74 d->cancelIndicator();
75
76 const qreal oldImplicitIndicatorWidth = implicitIndicatorWidth();
77 const qreal oldImplicitIndicatorHeight = implicitIndicatorHeight();
78
79 QQuickControl *par = static_cast<QQuickControl *>(parent());
80 QQuickControlPrivate::warnIfCustomizationNotSupported(par, indicator, QStringLiteral("indicator"));
81
82 QQuickControlPrivate::get(par)->removeImplicitSizeListener(d->indicator);
83 QQuickControlPrivate::hideOldItem(d->indicator);
84 d->indicator = indicator;
85
86 if (indicator) {
87 if (!indicator->parentItem())
88 indicator->setParentItem(par);
89 QQuickControlPrivate::get(par)->addImplicitSizeListener(indicator);
90 }
91
92 if (!qFuzzyCompare(oldImplicitIndicatorWidth, implicitIndicatorWidth()))
93 emit implicitIndicatorWidthChanged();
94 if (!qFuzzyCompare(oldImplicitIndicatorHeight, implicitIndicatorHeight()))
95 emit implicitIndicatorHeightChanged();
96 if (!d->indicator.isExecuting())
97 emit indicatorChanged();
98}
99
100bool QQuickIndicatorButton::isHovered() const
101{
102 Q_D(const QQuickIndicatorButton);
103 return d->hovered;
104}
105
106void QQuickIndicatorButton::setHovered(bool hovered)
107{
108 Q_D(QQuickIndicatorButton);
109 if (d->hovered == hovered)
110 return;
111
112 d->hovered = hovered;
113 emit hoveredChanged();
114}
115
116qreal QQuickIndicatorButton::implicitIndicatorWidth() const
117{
118 Q_D(const QQuickIndicatorButton);
119 if (!d->indicator)
120 return 0;
121 return d->indicator->implicitWidth();
122}
123
124qreal QQuickIndicatorButton::implicitIndicatorHeight() const
125{
126 Q_D(const QQuickIndicatorButton);
127 if (!d->indicator)
128 return 0;
129 return d->indicator->implicitHeight();
130}
131
132QT_END_NAMESPACE
133
134#include "moc_qquickindicatorbutton_p.cpp"
void executeIndicator(bool complete=false)