QmlMaterial 0.1.0
Loading...
Searching...
No Matches
segmented_button_group.hpp
1#pragma once
2#include "qml_material/control/container.hpp"
3#include "qml_material/control/button_group.hpp"
4#include "qml_material/core/enum.hpp"
5#include <QProperty>
6
7namespace qml_material
8{
9class QML_MATERIAL_API SegmentedButtonGroup : public MaterialContainer {
10 Q_OBJECT
11 QML_NAMED_ELEMENT(SegmentedButtonGroup)
12 Q_PROPERTY(ButtonGroup* group READ group CONSTANT FINAL)
13 Q_PROPERTY(bool exclusive READ isExclusive WRITE setExclusive NOTIFY exclusiveChanged FINAL)
14 Q_PROPERTY(int size READ buttonSize WRITE setButtonSize NOTIFY sizeChanged BINDABLE
15 bindableButtonSize FINAL)
16public:
17 explicit SegmentedButtonGroup(QQuickItem* parent = nullptr);
18 ButtonGroup* group() const { return m_group; }
19 bool isExclusive() const { return m_group->isExclusive(); }
20 void setExclusive(bool value) { m_group->setExclusive(value); }
21 Q_SIGNAL void exclusiveChanged();
22 int buttonSize() const { return m_size.value(); }
23 void setButtonSize(int value) { m_size = value; }
24 QBindable<int> bindableButtonSize() { return QBindable<int>(&m_size); }
25 Q_SIGNAL void sizeChanged();
26
27protected:
28 bool isContent(QQuickItem*) const override;
29 void itemAdded(QQuickItem*) override;
30 void itemRemoved(QQuickItem*) override;
31 void updatePolish() override;
32
33private:
34 ButtonGroup* m_group;
35 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(SegmentedButtonGroup, int, m_size,
36 int(Enum::ButtonSize::S),
37 &SegmentedButtonGroup::sizeChanged)
38};
39} // namespace qml_material