QmlMaterial 0.1.0
Loading...
Searching...
No Matches
check_box.hpp
1#pragma once
2
3#include <QJSValue>
4#include "qml_material/control/abstract_button.hpp"
5
6namespace qml_material
7{
8class QML_MATERIAL_API CheckBox : public AbstractButton {
9 Q_OBJECT
10 QML_NAMED_ELEMENT(CheckBoxBase)
11 Q_PROPERTY(bool tristate READ isTristate WRITE setTristate NOTIFY tristateChanged BINDABLE
12 bindableTristate FINAL)
13 Q_PROPERTY(Qt::CheckState checkState READ checkState WRITE setCheckState NOTIFY
14 checkStateChanged FINAL)
15 Q_PROPERTY(QJSValue nextCheckState READ nextCheckStateCallback WRITE setNextCheckStateCallback
16 NOTIFY nextCheckStateChanged FINAL)
17public:
18 explicit CheckBox(QQuickItem* parent = nullptr);
19 bool isTristate() const { return m_tristate; }
20 void setTristate(bool);
21 QBindable<bool> bindableTristate() { return QBindable<bool>(&m_tristate); }
22 Qt::CheckState checkState() const { return m_state; }
23 void setCheckState(Qt::CheckState);
24 QJSValue nextCheckStateCallback() const { return m_callback; }
25 void setNextCheckStateCallback(const QJSValue&);
26 Q_SIGNAL void tristateChanged();
27 Q_SIGNAL void checkStateChanged();
28 Q_SIGNAL void nextCheckStateChanged();
29
30protected:
31 void nextCheckState() override;
32
33private:
34 Q_OBJECT_BINDABLE_PROPERTY(CheckBox, bool, m_tristate, &CheckBox::tristateChanged)
35 bool m_syncing = false;
36 Qt::CheckState m_state = Qt::Unchecked;
37 QJSValue m_callback;
38};
39} // namespace qml_material