QmlMaterial 0.1.0
Loading...
Searching...
No Matches
menu.hpp
1#pragma once
2
3#include "qml_material/control/popup.hpp"
4
5QT_BEGIN_NAMESPACE
6class QQmlComponent;
7class QQmlObjectModel;
8QT_END_NAMESPACE
9
10Q_MOC_INCLUDE("QtQml/QQmlComponent")
11
12namespace qml_material
13{
14class QML_MATERIAL_API Menu : public Popup {
15 Q_OBJECT
16 QML_NAMED_ELEMENT(MenuBase)
17 Q_PROPERTY(QObject* contentModel READ contentModel CONSTANT FINAL)
18 Q_PROPERTY(int count READ count NOTIFY countChanged FINAL)
19 Q_PROPERTY(
20 int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged FINAL)
21 Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged FINAL)
22 Q_PROPERTY(QQmlComponent* delegate READ delegate WRITE setDelegate NOTIFY delegateChanged FINAL)
23 Q_PROPERTY(Menu* parentMenu READ parentMenu WRITE setParentMenu NOTIFY parentMenuChanged FINAL)
24public:
25 explicit Menu(QObject* parent = nullptr);
26 ~Menu() override;
27 QObject* contentModel() const;
28 int count() const { return m_items.size(); }
29 int currentIndex() const { return m_index; }
30 void setCurrentIndex(int);
31 QString title() const { return m_title; }
32 void setTitle(const QString&);
33 QQmlComponent* delegate() const;
34 void setDelegate(QQmlComponent*);
35 Menu* parentMenu() const { return m_parentMenu; }
36 void setParentMenu(Menu*);
37 Q_INVOKABLE QQuickItem* itemAt(int) const;
38 Q_INVOKABLE int indexOf(QQuickItem*) const;
39 Q_INVOKABLE void addItem(QQuickItem*);
40 Q_INVOKABLE void insertItem(int, QQuickItem*);
41 Q_INVOKABLE void moveItem(int, int);
42 Q_INVOKABLE QQuickItem* takeItem(int);
43 Q_INVOKABLE void removeItem(QQuickItem*);
44 Q_INVOKABLE void dismiss();
45 Q_INVOKABLE void openSubMenu(Menu*, QQuickItem* anchor);
46 Q_INVOKABLE void popup(qreal x, qreal y);
47 Q_SIGNAL void countChanged();
48 Q_SIGNAL void currentIndexChanged();
49 Q_SIGNAL void titleChanged();
50 Q_SIGNAL void delegateChanged();
51 Q_SIGNAL void parentMenuChanged();
52
53private:
54 void removeAt(int);
55 QQmlObjectModel* m_model;
56 QList<QQuickItem*> m_items;
57 QHash<QQuickItem*, QMetaObject::Connection> m_destroyConnections;
58 QPointer<QQmlComponent> m_delegate;
59 QPointer<Menu> m_parentMenu;
60 QPointer<Menu> m_childMenu;
61 QMetaObject::Connection m_parentClosing;
62 QMetaObject::Connection m_parentDestroyed;
63 QString m_title;
64 int m_index = -1;
65};
66} // namespace qml_material