4#include <QQmlListProperty>
6#include "qml_material/control/action.hpp"
7#include "qml_material/util/selection_set.hpp"
11class ActionGroupAttached;
12class QML_MATERIAL_API ActionGroup :
public QObject {
14 QML_NAMED_ELEMENT(ActionGroup)
15 QML_ATTACHED(ActionGroupAttached)
16 Q_CLASSINFO(
"DefaultProperty",
"actions")
17 Q_PROPERTY(QQmlListProperty<Action> actions READ actions NOTIFY actionsChanged FINAL)
18 Q_PROPERTY(Action* checkedAction READ checkedAction WRITE setCheckedAction NOTIFY
19 checkedActionChanged FINAL)
20 Q_PROPERTY(
bool exclusive READ isExclusive WRITE setExclusive NOTIFY exclusiveChanged FINAL)
21 Q_PROPERTY(
bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged FINAL)
23 explicit ActionGroup(QObject* parent =
nullptr): QObject(parent) {}
24 ~ActionGroup()
override;
25 static ActionGroupAttached* qmlAttachedProperties(QObject*);
26 QQmlListProperty<Action> actions();
27 Action* checkedAction()
const {
return m_selection.selected; }
28 void setCheckedAction(Action*);
29 bool isExclusive()
const {
return m_selection.exclusive; }
30 void setExclusive(
bool);
31 bool isEnabled()
const {
return m_enabled; }
32 void setEnabled(
bool);
33 Q_INVOKABLE
void addAction(Action*);
34 Q_INVOKABLE
void removeAction(Action*);
35 Q_SIGNAL
void actionsChanged();
36 Q_SIGNAL
void checkedActionChanged();
37 Q_SIGNAL
void exclusiveChanged();
38 Q_SIGNAL
void enabledChanged();
39 Q_SIGNAL
void triggered(Action* action);
43 void update(Action* preferred =
nullptr);
45 utils::SelectionSet<Action> m_selection;
46 QHash<Action*, QList<QMetaObject::Connection>> m_connections;
47 Action* m_notified_selected =
nullptr;
48 bool m_enabled =
true;
49 bool m_destroying =
false;
52class QML_MATERIAL_API ActionGroupAttached :
public QObject {
54 Q_PROPERTY(ActionGroup* group READ group WRITE setGroup NOTIFY groupChanged FINAL)
56 explicit ActionGroupAttached(QObject*);
57 ActionGroup* group()
const;
58 void setGroup(ActionGroup*);
59 Q_SIGNAL
void groupChanged();
62 QPointer<Action> m_member;
65QML_DECLARE_TYPEINFO(qml_material::ActionGroup, QML_HAS_ATTACHED_PROPERTIES)