7#include <QtCore/private/qobject_p.h>
8#include <QtCore/qmetaobject.h>
9#include <QtCore/qvariant.h>
10#include <QtQml/qqmlinfo.h>
15#include <QtCore/qpointer.h>
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
113 Q_DECLARE_PUBLIC(QQuickActionGroup)
121 static void actions_append(QQmlListProperty<QQuickAction> *prop, QQuickAction *obj);
123 static QQuickAction *
actions_at(QQmlListProperty<QQuickAction> *prop, qsizetype index);
134 for (QQuickAction *action : std::as_const(actions)) {
135 QQuickActionPrivate::get(action)->group =
nullptr;
136 QObjectPrivate::disconnect(action, &QQuickAction::triggered,
this, &QQuickActionGroupPrivate::actionTriggered);
137 QObjectPrivate::disconnect(action, &QQuickAction::checkedChanged,
this, &QQuickActionGroupPrivate::_q_updateCurrent);
144 Q_Q(QQuickActionGroup);
145 QQuickAction *action = qobject_cast<QQuickAction*>(q->sender());
147 emit q->triggered(action);
152 Q_Q(QQuickActionGroup);
155 QQuickAction *action = qobject_cast<QQuickAction*>(q->sender());
156 if (action && action->isChecked())
157 q->setCheckedAction(action);
158 else if (!actions.contains(checkedAction))
159 q->setCheckedAction(
nullptr);
164 return action->isEnabled() != enabled && (!enabled || !QQuickActionPrivate::get(action)->explicitEnabled);
169 QQuickActionGroup *q =
static_cast<QQuickActionGroup *>(prop->object);
176 return p->actions.size();
182 return p->actions.value(index);
188 if (!p->actions.isEmpty()) {
190 QQuickActionGroup *q =
static_cast<QQuickActionGroup *>(prop->object);
192 QMetaObject::invokeMethod(q,
"_q_updateCurrent", Qt::QueuedConnection);
193 emit q->actionsChanged();
197QQuickActionGroup::QQuickActionGroup(QObject *parent)
198 : QObject(*(
new QQuickActionGroupPrivate), parent)
202QQuickActionGroup::~QQuickActionGroup()
204 Q_D(QQuickActionGroup);
208QQuickActionGroupAttached *QQuickActionGroup::qmlAttachedProperties(QObject *object)
210 return new QQuickActionGroupAttached(object);
214
215
216
217
218
219
220
221
222
223QQuickAction *QQuickActionGroup::checkedAction()
const
225 Q_D(
const QQuickActionGroup);
226 return d->checkedAction;
229void QQuickActionGroup::setCheckedAction(QQuickAction *checkedAction)
231 Q_D(QQuickActionGroup);
232 if (d->checkedAction == checkedAction)
235 if (d->checkedAction)
236 d->checkedAction->setChecked(
false);
237 d->checkedAction = checkedAction;
239 checkedAction->setChecked(
true);
240 emit checkedActionChanged();
244
245
246
247
248
249
250
251QQmlListProperty<QQuickAction> QQuickActionGroup::actions()
253 Q_D(QQuickActionGroup);
254 return QQmlListProperty<QQuickAction>(
this, d,
255 QQuickActionGroupPrivate::actions_append,
256 QQuickActionGroupPrivate::actions_count,
257 QQuickActionGroupPrivate::actions_at,
258 QQuickActionGroupPrivate::actions_clear);
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277bool QQuickActionGroup::isExclusive()
const
279 Q_D(
const QQuickActionGroup);
283void QQuickActionGroup::setExclusive(
bool exclusive)
285 Q_D(QQuickActionGroup);
286 if (d->exclusive == exclusive)
289 d->exclusive = exclusive;
290 emit exclusiveChanged();
294
295
296
297
298
299
300
301bool QQuickActionGroup::isEnabled()
const
303 Q_D(
const QQuickActionGroup);
307void QQuickActionGroup::setEnabled(
bool enabled)
309 Q_D(QQuickActionGroup);
310 if (d->enabled == enabled)
313 for (QQuickAction *action : std::as_const(d->actions)) {
314 if (d->changeEnabled(action, enabled))
315 emit action->enabledChanged(enabled);
318 d->enabled = enabled;
319 emit enabledChanged();
323
324
325
326
327
328
329
330
331
332
333void QQuickActionGroup::addAction(QQuickAction *action)
335 Q_D(QQuickActionGroup);
336 if (!action || d->actions.contains(action))
339 const bool enabledChange = d->changeEnabled(action, d->enabled);
341 QQuickActionPrivate::get(action)->group =
this;
342 QObjectPrivate::connect(action, &QQuickAction::triggered, d, &QQuickActionGroupPrivate::actionTriggered);
343 QObjectPrivate::connect(action, &QQuickAction::checkedChanged, d, &QQuickActionGroupPrivate::_q_updateCurrent);
345 if (d->exclusive && action->isChecked())
346 setCheckedAction(action);
348 emit action->enabledChanged(action->isEnabled());
350 d->actions.append(action);
351 emit actionsChanged();
355
356
357
358
359
360
361
362
363
364
365void QQuickActionGroup::removeAction(QQuickAction *action)
367 Q_D(QQuickActionGroup);
368 if (!action || !d->actions.contains(action))
371 const bool enabledChange = d->changeEnabled(action, d->enabled);
373 QQuickActionPrivate::get(action)->group =
nullptr;
374 QObjectPrivate::disconnect(action, &QQuickAction::triggered, d, &QQuickActionGroupPrivate::actionTriggered);
375 QObjectPrivate::disconnect(action, &QQuickAction::checkedChanged, d, &QQuickActionGroupPrivate::_q_updateCurrent);
377 if (d->checkedAction == action)
378 setCheckedAction(
nullptr);
380 emit action->enabledChanged(action->isEnabled());
382 d->actions.removeOne(action);
383 emit actionsChanged();
392QQuickActionGroupAttached::QQuickActionGroupAttached(QObject *parent)
393 : QObject(*(
new QQuickActionGroupAttachedPrivate), parent)
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419QQuickActionGroup *QQuickActionGroupAttached::group()
const
421 Q_D(
const QQuickActionGroupAttached);
425void QQuickActionGroupAttached::setGroup(QQuickActionGroup *group)
427 Q_D(QQuickActionGroupAttached);
428 if (d->group == group)
432 d->group->removeAction(qobject_cast<QQuickAction*>(parent()));
435 group->addAction(qobject_cast<QQuickAction*>(parent()));
441#include "moc_qquickactiongroup_p.cpp"
QQuickActionGroup * group
static void actions_append(QQmlListProperty< QQuickAction > *prop, QQuickAction *obj)
static QQuickAction * actions_at(QQmlListProperty< QQuickAction > *prop, qsizetype index)
static qsizetype actions_count(QQmlListProperty< QQuickAction > *prop)
static void actions_clear(QQmlListProperty< QQuickAction > *prop)
QList< QQuickAction * > actions
QPointer< QQuickAction > checkedAction
static bool changeEnabled(QQuickAction *action, bool enabled)