2#include "qml_material/style/button_interaction_state.hpp"
3#include "qml_material/token/button.hpp"
5Q_MOC_INCLUDE(
"qml_material/control/button.hpp")
9class QML_MATERIAL_API ButtonAppearanceState :
public ButtonInteractionState {
11 QML_NAMED_ELEMENT(StateButtonBase)
12 QML_UNCREATABLE(
"Use StateButton or StateSplitButton")
13 Q_PROPERTY(qml_material::Button* item READ item WRITE setItem NOTIFY itemChanged FINAL)
14 Q_PROPERTY(
int size READ size WRITE setSize NOTIFY sizeChanged BINDABLE bindableSize FINAL)
15 Q_PROPERTY(
bool isRound READ isRound WRITE setIsRound NOTIFY isRoundChanged BINDABLE
16 bindableIsRound FINAL)
17 Q_PROPERTY(qreal containerHeight READ containerHeight NOTIFY geometryChanged)
18 Q_PROPERTY(qreal iconSize READ iconSize NOTIFY geometryChanged)
19 Q_PROPERTY(qreal leadingSpace READ leadingSpace NOTIFY geometryChanged)
20 Q_PROPERTY(qreal trailingSpace READ trailingSpace NOTIFY geometryChanged)
21 Q_PROPERTY(qreal spacing READ spacing NOTIFY geometryChanged)
22 Q_PROPERTY(
int type READ type WRITE setType NOTIFY typeChanged BINDABLE bindableType FINAL)
26 void setItem(Button*);
29 QBindable<
int> bindableSize();
31 void setIsRound(
bool);
32 QBindable<
bool> bindableIsRound();
33 virtual qreal containerHeight() const = 0;
34 virtual qreal iconSize() const = 0;
35 virtual qreal leadingSpace() const = 0;
36 virtual qreal trailingSpace() const = 0;
37 virtual qreal spacing() const = 0;
38 Q_SIGNAL
void geometryChanged();
39 Q_SIGNAL
void sizeChanged();
40 Q_SIGNAL
void isRoundChanged();
43 QBindable<
int> bindableType();
44 Q_SIGNAL
void typeChanged();
47 explicit ButtonAppearanceState(QObject* parent =
nullptr);
50 void bindAppearance();
51 QColor defaultTextColor() const;
52 QColor defaultBackgroundColor() const;
53 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(ButtonAppearanceState,
int, m_type,
54 int(Enum::ButtonType::BtElevated),
55 &ButtonAppearanceState::typeChanged)
56 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(ButtonAppearanceState,
int, m_size,
57 int(Enum::ButtonSize::S),
58 &ButtonAppearanceState::sizeChanged)
59 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(ButtonAppearanceState,
bool, m_isRound, true,
60 &ButtonAppearanceState::isRoundChanged)
61 BindingLifetime m_bindingLifetime { bindingSet().lifetime() };
64class QML_MATERIAL_API ButtonState :
public ButtonAppearanceState {
66 QML_NAMED_ELEMENT(StateButton)
68 sizeTokensChanged BINDABLE bindableSizeTokens FINAL)
72 explicit ButtonState(QObject* parent =
nullptr);
73 token::ButtonSize sizeTokens()
const;
74 void setSizeTokens(
const token::ButtonSize&);
75 QBindable<token::ButtonSize> bindableSizeTokens();
77 token::ButtonSizeItem sizeToken()
const;
78 qreal containerHeight()
const override;
79 qreal iconSize()
const override;
80 qreal leadingSpace()
const override;
81 qreal trailingSpace()
const override;
82 qreal spacing()
const override;
84 Q_SIGNAL
void sizeTokensChanged();
85 Q_SIGNAL
void sizeTokenChanged();
89 Q_OBJECT_BINDABLE_PROPERTY(ButtonState, token::ButtonSize, m_sizeTokens,
90 &ButtonState::sizeTokensChanged)
91 Q_OBJECT_BINDABLE_PROPERTY(ButtonState, token::ButtonSizeItem, m_selectedSize,
92 &ButtonState::sizeTokenChanged)
93 BindingLifetime m_bindingLifetime { bindingSet().lifetime() };