6#include <QtCore/private/qobject_p.h>
7#include <QtCore/qmetaobject.h>
8#include <QtCore/qvariant.h>
9#include <QtQml/qqmlinfo.h>
14#include <QtCore/qpointer.h>
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
112 Q_DECLARE_PUBLIC(QQuickActionGroup)
120 static void actions_append(QQmlListProperty<QQuickAction> *prop, QQuickAction *obj);
122 static QQuickAction *
actions_at(QQmlListProperty<QQuickAction> *prop, qsizetype index);
133 for (QQuickAction *action : std::as_const(actions)) {
134 QQuickActionPrivate::get(action)->group =
nullptr;
135 QObjectPrivate::disconnect(action, &QQuickAction::triggered,
this, &QQuickActionGroupPrivate::actionTriggered);
136 QObjectPrivate::disconnect(action, &QQuickAction::checkedChanged,
this, &QQuickActionGroupPrivate::_q_updateCurrent);
143 Q_Q(QQuickActionGroup);
144 QQuickAction *action = qobject_cast<QQuickAction*>(q->sender());
146 emit q->triggered(action);
151 Q_Q(QQuickActionGroup);
154 QQuickAction *action = qobject_cast<QQuickAction*>(q->sender());
155 if (action && action->isChecked())
156 q->setCheckedAction(action);
157 else if (!actions.contains(checkedAction))
158 q->setCheckedAction(
nullptr);
163 return action->isEnabled() != enabled && (!enabled || !QQuickActionPrivate::get(action)->explicitEnabled);
168 QQuickActionGroup *q =
static_cast<QQuickActionGroup *>(prop->object);
175 return p->actions.size();
181 return p->actions.value(index);
187 if (!p->actions.isEmpty()) {
189 QQuickActionGroup *q =
static_cast<QQuickActionGroup *>(prop->object);
191 QMetaObject::invokeMethod(q,
"_q_updateCurrent", Qt::QueuedConnection);
192 emit q->actionsChanged();
196QQuickActionGroup::QQuickActionGroup(QObject *parent)
197 : QObject(*(
new QQuickActionGroupPrivate), parent)
201QQuickActionGroup::~QQuickActionGroup()
203 Q_D(QQuickActionGroup);
207QQuickActionGroupAttached *QQuickActionGroup::qmlAttachedProperties(QObject *object)
209 return new QQuickActionGroupAttached(object);
213
214
215
216
217
218
219
220
221
222QQuickAction *QQuickActionGroup::checkedAction()
const
224 Q_D(
const QQuickActionGroup);
225 return d->checkedAction;
228void QQuickActionGroup::setCheckedAction(QQuickAction *checkedAction)
230 Q_D(QQuickActionGroup);
231 if (d->checkedAction == checkedAction)
234 if (d->checkedAction)
235 d->checkedAction->setChecked(
false);
236 d->checkedAction = checkedAction;
238 checkedAction->setChecked(
true);
239 emit checkedActionChanged();
243
244
245
246
247
248
249
250QQmlListProperty<QQuickAction> QQuickActionGroup::actions()
252 Q_D(QQuickActionGroup);
253 return QQmlListProperty<QQuickAction>(
this, d,
254 QQuickActionGroupPrivate::actions_append,
255 QQuickActionGroupPrivate::actions_count,
256 QQuickActionGroupPrivate::actions_at,
257 QQuickActionGroupPrivate::actions_clear);
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276bool QQuickActionGroup::isExclusive()
const
278 Q_D(
const QQuickActionGroup);
282void QQuickActionGroup::setExclusive(
bool exclusive)
284 Q_D(QQuickActionGroup);
285 if (d->exclusive == exclusive)
288 d->exclusive = exclusive;
289 emit exclusiveChanged();
293
294
295
296
297
298
299
300bool QQuickActionGroup::isEnabled()
const
302 Q_D(
const QQuickActionGroup);
306void QQuickActionGroup::setEnabled(
bool enabled)
308 Q_D(QQuickActionGroup);
309 if (d->enabled == enabled)
312 for (QQuickAction *action : std::as_const(d->actions)) {
313 if (d->changeEnabled(action, enabled))
314 emit action->enabledChanged(enabled);
317 d->enabled = enabled;
318 emit enabledChanged();
322
323
324
325
326
327
328
329
330
331
332void QQuickActionGroup::addAction(QQuickAction *action)
334 Q_D(QQuickActionGroup);
335 if (!action || d->actions.contains(action))
338 const bool enabledChange = d->changeEnabled(action, d->enabled);
340 QQuickActionPrivate::get(action)->group =
this;
341 QObjectPrivate::connect(action, &QQuickAction::triggered, d, &QQuickActionGroupPrivate::actionTriggered);
342 QObjectPrivate::connect(action, &QQuickAction::checkedChanged, d, &QQuickActionGroupPrivate::_q_updateCurrent);
344 if (d->exclusive && action->isChecked())
345 setCheckedAction(action);
347 emit action->enabledChanged(action->isEnabled());
349 d->actions.append(action);
350 emit actionsChanged();
354
355
356
357
358
359
360
361
362
363
364void QQuickActionGroup::removeAction(QQuickAction *action)
366 Q_D(QQuickActionGroup);
367 if (!action || !d->actions.contains(action))
370 const bool enabledChange = d->changeEnabled(action, d->enabled);
372 QQuickActionPrivate::get(action)->group =
nullptr;
373 QObjectPrivate::disconnect(action, &QQuickAction::triggered, d, &QQuickActionGroupPrivate::actionTriggered);
374 QObjectPrivate::disconnect(action, &QQuickAction::checkedChanged, d, &QQuickActionGroupPrivate::_q_updateCurrent);
376 if (d->checkedAction == action)
377 setCheckedAction(
nullptr);
379 emit action->enabledChanged(action->isEnabled());
381 d->actions.removeOne(action);
382 emit actionsChanged();
391QQuickActionGroupAttached::QQuickActionGroupAttached(QObject *parent)
392 : QObject(*(
new QQuickActionGroupAttachedPrivate), parent)
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418QQuickActionGroup *QQuickActionGroupAttached::group()
const
420 Q_D(
const QQuickActionGroupAttached);
424void QQuickActionGroupAttached::setGroup(QQuickActionGroup *group)
426 Q_D(QQuickActionGroupAttached);
427 if (d->group == group)
431 d->group->removeAction(qobject_cast<QQuickAction*>(parent()));
434 group->addAction(qobject_cast<QQuickAction*>(parent()));
440#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)
Combined button and popup list for selecting options.