blob: 1d95a9e6317d53c1bbeed6a5d82f2f6b77028fc3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
// 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;
static inline QString indicatorName() { return QStringLiteral("indicator"); }
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)
{
}
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"
|