QmlMaterial 0.1.0
Loading...
Searching...
No Matches
page_context.hpp
1#pragma once
2
3#include <QtCore/QList>
4#include <QtCore/QMetaObject>
5#include <QtCore/QPointer>
6#include <QtQml/QQmlEngine>
7
8namespace qml_material
9{
10class PageContext : public QObject {
11 Q_OBJECT
12 QML_ELEMENT
13 Q_PROPERTY(PageContext* inherit READ inherit WRITE setInherit NOTIFY inheritChanged FINAL)
14 Q_PROPERTY(QObject* leadingAction READ leadingAction WRITE setLeadingAction RESET
15 resetLeadingAction NOTIFY leadingActionChanged FINAL)
16 Q_PROPERTY(qint32 headerType READ headerType WRITE setHeaderType RESET resetHeaderType NOTIFY
17 headerTypeChanged FINAL)
18 Q_PROPERTY(qint32 backgroundRadius READ backgroundRadius WRITE setBackgroundRadius RESET
19 resetBackgroundRadius NOTIFY backgroundRadiusChanged FINAL)
20 Q_PROPERTY(
21 double headerBackgroundOpacity READ headerBackgroundOpacity WRITE setHeaderBackgroundOpacity
22 RESET resetHeaderBackgroundOpacity NOTIFY headerBackgroundOpacityChanged FINAL)
23 Q_PROPERTY(
24 qint32 radius READ radius WRITE setRadius RESET resetRadius NOTIFY radiusChanged FINAL)
25 Q_PROPERTY(bool showHeader READ showHeader WRITE setShowHeader RESET resetShowHeader NOTIFY
26 showHeaderChanged FINAL)
27 Q_PROPERTY(bool showBackground READ showBackground WRITE setShowBackground RESET
28 resetShowBackground NOTIFY showBackgroundChanged FINAL)
29 Q_PROPERTY(qint32 leftMargin READ leftMargin WRITE setLeftMargin RESET resetLeftMargin NOTIFY
30 leftMarginChanged FINAL)
31 Q_PROPERTY(qint32 rightMargin READ rightMargin WRITE setRightMargin RESET resetRightMargin
32 NOTIFY rightMarginChanged FINAL)
33 Q_PROPERTY(qint32 topMargin READ topMargin WRITE setTopMargin RESET resetTopMargin NOTIFY
34 topMarginChanged FINAL)
35 Q_PROPERTY(qint32 bottomMargin READ bottomMargin WRITE setBottomMargin RESET resetBottomMargin
36 NOTIFY bottomMarginChanged FINAL)
37public:
38 PageContext(QObject* parent = nullptr);
39 ~PageContext();
40
41 auto inherit() const -> PageContext*;
42 auto leadingAction() const -> QObject*;
43 auto backgroundRadius() const -> qint32;
44 auto headerBackgroundOpacity() const -> double;
45 auto radius() const -> qint32;
46 auto headerType() const -> qint32;
47 auto showHeader() const -> bool;
48 auto showBackground() const -> bool;
49 auto leftMargin() const -> qint32;
50 auto rightMargin() const -> qint32;
51 auto topMargin() const -> qint32;
52 auto bottomMargin() const -> qint32;
53
54 Q_SLOT void setInherit(PageContext*);
55 Q_SLOT void setLeadingAction(QObject*);
56 Q_SLOT void setBackgroundRadius(qint32);
57 Q_SLOT void setHeaderBackgroundOpacity(double);
58 Q_SLOT void setRadius(qint32);
59 Q_SLOT void setHeaderType(qint32);
60 Q_SLOT void setShowHeader(bool);
61 Q_SLOT void setShowBackground(bool);
62 Q_SLOT void setLeftMargin(qint32);
63 Q_SLOT void setRightMargin(qint32);
64 Q_SLOT void setTopMargin(qint32);
65 Q_SLOT void setBottomMargin(qint32);
66
67 Q_SLOT void resetLeadingAction();
68 Q_SLOT void resetBackgroundRadius();
69 Q_SLOT void resetHeaderBackgroundOpacity();
70 Q_SLOT void resetRadius();
71 Q_SLOT void resetHeaderType();
72 Q_SLOT void resetShowHeader();
73 Q_SLOT void resetShowBackground();
74 Q_SLOT void resetLeftMargin();
75 Q_SLOT void resetRightMargin();
76 Q_SLOT void resetTopMargin();
77 Q_SLOT void resetBottomMargin();
78
79 Q_SIGNAL void inheritChanged();
80 Q_SIGNAL void leadingActionChanged();
81 Q_SIGNAL void backgroundRadiusChanged();
82 Q_SIGNAL void headerBackgroundOpacityChanged();
83 Q_SIGNAL void radiusChanged();
84 Q_SIGNAL void headerTypeChanged();
85 Q_SIGNAL void showHeaderChanged();
86 Q_SIGNAL void showBackgroundChanged();
87 Q_SIGNAL void leftMarginChanged();
88 Q_SIGNAL void rightMarginChanged();
89 Q_SIGNAL void topMarginChanged();
90 Q_SIGNAL void bottomMarginChanged();
91
92 Q_SIGNAL void pushItem(const QJSValue& url_or_comp, const QVariantMap& props = {});
93 Q_SIGNAL void pop();
94
95private:
96 void disconnectInherit();
97 void notifyInheritedProperties();
98
99 QPointer<PageContext> m_inherit;
100 QList<QMetaObject::Connection> m_inherit_connections;
101
102 std::optional<QObject*> m_leading_action;
103 std::optional<qint32> m_header_type;
104 std::optional<qint32> m_background_radius;
105 std::optional<double> m_header_background_opacity;
106 std::optional<qint32> m_radius;
107 std::optional<bool> m_show_header;
108 std::optional<bool> m_show_background;
109 std::optional<qint32> m_left_margin;
110 std::optional<qint32> m_right_margin;
111 std::optional<qint32> m_top_margin;
112 std::optional<qint32> m_bottom_margin;
113};
114} // namespace qml_material