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