2#include "qml_material/style/common_state.hpp"
3#include "qml_material/token/split_button.hpp"
5Q_MOC_INCLUDE(
"qml_material/control/button.hpp")
9class QML_MATERIAL_API SplitButtonIndicatorState :
public CommonState {
11 QML_NAMED_ELEMENT(StateSplitButtonIndicator)
12 Q_PROPERTY(qml_material::Button* item READ item WRITE setItem NOTIFY itemChanged FINAL)
13 Q_PROPERTY(
int type READ type WRITE setType NOTIFY typeChanged BINDABLE bindableType)
14 Q_PROPERTY(
int size READ size WRITE setSize NOTIFY sizeChanged BINDABLE bindableSize)
16 bool isRound READ isRound WRITE setIsRound NOTIFY isRoundChanged BINDABLE bindableIsRound)
17 Q_PROPERTY(qreal baseCorner READ baseCorner NOTIFY baseCornerChanged)
18 Q_PROPERTY(qreal innerCorner READ innerCorner NOTIFY innerCornerChanged)
21 explicit SplitButtonIndicatorState(QObject* parent =
nullptr);
22 ~SplitButtonIndicatorState()
override;
24 void setItem(Button*);
25 Q_SIGNAL
void itemChanged();
28 QBindable<int> bindableType();
29 Q_SIGNAL
void typeChanged();
32 QBindable<int> bindableSize();
33 Q_SIGNAL
void sizeChanged();
35 void setIsRound(
bool);
36 QBindable<bool> bindableIsRound();
37 Q_SIGNAL
void isRoundChanged();
38 qreal baseCorner()
const;
39 qreal innerCorner()
const {
return m_innerCorner.value(); }
40 token::SplitButtonSizeItem sizeToken()
const;
41 Q_SIGNAL
void innerCornerChanged();
42 Q_SIGNAL
void baseCornerChanged();
43 Q_INVOKABLE qreal calcRadius(
int size,
bool round,
bool pressed)
const;
46 enum class Interaction
52 Interaction state = Interaction::Base;
53 quint64 generation = 0;
54 bool operator==(
const Selection&)
const =
default;
56 void selectionChanged();
57 void updateBackground();
58 StateBindingSet<Interaction> m_bindings { Interaction::Base };
59 QProperty<Button*> m_item {
nullptr };
60 QProperty<bool> m_disabled {
false };
61 QList<QMetaObject::Connection> m_connections;
62 QList<QMetaObject::Connection> m_backgroundConnections;
63 QProperty<std::optional<qreal>> m_backgroundHeight;
65 Q_OBJECT_BINDABLE_PROPERTY(SplitButtonIndicatorState, Selection, m_selection,
66 &SplitButtonIndicatorState::selectionChanged)
67 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(SplitButtonIndicatorState,
int, m_type,
68 int(Enum::ButtonType::BtFilled),
69 &SplitButtonIndicatorState::typeChanged)
70 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(SplitButtonIndicatorState,
int, m_size,
71 int(Enum::ButtonSize::S),
72 &SplitButtonIndicatorState::sizeChanged)
73 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(SplitButtonIndicatorState,
bool, m_isRound,
true,
74 &SplitButtonIndicatorState::isRoundChanged)
75 Q_OBJECT_BINDABLE_PROPERTY(SplitButtonIndicatorState, qreal, m_baseCorner,
76 &SplitButtonIndicatorState::baseCornerChanged)
77 Q_OBJECT_BINDABLE_PROPERTY(SplitButtonIndicatorState, qreal, m_innerCorner,
78 &SplitButtonIndicatorState::innerCornerChanged)
79 StateBindingSet<Interaction>::Lifetime m_lifetime { m_bindings.lifetime() };