2#include "qml_material/control/container.hpp"
3#include "qml_material/control/tab_button.hpp"
4#include "qml_material/control/button_group.hpp"
9class QML_MATERIAL_API TabBar :
public Container {
11 QML_NAMED_ELEMENT(TabBarBase)
12 QML_ATTACHED(TabBarAttached)
14 qml_material::TabButton* currentItem READ currentItem NOTIFY currentItemChanged FINAL)
15 Q_PROPERTY(Position position READ position WRITE setPosition NOTIFY positionChanged FINAL)
16 Q_PROPERTY(Mode mode READ mode WRITE setMode NOTIFY modeChanged FINAL)
17 Q_PROPERTY(qreal minimumTabWidth READ minimumTabWidth WRITE setMinimumTabWidth NOTIFY
18 minimumTabWidthChanged FINAL)
20 qreal edgePadding READ edgePadding WRITE setEdgePadding NOTIFY edgePaddingChanged FINAL)
21 Q_PROPERTY(qreal autoGutter READ autoGutter WRITE setAutoGutter NOTIFY autoGutterChanged FINAL)
36 explicit TabBar(QQuickItem* parent =
nullptr);
38 static TabBarAttached* qmlAttachedProperties(QObject*);
39 TabButton* currentItem()
const {
return qobject_cast<TabButton*>(Container::currentItem()); }
40 Position position()
const {
return m_position; }
41 void setPosition(Position);
42 Mode mode()
const {
return m_mode; }
44 qreal minimumTabWidth()
const {
return m_minimumTabWidth; }
45 void setMinimumTabWidth(qreal);
46 qreal edgePadding()
const {
return m_edgePadding; }
47 void setEdgePadding(qreal);
48 qreal autoGutter()
const {
return m_autoGutter; }
49 void setAutoGutter(qreal);
50 Q_SIGNAL
void modeChanged();
51 Q_SIGNAL
void minimumTabWidthChanged();
52 Q_SIGNAL
void edgePaddingChanged();
53 Q_SIGNAL
void autoGutterChanged();
54 Q_INVOKABLE TabButton* itemAt(
int index)
const {
55 return qobject_cast<TabButton*>(Container::itemAt(index));
57 void incrementCurrentIndex()
override;
58 void decrementCurrentIndex()
override;
59 Q_SIGNAL
void positionChanged();
62 bool isContent(QQuickItem*)
const override;
63 void itemAdded(QQuickItem*)
override;
64 void itemRemoved(QQuickItem*)
override;
65 void itemsChanged()
override;
66 void currentItemChange()
override;
67 int initialIndex()
const override;
68 void updatePolish()
override;
69 void keyPressEvent(QKeyEvent*)
override;
74 QHash<QQuickItem*, QList<QMetaObject::Connection>> m_connections;
75 Position m_position = Header;
77 qreal m_minimumTabWidth = 90;
78 qreal m_edgePadding = 52;
79 qreal m_autoGutter = 16;
80 bool m_selecting =
false;
81 bool m_selection_dirty =
false;
83class QML_MATERIAL_API TabBarAttached :
public QObject {
85 Q_PROPERTY(
int index READ index NOTIFY indexChanged FINAL)
86 Q_PROPERTY(TabBar* tabBar READ tabBar NOTIFY tabBarChanged FINAL)
87 Q_PROPERTY(TabBar::Position position READ position NOTIFY positionChanged FINAL)
89 explicit TabBarAttached(QObject* parent): QObject(parent) {}
90 int index()
const {
return m_index; }
91 TabBar* tabBar()
const {
return m_bar; }
92 TabBar::Position position()
const {
return m_bar ? m_bar->position() : TabBar::Header; }
93 Q_SIGNAL
void indexChanged();
94 Q_SIGNAL
void tabBarChanged();
95 Q_SIGNAL
void positionChanged();
99 void update(TabBar*,
int);
100 QPointer<TabBar> m_bar;
104QML_DECLARE_TYPEINFO(qml_material::TabBar, QML_HAS_ATTACHED_PROPERTIES)