5#include <QQmlComponent>
6#include <QQmlListProperty>
7#include "qml_material/control/icon_spec.hpp"
12class QML_MATERIAL_API Action :
public QObject {
14 QML_NAMED_ELEMENT(Action)
15 Q_CLASSINFO(
"DefaultProperty",
"data")
16 Q_PROPERTY(QQmlListProperty<QObject> data READ data NOTIFY dataChanged FINAL)
17 Q_PROPERTY(
bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged BINDABLE
18 bindableVisible FINAL)
19 Q_PROPERTY(
int displayHint READ displayHint WRITE setDisplayHint NOTIFY displayHintChanged
20 BINDABLE bindableDisplayHint FINAL)
21 Q_PROPERTY(
int busy READ busy WRITE setBusy NOTIFY busyChanged BINDABLE bindableBusy FINAL)
22 Q_PROPERTY(qreal progress READ progress WRITE setProgress NOTIFY progressChanged BINDABLE
23 bindableProgress FINAL)
24 Q_PROPERTY(
bool closeMenu READ closeMenu WRITE setCloseMenu NOTIFY closeMenuChanged BINDABLE
25 bindableCloseMenu FINAL)
26 Q_PROPERTY(
bool separator READ isSeparator WRITE setSeparator NOTIFY separatorChanged BINDABLE
27 bindableSeparator FINAL)
28 Q_PROPERTY(QString tooltip READ tooltip WRITE setTooltip NOTIFY tooltipChanged BINDABLE
29 bindableTooltip FINAL)
30 Q_PROPERTY(QQmlComponent* displayComponent READ displayComponent WRITE setDisplayComponent
31 NOTIFY displayComponentChanged FINAL)
32 Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged BINDABLE bindableText FINAL)
33 Q_PROPERTY(ActionIcon* icon READ icon CONSTANT FINAL)
35 bool enabled READ isEnabled WRITE setEnabled RESET resetEnabled NOTIFY enabledChanged FINAL)
36 Q_PROPERTY(
bool checkable READ isCheckable WRITE setCheckable NOTIFY checkableChanged FINAL)
37 Q_PROPERTY(
bool checked READ isChecked WRITE setChecked NOTIFY checkedChanged FINAL)
39 explicit Action(QObject* parent =
nullptr);
40 QBindable<
bool> bindableVisible() {
return QBindable<bool>(&m_visible); }
41 QBindable<int> bindableDisplayHint() {
return QBindable<int>(&m_displayHint); }
42 QBindable<int> bindableBusy() {
return QBindable<int>(&m_busy); }
43 QBindable<qreal> bindableProgress() {
return QBindable<qreal>(&m_progress); }
44 QBindable<bool> bindableCloseMenu() {
return QBindable<bool>(&m_closeMenu); }
45 QBindable<bool> bindableSeparator() {
return QBindable<bool>(&m_separator); }
46 QBindable<QString> bindableTooltip() {
return QBindable<QString>(&m_tooltip); }
47 QBindable<QString> bindableText() {
return QBindable<QString>(&m_text); }
48 QBindable<bool> bindableCheckable() {
return QBindable<bool>(&m_checkable); }
49 QBindable<bool> bindableChecked() {
return QBindable<bool>(&m_checked); }
51 QQmlListProperty<QObject> data();
52 bool isVisible()
const {
return m_visible; }
53 void setVisible(
bool);
54 Q_SIGNAL
void visibleChanged();
55 int displayHint()
const {
return m_displayHint; }
56 void setDisplayHint(
int);
57 Q_SIGNAL
void displayHintChanged();
58 int busy()
const {
return m_busy; }
60 Q_SIGNAL
void busyChanged();
61 qreal progress()
const {
return m_progress; }
62 void setProgress(qreal);
63 Q_SIGNAL
void progressChanged();
64 bool closeMenu()
const {
return m_closeMenu; }
65 void setCloseMenu(
bool);
66 Q_SIGNAL
void closeMenuChanged();
67 bool isSeparator()
const {
return m_separator; }
68 void setSeparator(
bool);
69 Q_SIGNAL
void separatorChanged();
70 QString tooltip()
const {
return m_tooltip; }
71 void setTooltip(
const QString&);
72 Q_SIGNAL
void tooltipChanged();
73 QQmlComponent* displayComponent()
const {
return m_displayComponent; }
74 void setDisplayComponent(QQmlComponent*);
75 Q_SIGNAL
void displayComponentChanged();
76 Q_SIGNAL
void dataChanged();
77 QString text()
const {
return m_text; }
78 void setText(
const QString&);
79 ActionIcon* icon()
const {
return m_icon; }
80 bool isEnabled()
const;
81 void setEnabled(
bool);
82 void resetEnabled() { setEnabled(
true); }
83 bool isCheckable()
const {
return m_checkable; }
84 void setCheckable(
bool);
85 bool isChecked()
const {
return m_checked; }
86 void setChecked(
bool);
87 ActionGroup* group()
const;
88 void setGroup(ActionGroup*);
89 bool canToggle()
const;
90 bool canTrigger()
const {
return isEnabled() && ! m_triggering; }
91 Q_INVOKABLE
void toggle(QObject* source =
nullptr);
92 Q_INVOKABLE
void trigger(QObject* source =
nullptr);
94 void triggerFromControl(QObject* source,
bool toggled);
95 Q_SIGNAL
void textChanged();
96 Q_SIGNAL
void enabledChanged();
97 Q_SIGNAL
void checkableChanged();
98 Q_SIGNAL
void checkedChanged();
99 Q_SIGNAL
void groupChanged();
100 Q_SIGNAL
void toggled(QObject* source);
101 Q_SIGNAL
void triggered(QObject* source);
104 friend class ActionGroup;
105 friend class AbstractButton;
106 void updateChecked(
bool);
107 void updateCheckable(
bool);
108 void checkedChange();
109 void appendData(QObject*);
110 QList<QObject*> m_data;
111 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(Action,
bool, m_visible,
true, &Action::visibleChanged)
112 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(Action,
int, m_displayHint, 0, &Action::displayHintChanged)
113 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(Action,
int, m_busy, 0, &Action::busyChanged)
114 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(Action, qreal, m_progress, 0, &Action::progressChanged)
115 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(Action,
bool, m_closeMenu,
true, &Action::closeMenuChanged)
116 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(Action,
bool, m_separator,
false,
117 &Action::separatorChanged)
118 Q_OBJECT_BINDABLE_PROPERTY(Action, QString, m_tooltip, &Action::tooltipChanged)
119 QPointer<QQmlComponent> m_displayComponent;
120 QMetaObject::Connection m_displayComponentConnection;
121 Q_OBJECT_BINDABLE_PROPERTY(Action, QString, m_text, &Action::textChanged)
123 QPointer<ActionGroup> m_group;
124 bool m_enabled =
true;
125 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(Action,
bool, m_checkable,
false)
126 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(Action,
bool, m_checked, false)
127 QPropertyNotifier m_checkedNotifier, m_checkableNotifier;
128 bool m_triggering = false;