3#include "qml_material/control/control.hpp"
10Q_MOC_INCLUDE(
"QtQuick/private/qquicktransition_p.h")
14class PageStackAttached;
15class QML_MATERIAL_API PageStack :
public Control {
17 QML_NAMED_ELEMENT(PageStackBase)
18 QML_ATTACHED(PageStackAttached)
19 Q_PROPERTY(
int depth READ depth NOTIFY depthChanged FINAL)
20 Q_PROPERTY(
bool empty READ empty NOTIFY depthChanged FINAL)
21 Q_PROPERTY(
bool busy READ busy NOTIFY busyChanged FINAL)
22 Q_PROPERTY(QQuickTransition* pushEnter READ pushEnter WRITE setPushEnter NOTIFY
23 transitionsChanged FINAL)
25 QQuickTransition* pushExit READ pushExit WRITE setPushExit NOTIFY transitionsChanged FINAL)
27 QQuickTransition* popEnter READ popEnter WRITE setPopEnter NOTIFY transitionsChanged FINAL)
29 QQuickTransition* popExit READ popExit WRITE setPopExit NOTIFY transitionsChanged FINAL)
30 Q_PROPERTY(QQuickTransition* replaceEnter READ replaceEnter WRITE setReplaceEnter NOTIFY
31 transitionsChanged FINAL)
32 Q_PROPERTY(QQuickTransition* replaceExit READ replaceExit WRITE setReplaceExit NOTIFY
33 transitionsChanged FINAL)
34 Q_PROPERTY(QQuickItem* currentItem READ currentItem NOTIFY currentItemChanged FINAL)
35 Q_PROPERTY(QQuickItem* initialItem READ initialItem WRITE setInitialItem NOTIFY
36 initialItemChanged FINAL)
51 Q_ENUM(TransitionMode)
52 explicit PageStack(QQuickItem* parent =
nullptr);
53 ~PageStack()
override;
54 static PageStackAttached* qmlAttachedProperties(QObject*);
56 bool empty()
const {
return depth() == 0; }
58 QQuickTransition* pushEnter()
const;
59 QQuickTransition* pushExit()
const;
60 QQuickTransition* popEnter()
const;
61 QQuickTransition* popExit()
const;
62 QQuickTransition* replaceEnter()
const;
63 QQuickTransition* replaceExit()
const;
64 void setPushEnter(QQuickTransition*);
65 void setPushExit(QQuickTransition*);
66 void setPopEnter(QQuickTransition*);
67 void setPopExit(QQuickTransition*);
68 void setReplaceEnter(QQuickTransition*);
69 void setReplaceExit(QQuickTransition*);
70 Q_INVOKABLE
void completeTransition();
71 Q_SIGNAL
void busyChanged();
72 Q_SIGNAL
void transitionsChanged();
73 QQuickItem* currentItem()
const;
74 QQuickItem* initialItem()
const;
75 void setInitialItem(QQuickItem*);
76 Q_INVOKABLE
bool pushItem(QQuickItem*, TransitionMode mode = Animated);
77 Q_INVOKABLE
bool replaceCurrentItem(QQuickItem*, TransitionMode mode = Animated);
78 Q_INVOKABLE
bool popCurrentItem(TransitionMode mode = Animated);
79 Q_INVOKABLE
bool clear(TransitionMode mode = Animated);
80 Q_INVOKABLE QQuickItem* itemAt(
int index)
const;
81 Q_SIGNAL
void depthChanged();
82 Q_SIGNAL
void currentItemChanged();
83 Q_SIGNAL
void initialItemChanged();
84 Q_SIGNAL
void entryRemoved(quint64
id);
85 Q_SIGNAL
void entryAdded(quint64
id, QQuickItem* item);
88 void componentComplete()
override;
89 void geometryChange(
const QRectF&,
const QRectF&)
override;
90 bool childMouseEventFilter(QQuickItem*, QEvent*)
override;
94 std::shared_ptr<State> m_state;
95 bool navigate(
int operation, QQuickItem*, TransitionMode);
98 void removePage(quint64);
99 void startTransition(quint64);
100 void motionFinished(quint64);
104class QML_MATERIAL_API MaterialPageStack :
public PageStack {
106 QML_NAMED_ELEMENT(PageStack)
107 QML_ATTACHED(PageStackAttached)
109 explicit MaterialPageStack(QQuickItem* parent =
nullptr);
112class QML_MATERIAL_API PageStackAttached :
public QObject {
114 Q_PROPERTY(PageStack* view READ view NOTIFY changed FINAL)
115 Q_PROPERTY(
int index READ index NOTIFY changed FINAL)
116 Q_PROPERTY(PageStack::Status status READ status NOTIFY statusChanged FINAL)
118 using Status = PageStack::Status;
119 explicit PageStackAttached(QObject* parent): QObject(parent) {}
120 PageStack* view()
const {
return m_view; }
121 int index()
const {
return m_index; }
122 Status status()
const {
return m_status; }
123 Q_SIGNAL
void changed();
124 Q_SIGNAL
void statusChanged();
125 Q_SIGNAL
void removed();
128 friend class PageStack;
129 void update(PageStack*,
int, Status);
130 QPointer<PageStack> m_view;
132 Status m_status = PageStack::Inactive;
133 bool m_removing =
false;
136QML_DECLARE_TYPEINFO(qml_material::PageStack, QML_HAS_ATTACHED_PROPERTIES)
137QML_DECLARE_TYPEINFO(qml_material::MaterialPageStack, QML_HAS_ATTACHED_PROPERTIES)