13class PageStackEntries :
public QObject {
32 QPointer<QQuickItem> item;
33 Status status = Status::Inactive;
34 bool retiring =
false;
40 Operation operation = Operation::Push;
42 explicit PageStackEntries(QObject* parent =
nullptr): QObject(parent) {}
43 ~PageStackEntries()
override;
44 int depth()
const {
return m_stack.size(); }
45 quint64 currentId()
const {
return m_stack.isEmpty() ? 0 : m_stack.last(); }
46 QQuickItem* currentItem()
const {
return entry(currentId()).item; }
47 Entry entry(quint64
id)
const {
return m_entries.value(
id); }
48 quint64 idAt(
int index)
const {
return m_stack.value(index); }
49 int indexOf(quint64
id)
const {
return m_stack.indexOf(
id); }
50 QList<Entry> entries()
const {
return m_entries.values(); }
51 std::optional<Transition> transition()
const {
return m_transition; }
52 quint64 push(QQuickItem* item) {
return navigate(Operation::Push, item); }
53 quint64 replace(QQuickItem* item) {
return navigate(Operation::Replace, item); }
54 quint64 pop() {
return navigate(Operation::Pop,
nullptr); }
55 quint64 clear() {
return navigate(Operation::Clear,
nullptr); }
56 bool finish(quint64 transitionId);
58 Q_SIGNAL
void changed();
59 Q_SIGNAL
void transitionRequested(quint64
id);
60 Q_SIGNAL
void entryRemoved(quint64
id, QQuickItem* item);
63 quint64 navigate(Operation, QQuickItem*);
66 QList<Entry> settle();
67 void destroyed(quint64);
68 void notify(
const QList<Entry>& removed = {});
69 QMap<quint64, Entry> m_entries;
70 QMap<quint64, QMetaObject::Connection> m_connections;
71 QList<quint64> m_stack;
72 std::optional<Transition> m_transition;
73 QSet<quint64> m_destroyed;
74 quint64 m_next_entry = 0;
75 quint64 m_next_transition = 0;
76 int m_notification_depth = 0;
77 bool m_closed =
false;