QmlMaterial 0.1.0
Loading...
Searching...
No Matches
carousel_item_state.hpp
1#pragma once
2#include "qml_material/style/common_state.hpp"
3#include <QQuickItem>
4namespace qml_material
5{
6class QML_MATERIAL_API CarouselItemState : public CommonState {
7 Q_OBJECT
8 QML_NAMED_ELEMENT(StateCarouselItem)
9 Q_PROPERTY(QQuickItem* item READ item WRITE setItem NOTIFY itemChanged FINAL)
10 Q_PROPERTY(bool down READ down WRITE setDown NOTIFY downChanged BINDABLE bindableDown)
11 Q_PROPERTY(
12 bool hovered READ hovered WRITE setHovered NOTIFY hoveredChanged BINDABLE bindableHovered)
13public:
14 explicit CarouselItemState(QObject* parent = nullptr);
15 ~CarouselItemState() override;
16 QQuickItem* item() const;
17 void setItem(QQuickItem*);
18 Q_SIGNAL void itemChanged();
19 bool down() const;
20 void setDown(bool);
21 QBindable<bool> bindableDown();
22 Q_SIGNAL void downChanged();
23 bool hovered() const;
24 void setHovered(bool);
25 QBindable<bool> bindableHovered();
26 Q_SIGNAL void hoveredChanged();
27
28private:
29 enum class Interaction
30 {
31 Base,
32 Disabled,
33 Pressed,
34 Hovered
35 };
36 struct Selection {
37 Interaction state = Interaction::Base;
38 quint64 generation = 0;
39 bool operator==(const Selection&) const = default;
40 };
41 void selectionChanged();
42 StateBindingSet<Interaction> m_bindings { Interaction::Base };
43 QProperty<bool> m_disabled { false };
44 QMetaObject::Connection m_enabledConnection;
45 bool m_ready = false;
46 Q_OBJECT_BINDABLE_PROPERTY(CarouselItemState, Selection, m_selection,
47 &CarouselItemState::selectionChanged)
48 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(CarouselItemState, bool, m_down, false,
49 &CarouselItemState::downChanged)
50 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(CarouselItemState, bool, m_hovered, false,
51 &CarouselItemState::hoveredChanged)
52 StateBindingSet<Interaction>::Lifetime m_lifetime { m_bindings.lifetime() };
53};
54} // namespace qml_material