Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qquickactiongroup.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
5
6#include <QtCore/private/qobject_p.h>
7#include <QtCore/qmetaobject.h>
8#include <QtCore/qvariant.h>
9#include <QtQml/qqmlinfo.h>
10
11#include "qquickaction_p.h"
12#include "qquickaction_p_p.h"
13
15
20
108{
109public:
110 Q_DECLARE_PUBLIC(QQuickActionGroup)
111
112 void clear();
113 void actionTriggered();
114 void _q_updateCurrent();
115
116 static bool changeEnabled(QQuickAction *action, bool enabled);
117
122
123 bool enabled = true;
124 bool exclusive = true;
127};
128
130{
131 for (QQuickAction *action : std::as_const(actions)) {
132 QQuickActionPrivate::get(action)->group = nullptr;
135 }
136 actions.clear();
137}
138
140{
142 QQuickAction *action = qobject_cast<QQuickAction*>(q->sender());
143 if (action)
144 emit q->triggered(action);
145}
146
148{
150 if (!exclusive)
151 return;
152 QQuickAction *action = qobject_cast<QQuickAction*>(q->sender());
153 if (action && action->isChecked())
154 q->setCheckedAction(action);
155 else if (!actions.contains(checkedAction))
156 q->setCheckedAction(nullptr);
157}
158
160{
161 return action->isEnabled() != enabled && (!enabled || !QQuickActionPrivate::get(action)->explicitEnabled);
162}
163
165{
166 QQuickActionGroup *q = static_cast<QQuickActionGroup *>(prop->object);
167 q->addAction(obj);
168}
169
171{
173 return p->actions.size();
174}
175
177{
179 return p->actions.value(index);
180}
181
183{
185 if (!p->actions.isEmpty()) {
186 p->clear();
187 QQuickActionGroup *q = static_cast<QQuickActionGroup *>(prop->object);
188 // QTBUG-52358: don't clear the checked action immediately
190 emit q->actionsChanged();
191 }
192}
193
196{
197}
198
200{
202 d->clear();
203}
204
206{
207 return new QQuickActionGroupAttached(object);
208}
209
221{
222 Q_D(const QQuickActionGroup);
223 return d->checkedAction;
224}
225
227{
229 if (d->checkedAction == checkedAction)
230 return;
231
232 if (d->checkedAction)
233 d->checkedAction->setChecked(false);
234 d->checkedAction = checkedAction;
235 if (checkedAction)
238}
239
249{
256}
257
275{
276 Q_D(const QQuickActionGroup);
277 return d->exclusive;
278}
279
281{
283 if (d->exclusive == exclusive)
284 return;
285
286 d->exclusive = exclusive;
288}
289
299{
300 Q_D(const QQuickActionGroup);
301 return d->enabled;
302}
303
305{
307 if (d->enabled == enabled)
308 return;
309
310 for (QQuickAction *action : std::as_const(d->actions)) {
311 if (d->changeEnabled(action, enabled))
312 emit action->enabledChanged(enabled);
313 }
314
315 d->enabled = enabled;
317}
318
331{
333 if (!action || d->actions.contains(action))
334 return;
335
336 const bool enabledChange = d->changeEnabled(action, d->enabled);
337
338 QQuickActionPrivate::get(action)->group = this;
341
342 if (d->exclusive && action->isChecked())
343 setCheckedAction(action);
344 if (enabledChange)
345 emit action->enabledChanged(action->isEnabled());
346
347 d->actions.append(action);
349}
350
363{
365 if (!action || !d->actions.contains(action))
366 return;
367
368 const bool enabledChange = d->changeEnabled(action, d->enabled);
369
370 QQuickActionPrivate::get(action)->group = nullptr;
373
374 if (d->checkedAction == action)
375 setCheckedAction(nullptr);
376 if (enabledChange)
377 emit action->enabledChanged(action->isEnabled());
378
379 d->actions.removeOne(action);
381}
382
384{
385public:
387};
388
391{
392}
393
417{
418 Q_D(const QQuickActionGroupAttached);
419 return d->group;
420}
421
423{
425 if (d->group == group)
426 return;
427
428 if (d->group)
429 d->group->removeAction(qobject_cast<QQuickAction*>(parent()));
430 d->group = group;
431 if (group)
432 group->addAction(qobject_cast<QQuickAction*>(parent()));
434}
435
437
438#include "moc_qquickactiongroup_p.cpp"
Definition qlist.h:74
qsizetype size() const noexcept
Definition qlist.h:386
T value(qsizetype i) const
Definition qlist.h:661
void clear()
Definition qlist.h:417
static QMetaObject::Connection connect(const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer< Func2 >::Object *receiverPrivate, Func2 slot, Qt::ConnectionType type=Qt::AutoConnection)
Definition qobject_p.h:298
static bool disconnect(const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer< Func2 >::Object *receiverPrivate, Func2 slot)
Definition qobject_p.h:327
\inmodule QtCore
Definition qobject.h:90
QObject * parent() const
Returns a pointer to the parent object.
Definition qobject.h:311
\inmodule QtCore
Definition qpointer.h:18
The QQmlListProperty class allows applications to expose list-like properties of QObject-derived clas...
Definition qqmllist.h:24
QObject * object
Definition qqmllist.h:81
QQuickActionGroupAttached(QObject *parent=nullptr)
void setGroup(QQuickActionGroup *group)
Groups actions together.
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)
QPointer< QQuickAction > checkedAction
static void actions_clear(QQmlListProperty< QQuickAction > *prop)
QList< QQuickAction * > actions
static bool changeEnabled(QQuickAction *action, bool enabled)
bool isExclusive() const
\qmlproperty bool QtQuick.Controls::ActionGroup::exclusive
void setExclusive(bool exclusive)
bool isEnabled() const
\qmlproperty bool QtQuick.Controls::ActionGroup::enabled
void setCheckedAction(QQuickAction *checkedAction)
void checkedActionChanged()
void setEnabled(bool enabled)
void addAction(QQuickAction *action)
\qmlmethod void QtQuick.Controls::ActionGroup::addAction(Action action)
QQuickActionGroup(QObject *parent=nullptr)
QQmlListProperty< QQuickAction > actions
\qmlproperty list<Action> QtQuick.Controls::ActionGroup::actions \qmldefault
void removeAction(QQuickAction *action)
\qmlmethod void QtQuick.Controls::ActionGroup::removeAction(Action action)
static QQuickActionGroupAttached * qmlAttachedProperties(QObject *object)
QQuickAction * checkedAction
static QQuickActionPrivate * get(QQuickAction *action)
QQuickActionGroup * group
void triggered(QObject *source=nullptr)
void checkedChanged(bool checked)
void enabledChanged(bool enabled)
void setChecked(bool checked)
bool isEnabled() const
\qmlproperty bool QtQuick.Controls::Action::enabled
bool isChecked() const
\qmlproperty bool QtQuick.Controls::Action::checked
Combined button and popup list for selecting options.
@ QueuedConnection
GLuint index
[2]
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLboolean GLuint group
GLhandleARB obj
[2]
GLdouble GLdouble GLdouble GLdouble q
Definition qopenglext.h:259
GLfloat GLfloat p
[1]
#define emit
ptrdiff_t qsizetype
Definition qtypes.h:70
bool contains(const AT &t) const noexcept
Definition qlist.h:44
static bool invokeMethod(QObject *obj, const char *member, Qt::ConnectionType, QGenericReturnArgument ret, QGenericArgument val0=QGenericArgument(nullptr), QGenericArgument val1=QGenericArgument(), QGenericArgument val2=QGenericArgument(), QGenericArgument val3=QGenericArgument(), QGenericArgument val4=QGenericArgument(), QGenericArgument val5=QGenericArgument(), QGenericArgument val6=QGenericArgument(), QGenericArgument val7=QGenericArgument(), QGenericArgument val8=QGenericArgument(), QGenericArgument val9=QGenericArgument())
\threadsafe This is an overloaded member function, provided for convenience. It differs from the abov...
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent