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
7namespace qml_material
8{
9
10class State : public QQuickItem {
11 Q_OBJECT
12 QML_ELEMENT
13 Q_PROPERTY(QObject* item READ item WRITE set_item NOTIFY itemChanged)
14 Q_PROPERTY(qml_material::Theme* ctx READ ctx WRITE setCtx NOTIFY ctxChanged FINAL)
15 Q_PROPERTY(qint32 elevation READ elevation WRITE set_elevation NOTIFY elevationChanged FINAL)
16
17 Q_PROPERTY(QColor textColor READ text_color WRITE set_text_color NOTIFY textColorChanged FINAL)
18 Q_PROPERTY(QColor backgroundColor READ background_color WRITE set_background_color NOTIFY
19 backgroundColorChanged FINAL)
20 Q_PROPERTY(QColor outlineColor READ outline_color WRITE set_outline_color NOTIFY
21 outlineColorChanged FINAL)
22 Q_PROPERTY(QColor supportTextColor READ support_text_color WRITE set_support_text_color NOTIFY
23 supportTextColorChanged FINAL)
24 Q_PROPERTY(QColor stateLayerColor READ state_layer_color WRITE set_state_layer_color NOTIFY
25 stateLayerColorChanged FINAL)
26
27 Q_PROPERTY(double stateLayerOpacity READ state_layer_opacity WRITE set_state_layer_opacity
28 NOTIFY stateLayerOpacityChanged FINAL)
29 Q_PROPERTY(double contentOpacity READ content_opacity WRITE set_content_opacity NOTIFY
30 contentOpacityChanged FINAL)
31 Q_PROPERTY(double backgroundOpacity READ background_opacity WRITE set_background_opacity NOTIFY
32 backgroundOpacityChanged FINAL)
33
34public:
35 State(QQuickItem* parent = nullptr);
36 ~State();
37 void classBegin() override;
38 void componentComplete() override;
39 auto ctx() const -> Theme*;
40 Q_SLOT void setCtx(Theme*);
41
42 auto item() const -> QObject*;
43 auto elevation() const -> qint32;
44 auto text_color() const -> QColor;
45 auto outline_color() const -> QColor;
46 auto background_color() const -> QColor;
47 auto support_text_color() const -> QColor;
48 auto state_layer_color() const -> QColor;
49 auto state_layer_opacity() const -> double;
50 auto content_opacity() const -> double;
51 auto background_opacity() const -> double;
52
53 void set_item(QObject*);
54 void set_elevation(qint32);
55 void set_text_color(QColor);
56 void set_outline_color(QColor);
57 void set_background_color(QColor);
58 void set_support_text_color(QColor);
59 void set_state_layer_color(QColor);
60 void set_state_layer_opacity(double);
61 void set_content_opacity(double);
62 void set_background_opacity(double);
63
64 Q_SIGNAL void itemChanged();
65 Q_SIGNAL void ctxChanged();
66 Q_SIGNAL void elevationChanged();
67 Q_SIGNAL void textColorChanged();
68 Q_SIGNAL void outlineColorChanged();
69 Q_SIGNAL void backgroundColorChanged();
70 Q_SIGNAL void supportTextColorChanged();
71 Q_SIGNAL void stateLayerColorChanged();
72 Q_SIGNAL void stateLayerOpacityChanged();
73 Q_SIGNAL void contentOpacityChanged();
74 Q_SIGNAL void backgroundOpacityChanged();
75
76private:
77 Q_SLOT void updateCtx();
78
79private:
80 QObject* m_item;
81 Theme* m_ctx;
82 qint32 m_elevation;
83 QColor m_text_color;
84 QColor m_outline_color;
85 QColor m_background_color;
86 QColor m_support_text_color;
87 QColor m_state_layer_color;
88 double m_state_layer_opacity;
89 double m_content_opacity;
90 double m_background_opacity;
91};
92
93class StateHolder : public QObject {
94 Q_OBJECT
95 QML_ELEMENT
96
97 Q_PROPERTY(qml_material::State* state READ state WRITE setState NOTIFY stateChanged FINAL)
98public:
99 StateHolder(QObject* parent = nullptr);
100 ~StateHolder();
101
102 auto state() const -> State*;
103
104 Q_SLOT void setState(State*);
105 Q_SIGNAL void stateChanged();
106
107private:
108 State* m_state;
109};
110
111} // namespace qml_material