QmlMaterial 0.1.0
Loading...
Searching...
No Matches
segmented_button_state.hpp
1#pragma once
2#include "qml_material/style/button_interaction_state.hpp"
3#include "qml_material/token/segmented_button.hpp"
4#include "qml_material/token/type_scale.hpp"
5Q_MOC_INCLUDE("qml_material/control/button.hpp")
6namespace qml_material
7{
8class Button;
9class QML_MATERIAL_API SegmentedButtonState : public ButtonInteractionState {
10 Q_OBJECT
11 QML_NAMED_ELEMENT(StateSegmentedButton)
12 Q_PROPERTY(qml_material::Button* item READ item WRITE setItem NOTIFY itemChanged FINAL)
13 Q_PROPERTY(int position READ position WRITE setPosition NOTIFY positionChanged BINDABLE
14 bindablePosition FINAL)
15 Q_PROPERTY(int size READ size WRITE setSize NOTIFY sizeChanged BINDABLE bindableSize FINAL)
16 Q_PROPERTY(qml_material::token::SegmentedButtonSize sizeTokens READ sizeTokens WRITE
17 setSizeTokens NOTIFY sizeTokensChanged BINDABLE bindableSizeTokens FINAL)
18 Q_PROPERTY(qml_material::token::SegmentedButtonSizeItem sizeToken READ sizeToken NOTIFY
19 sizeTokenChanged)
20 Q_PROPERTY(qml_material::token::TypeScaleItem typescale READ typescale NOTIFY typescaleChanged)
21 Q_PROPERTY(qreal containerHeight READ containerHeight NOTIFY sizeTokenChanged)
22 Q_PROPERTY(qreal iconSize READ iconSize NOTIFY sizeTokenChanged)
23 Q_PROPERTY(qreal leadingSpace READ leadingSpace NOTIFY sizeTokenChanged)
24 Q_PROPERTY(qreal trailingSpace READ trailingSpace NOTIFY sizeTokenChanged)
25 Q_PROPERTY(qreal spacing READ spacing NOTIFY sizeTokenChanged)
26 Q_PROPERTY(qreal outlineWidth READ outlineWidth NOTIFY sizeTokenChanged)
27 Q_PROPERTY(qreal cornerRadius READ cornerRadius WRITE setCornerRadius RESET resetCornerRadius
28 NOTIFY cornerRadiusChanged BINDABLE bindableCornerRadius)
29public:
30 explicit SegmentedButtonState(QObject* parent = nullptr);
31 Button* item() const;
32 void setItem(Button*);
33 int position() const;
34 void setPosition(int);
35 QBindable<int> bindablePosition();
36 int size() const;
37 void setSize(int);
38 QBindable<int> bindableSize();
39 token::SegmentedButtonSize sizeTokens() const;
40 void setSizeTokens(const token::SegmentedButtonSize&);
41 QBindable<token::SegmentedButtonSize> bindableSizeTokens();
42 token::SegmentedButtonSizeItem sizeToken() const;
43 token::TypeScaleItem typescale() const;
44 qreal containerHeight() const;
45 qreal iconSize() const;
46 qreal leadingSpace() const;
47 qreal trailingSpace() const;
48 qreal spacing() const;
49 qreal outlineWidth() const;
50 qreal cornerRadius() const;
51 void setCornerRadius(qreal);
52 void resetCornerRadius();
53 QBindable<qreal> bindableCornerRadius();
54 Q_SIGNAL void positionChanged();
55 Q_SIGNAL void sizeChanged();
56 Q_SIGNAL void sizeTokensChanged();
57 Q_SIGNAL void sizeTokenChanged();
58 Q_SIGNAL void typescaleChanged();
59 Q_SIGNAL void cornerRadiusChanged();
60
61private:
62 void updateMirrorSource();
63 QMetaObject::Connection m_mirrorConnection;
64 QProperty<bool> m_mirrored { false };
65 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(SegmentedButtonState, int, m_position,
66 int(Enum::ItemPosition::PosSingle),
67 &SegmentedButtonState::positionChanged)
68 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(SegmentedButtonState, int, m_size,
69 int(Enum::ButtonSize::S),
70 &SegmentedButtonState::sizeChanged)
71 Q_OBJECT_BINDABLE_PROPERTY(SegmentedButtonState, token::SegmentedButtonSize, m_sizeTokens,
72 &SegmentedButtonState::sizeTokensChanged)
73 Q_OBJECT_BINDABLE_PROPERTY(SegmentedButtonState, token::SegmentedButtonSizeItem, m_selectedSize,
74 &SegmentedButtonState::sizeTokenChanged)
75 Q_OBJECT_BINDABLE_PROPERTY(SegmentedButtonState, token::TypeScaleItem, m_typescale,
76 &SegmentedButtonState::typescaleChanged)
77 Q_OBJECT_BINDABLE_PROPERTY(SegmentedButtonState, qreal, m_cornerRadius,
78 &SegmentedButtonState::cornerRadiusChanged)
79 PropertyKey<qreal> m_radiusKey;
80 BindingLifetime m_bindingLifetime { bindingSet().lifetime() };
81};
82} // namespace qml_material
Segmented button size tokens for a specific size class.
Definition segmented_button.hpp:16
Collection of segmented button size tokens for different size classes.
Definition segmented_button.hpp:47
TypeScaleItem.
Definition type_scale.hpp:36