QmlMaterial 0.1.0
Loading...
Searching...
No Matches
state.hpp
1#pragma once
2
3#include <QtQml/QQmlEngine>
4#include <QtQuick/QQuickItem>
5#include "qml_material/style/theme.hpp"
6
7QT_BEGIN_NAMESPACE
8class QQuickStateGroup;
9QT_END_NAMESPACE
10
11namespace qml_material
12{
13
14class State : public QObject, public QQmlParserStatus {
15 Q_OBJECT
16 Q_INTERFACES(QQmlParserStatus)
17 QML_NAMED_ELEMENT(MStateImpl)
18 Q_PROPERTY(QQmlListProperty<QObject> datas READ datas FINAL)
19 Q_CLASSINFO("DefaultProperty", "datas")
20
21 Q_PROPERTY(QObject* target READ target WRITE set_target NOTIFY targetChanged FINAL)
22 Q_PROPERTY(bool enabled READ enabled WRITE set_enabled NOTIFY enabledChanged FINAL)
23 Q_PROPERTY(qml_material::Theme* ctx READ ctx WRITE set_ctx NOTIFY ctxChanged FINAL)
24 Q_PROPERTY(qint32 elevation READ elevation WRITE set_elevation NOTIFY elevationChanged FINAL)
25
26 Q_PROPERTY(QColor textColor READ text_color WRITE set_text_color NOTIFY textColorChanged FINAL)
27 Q_PROPERTY(QColor backgroundColor READ background_color WRITE set_background_color NOTIFY
28 backgroundColorChanged FINAL)
29 Q_PROPERTY(QColor outlineColor READ outline_color WRITE set_outline_color NOTIFY
30 outlineColorChanged FINAL)
31 Q_PROPERTY(QColor supportTextColor READ support_text_color WRITE set_support_text_color NOTIFY
32 supportTextColorChanged FINAL)
33 Q_PROPERTY(QColor stateLayerColor READ state_layer_color WRITE set_state_layer_color NOTIFY
34 stateLayerColorChanged FINAL)
35
36 Q_PROPERTY(double stateLayerOpacity READ state_layer_opacity WRITE set_state_layer_opacity
37 NOTIFY stateLayerOpacityChanged FINAL)
38 Q_PROPERTY(double contentOpacity READ content_opacity WRITE set_content_opacity NOTIFY
39 contentOpacityChanged FINAL)
40 Q_PROPERTY(double backgroundOpacity READ background_opacity WRITE set_background_opacity NOTIFY
41 backgroundOpacityChanged FINAL)
42
43 Q_PROPERTY(QString state READ state WRITE set_state NOTIFY stateChanged FINAL)
44 Q_PROPERTY(QQmlListProperty<QQuickState> states READ states DESIGNABLE false)
45 Q_PROPERTY(QQmlListProperty<QQuickTransition> transitions READ transitions DESIGNABLE false)
46
47public:
48 State(QQuickItem* parent = nullptr);
49 ~State();
50
51 void classBegin() override;
52 void componentComplete() override;
53 auto ctx() const -> Theme*;
54 void set_ctx(Theme*);
55
56 auto state() const -> QString;
57 auto enabled() const noexcept -> bool;
58 auto target() const noexcept -> QObject*;
59 auto elevation() const noexcept -> qint32;
60 auto text_color() const noexcept -> QColor;
61 auto outline_color() const noexcept -> QColor;
62 auto background_color() const noexcept -> QColor;
63 auto support_text_color() const noexcept -> QColor;
64 auto state_layer_color() const noexcept -> QColor;
65 auto state_layer_opacity() const noexcept -> double;
66 auto content_opacity() const noexcept -> double;
67 auto background_opacity() const noexcept -> double;
68
69 void set_state(const QString&);
70 void set_enabled(bool);
71 void set_target(QObject*);
72 void set_elevation(qint32);
73 void set_text_color(QColor);
74 void set_outline_color(QColor);
75 void set_background_color(QColor);
76 void set_support_text_color(QColor);
77 void set_state_layer_color(QColor);
78 void set_state_layer_opacity(double);
79 void set_content_opacity(double);
80 void set_background_opacity(double);
81
82 Q_SIGNAL void stateChanged(const QString&);
83 Q_SIGNAL void enabledChanged();
84 Q_SIGNAL void targetChanged();
85 Q_SIGNAL void ctxChanged();
86 Q_SIGNAL void elevationChanged();
87 Q_SIGNAL void textColorChanged();
88 Q_SIGNAL void outlineColorChanged();
89 Q_SIGNAL void backgroundColorChanged();
90 Q_SIGNAL void supportTextColorChanged();
91 Q_SIGNAL void stateLayerColorChanged();
92 Q_SIGNAL void stateLayerOpacityChanged();
93 Q_SIGNAL void contentOpacityChanged();
94 Q_SIGNAL void backgroundOpacityChanged();
95
96 auto datas() -> QQmlListProperty<QObject>;
97 auto states() -> QQmlListProperty<QQuickState>;
98 auto transitions() -> QQmlListProperty<QQuickTransition>;
99
100private:
101 Q_SLOT void updateCtx();
102
103 QQuickStateGroup* _states();
104
105private:
106 QObject* m_target;
107 bool m_enabled;
108 Theme* m_ctx;
109 bool m_explicit_ctx;
110 qint32 m_elevation;
111 QColor m_text_color;
112 QColor m_outline_color;
113 QColor m_background_color;
114 QColor m_support_text_color;
115 QColor m_state_layer_color;
116 double m_state_layer_opacity;
117 double m_content_opacity;
118 double m_background_opacity;
119
120 bool m_component_complete;
121 QQuickStateGroup* m_state_group;
122 QList<QObject*> m_datas;
123};
124
125} // namespace qml_material