QmlMaterial 0.1.0
Loading...
Searching...
No Matches
page_container.hpp
1#pragma once
2
3#include "qml_material/control/page_stack.hpp"
4#include <QtCore/QHash>
5#include <QtQml/QJSValue>
6
7Q_MOC_INCLUDE("qml_material/util/pool.hpp")
8
9namespace qml_material
10{
11class Pool;
12class PoolRequest;
13
14class QML_MATERIAL_API PageContainer : public MaterialPageStack {
15 Q_OBJECT
16 QML_NAMED_ELEMENT(PageContainer)
17 QML_ATTACHED(PageStackAttached)
18 Q_PROPERTY(PoolRequest* pendingRequest READ pendingRequest NOTIFY pendingRequestChanged FINAL)
19 Q_PROPERTY(PoolRequest* currentRequest READ currentRequest NOTIFY currentRequestChanged FINAL)
20 Q_PROPERTY(QString currentKey READ currentKey NOTIFY currentKeyChanged FINAL)
21 Q_PROPERTY(bool canBack READ canBack NOTIFY canBackChanged FINAL)
22public:
23 explicit PageContainer(QQuickItem* parent = nullptr);
24 ~PageContainer() override;
25 PoolRequest* pendingRequest() const;
26 PoolRequest* currentRequest() const;
27 QString currentKey() const;
28 bool canBack() const;
29 Q_INVOKABLE void switchTo(const QJSValue& source, const QJSValue& properties,
30 bool cached = true);
31 Q_INVOKABLE void back();
32 Q_SIGNAL void pendingRequestChanged();
33 Q_SIGNAL void currentRequestChanged();
34 Q_SIGNAL void currentKeyChanged();
35 Q_SIGNAL void canBackChanged();
36 Q_SIGNAL void pageLoadFailed(const QString& error);
37
38protected:
39 void classBegin() override;
40
41private:
42 Q_SLOT void updateCanBack();
43 void handlePendingRequest();
44 void setPendingRequest(PoolRequest*);
45 void setCurrentRequest(PoolRequest*);
46 Pool* m_pool;
47 QPointer<PoolRequest> m_pending;
48 QPointer<PoolRequest> m_current;
49 QPointer<PoolRequest> m_accepting;
50 QHash<quint64, QPointer<PoolRequest>> m_leases;
51 QMetaObject::Connection m_statusConnection;
52 QMetaObject::Connection m_backConnection;
53 QString m_currentKey;
54 bool m_changing = false;
55 bool m_canBack = false;
56};
57} // namespace qml_material
58
59QML_DECLARE_TYPEINFO(qml_material::PageContainer, QML_HAS_ATTACHED_PROPERTIES)