QmlMaterial 0.1.0
Loading...
Searching...
No Matches
snake_bar_state.hpp
1#pragma once
2#include "qml_material/style/common_state.hpp"
3Q_MOC_INCLUDE("qml_material/control/control.hpp")
4Q_MOC_INCLUDE("qml_material/control/abstract_button.hpp")
5namespace qml_material
6{
7class Control;
8class AbstractButton;
9class QML_MATERIAL_API SnakeBarState : public CommonState {
10 Q_OBJECT
11 QML_NAMED_ELEMENT(StateSnakeBar)
12 Q_PROPERTY(qml_material::Control* item READ item WRITE setItem NOTIFY itemChanged FINAL)
13 Q_PROPERTY(qml_material::AbstractButton* actionItem READ actionItem WRITE setActionItem NOTIFY
14 actionItemChanged)
15 Q_PROPERTY(qml_material::AbstractButton* iconItem READ iconItem WRITE setIconItem NOTIFY
16 iconItemChanged)
17 Q_PROPERTY(QColor iconColor READ iconColor WRITE setIconColor RESET resetIconColor NOTIFY
18 iconColorChanged BINDABLE bindableIconColor)
19 Q_PROPERTY(QColor iconStateLayerColor READ iconStateLayerColor WRITE setIconStateLayerColor
20 RESET resetIconStateLayerColor NOTIFY iconStateLayerColorChanged BINDABLE
21 bindableIconStateLayerColor)
22 Q_PROPERTY(qreal iconStateLayerOpacity READ iconStateLayerOpacity WRITE setIconStateLayerOpacity
23 RESET resetIconStateLayerOpacity NOTIFY iconStateLayerOpacityChanged BINDABLE
24 bindableIconStateLayerOpacity)
25public:
26 explicit SnakeBarState(QObject* parent = nullptr);
27 ~SnakeBarState() override;
28 Control* item() const;
29 void setItem(Control*);
30 Q_SIGNAL void itemChanged();
31 AbstractButton* actionItem() const;
32 void setActionItem(AbstractButton*);
33 Q_SIGNAL void actionItemChanged();
34 AbstractButton* iconItem() const;
35 void setIconItem(AbstractButton*);
36 Q_SIGNAL void iconItemChanged();
37 QColor iconColor() const;
38 void setIconColor(const QColor&);
39 QBindable<QColor> bindableIconColor();
40 void resetIconColor();
41 Q_SIGNAL void iconColorChanged();
42 QColor iconStateLayerColor() const;
43 void setIconStateLayerColor(const QColor&);
44 QBindable<QColor> bindableIconStateLayerColor();
45 void resetIconStateLayerColor();
46 Q_SIGNAL void iconStateLayerColorChanged();
47 qreal iconStateLayerOpacity() const;
48 void setIconStateLayerOpacity(qreal);
49 QBindable<qreal> bindableIconStateLayerOpacity();
50 void resetIconStateLayerOpacity();
51 Q_SIGNAL void iconStateLayerOpacityChanged();
52
53private:
54 enum class Interaction
55 {
56 Base,
57 ActionHover,
58 ActionFocus,
59 ActionPress,
60 IconHover,
61 IconFocus,
62 IconPress
63 };
64 struct Selection {
65 Interaction state = Interaction::Base;
66 quint64 generation = 0;
67 bool operator==(const Selection&) const = default;
68 };
69 void selectionChanged();
70 StateBindingSet<Interaction> m_bindings { Interaction::Base };
71 QProperty<AbstractButton*> m_actionItem { nullptr };
72 QProperty<AbstractButton*> m_iconItem { nullptr };
73 QMetaObject::Connection m_actionDestroyed;
74 QMetaObject::Connection m_iconDestroyed;
75 bool m_ready = false;
76 Q_OBJECT_BINDABLE_PROPERTY(SnakeBarState, Selection, m_selection,
77 &SnakeBarState::selectionChanged)
78 Q_OBJECT_BINDABLE_PROPERTY(SnakeBarState, QColor, m_iconColor, &SnakeBarState::iconColorChanged)
79 Q_OBJECT_BINDABLE_PROPERTY(SnakeBarState, QColor, m_iconStateLayerColor,
80 &SnakeBarState::iconStateLayerColorChanged)
81 Q_OBJECT_BINDABLE_PROPERTY(SnakeBarState, qreal, m_iconStateLayerOpacity,
82 &SnakeBarState::iconStateLayerOpacityChanged)
83 PropertyKey<QColor> m_iconColorKey;
84 PropertyKey<QColor> m_iconLayerColorKey;
85 PropertyKey<qreal> m_iconLayerOpacityKey;
86 StateBindingSet<Interaction>::Lifetime m_lifetime { m_bindings.lifetime() };
87};
88} // namespace qml_material