QmlMaterial 0.1.0
Loading...
Searching...
No Matches
chip_state.hpp
1#pragma once
2#include "qml_material/style/button_interaction_state.hpp"
3Q_MOC_INCLUDE("qml_material/control/button.hpp")
4namespace qml_material
5{
6class Button;
7class QML_MATERIAL_API ChipState : public ButtonInteractionState {
8 Q_OBJECT
9 QML_ANONYMOUS
10 Q_PROPERTY(qml_material::Button* item READ item WRITE setItem NOTIFY itemChanged FINAL)
11 Q_PROPERTY(bool elevated READ elevated WRITE setElevated NOTIFY elevatedChanged BINDABLE
12 bindableElevated FINAL)
13
14public:
15 Button* item() const;
16 void setItem(Button*);
17 bool elevated() const;
18 void setElevated(bool);
19 QBindable<bool> bindableElevated();
20 Q_SIGNAL void elevatedChanged();
21
22protected:
23 enum class Kind
24 {
25 Assist,
26 Suggestion,
27 Filter,
28 Input,
29 Embed
30 };
31 ChipState(Kind, QObject*);
32 QColor resolveIconColor(bool leading) const;
33
34private:
35 bool selected() const;
36 QColor defaultTextColor() const;
37 const Kind m_kind;
38 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(ChipState, bool, m_elevated, false,
39 &ChipState::elevatedChanged)
40 BindingLifetime m_bindingLifetime { bindingSet().lifetime() };
41};
42class QML_MATERIAL_API SingleIconChipState : public ChipState {
43 Q_OBJECT
44 QML_ANONYMOUS
45 Q_PROPERTY(QColor iconColor READ iconColor WRITE setIconColor RESET resetIconColor NOTIFY
46 iconColorChanged BINDABLE bindableIconColor FINAL)
47
48public:
49 QColor iconColor() const;
50 void setIconColor(const QColor&);
51 QBindable<QColor> bindableIconColor();
52 Q_INVOKABLE void resetIconColor();
53 Q_SIGNAL void iconColorChanged();
54
55protected:
56 SingleIconChipState(Kind, QObject*);
57
58private:
59 Q_OBJECT_BINDABLE_PROPERTY(SingleIconChipState, QColor, m_iconColor,
60 &SingleIconChipState::iconColorChanged)
61 PropertyKey<QColor> m_iconKey;
62 BindingLifetime m_bindingLifetime { bindingSet().lifetime() };
63};
64class QML_MATERIAL_API DualIconChipState : public ChipState {
65 Q_OBJECT
66 QML_ANONYMOUS
67 Q_PROPERTY(QColor leadingIconColor READ leadingIconColor WRITE setLeadingIconColor RESET
68 resetLeadingIconColor NOTIFY leadingIconColorChanged BINDABLE
69 bindableLeadingIconColor FINAL)
70 Q_PROPERTY(QColor trailingIconColor READ trailingIconColor WRITE setTrailingIconColor RESET
71 resetTrailingIconColor NOTIFY trailingIconColorChanged BINDABLE
72 bindableTrailingIconColor FINAL)
73
74public:
75 QColor leadingIconColor() const;
76 void setLeadingIconColor(const QColor&);
77 QBindable<QColor> bindableLeadingIconColor();
78 Q_INVOKABLE void resetLeadingIconColor();
79 Q_SIGNAL void leadingIconColorChanged();
80 QColor trailingIconColor() const;
81 void setTrailingIconColor(const QColor&);
82 QBindable<QColor> bindableTrailingIconColor();
83 Q_INVOKABLE void resetTrailingIconColor();
84 Q_SIGNAL void trailingIconColorChanged();
85
86protected:
87 DualIconChipState(Kind, QObject*);
88
89private:
90 Q_OBJECT_BINDABLE_PROPERTY(DualIconChipState, QColor, m_leadingIconColor,
91 &DualIconChipState::leadingIconColorChanged)
92 Q_OBJECT_BINDABLE_PROPERTY(DualIconChipState, QColor, m_trailingIconColor,
93 &DualIconChipState::trailingIconColorChanged)
94 PropertyKey<QColor> m_leadingIconKey, m_trailingIconKey;
95 BindingLifetime m_bindingLifetime { bindingSet().lifetime() };
96};
97class QML_MATERIAL_API AssistChipState : public SingleIconChipState {
98 Q_OBJECT
99 QML_NAMED_ELEMENT(StateAssistChip)
100
101public:
102 explicit AssistChipState(QObject* parent = nullptr);
103};
104class QML_MATERIAL_API SuggestionChipState : public SingleIconChipState {
105 Q_OBJECT
106 QML_NAMED_ELEMENT(StateSuggestionChip)
107
108public:
109 explicit SuggestionChipState(QObject* parent = nullptr);
110};
111class QML_MATERIAL_API FilterChipState : public DualIconChipState {
112 Q_OBJECT
113 QML_NAMED_ELEMENT(StateFilterChip)
114
115public:
116 explicit FilterChipState(QObject* parent = nullptr);
117};
118class QML_MATERIAL_API InputChipState : public DualIconChipState {
119 Q_OBJECT
120 QML_NAMED_ELEMENT(StateInputChip)
121
122public:
123 explicit InputChipState(QObject* parent = nullptr);
124};
125class QML_MATERIAL_API EmbedChipState : public DualIconChipState {
126 Q_OBJECT
127 QML_NAMED_ELEMENT(StateEmbedChip)
128 Q_PROPERTY(int borderWidth READ borderWidth WRITE setBorderWidth NOTIFY borderWidthChanged
129 BINDABLE bindableBorderWidth FINAL)
130
131public:
132 explicit EmbedChipState(QObject* parent = nullptr);
133 int borderWidth() const;
134 void setBorderWidth(int);
135 QBindable<int> bindableBorderWidth();
136 Q_SIGNAL void borderWidthChanged();
137
138private:
139 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(EmbedChipState, int, m_borderWidth, 0,
140 &EmbedChipState::borderWidthChanged)
141};
142} // namespace qml_material