QmlMaterial 0.1.0
Loading...
Searching...
No Matches
application_window.hpp
1#pragma once
2
3#include "qml_material/control/page.hpp"
4#include "qml_material/token/type_scale.hpp"
5#include <QProperty>
6
7#include <QQmlListProperty>
8#include <QtQuick/private/qquickwindowmodule_p.h>
9
10namespace qml_material
11{
12
13class QML_MATERIAL_API ApplicationWindow : public QQuickWindowQmlImpl {
14 Q_OBJECT
15 QML_NAMED_ELEMENT(ApplicationWindow)
16 Q_CLASSINFO("DefaultProperty", "contentData")
17 Q_PROPERTY(QQuickItem* contentItem READ contentItem CONSTANT FINAL)
18 Q_PROPERTY(QQmlListProperty<QObject> contentData READ contentData FINAL)
19 Q_PROPERTY(
20 QQuickItem* background READ background WRITE setBackground NOTIFY backgroundChanged FINAL)
21 Q_PROPERTY(QQuickItem* menuBar READ menuBar WRITE setMenuBar NOTIFY menuBarChanged FINAL)
22 Q_PROPERTY(QQuickItem* header READ header WRITE setHeader NOTIFY headerChanged FINAL)
23 Q_PROPERTY(QQuickItem* footer READ footer WRITE setFooter NOTIFY footerChanged FINAL)
24 Q_PROPERTY(QQuickItem* activeFocusControl READ activeFocusControl NOTIFY
25 activeFocusControlChanged FINAL)
26 Q_PROPERTY(QFont font READ font WRITE setFont RESET resetFont NOTIFY fontChanged FINAL)
27 Q_PROPERTY(qml_material::token::TypeScaleItem typescale READ typescale WRITE setTypescale NOTIFY
28 typescaleChanged BINDABLE bindableTypescale FINAL)
29 Q_PROPERTY(
30 QLocale locale READ locale WRITE setLocale RESET resetLocale NOTIFY localeChanged FINAL)
31 Q_PROPERTY(qreal topPadding READ topPadding WRITE setTopPadding RESET resetTopPadding NOTIFY
32 topPaddingChanged FINAL)
33 Q_PROPERTY(qreal leftPadding READ leftPadding WRITE setLeftPadding RESET resetLeftPadding NOTIFY
34 leftPaddingChanged FINAL)
35 Q_PROPERTY(qreal rightPadding READ rightPadding WRITE setRightPadding RESET resetRightPadding
36 NOTIFY rightPaddingChanged FINAL)
37 Q_PROPERTY(qreal bottomPadding READ bottomPadding WRITE setBottomPadding RESET
38 resetBottomPadding NOTIFY bottomPaddingChanged FINAL)
39 Q_PROPERTY(Page* frameItem READ frameItem CONSTANT FINAL)
40 Q_PROPERTY(Page* bodyItem READ bodyItem CONSTANT FINAL)
41public:
42 explicit ApplicationWindow(QWindow* parent = nullptr);
43
44 QQuickItem* contentItem() const;
45 QQmlListProperty<QObject> contentData();
46
47 QQuickItem* background() const;
48 void setBackground(QQuickItem* item);
49 QQuickItem* menuBar() const;
50 void setMenuBar(QQuickItem* item);
51 QQuickItem* header() const;
52 void setHeader(QQuickItem* item);
53 QQuickItem* footer() const;
54 void setFooter(QQuickItem* item);
55
56 QQuickItem* activeFocusControl() const;
57
58 QFont font() const;
59 void setFont(const QFont& font);
60 void resetFont();
61 token::TypeScaleItem typescale() const { return m_typescale.value(); }
62 void setTypescale(const token::TypeScaleItem& value) { m_typescale = value; }
63 QBindable<token::TypeScaleItem> bindableTypescale() {
64 return QBindable<token::TypeScaleItem>(&m_typescale);
65 }
66
67 QLocale locale() const;
68 void setLocale(const QLocale& locale);
69 void resetLocale();
70
71 qreal topPadding() const;
72 void setTopPadding(qreal value);
73 void resetTopPadding();
74 qreal leftPadding() const;
75 void setLeftPadding(qreal value);
76 void resetLeftPadding();
77 qreal rightPadding() const;
78 void setRightPadding(qreal value);
79 void resetRightPadding();
80 qreal bottomPadding() const;
81 void setBottomPadding(qreal value);
82 void resetBottomPadding();
83
84 Page* frameItem() const { return m_frame; }
85 Page* bodyItem() const { return m_body; }
86
87 Q_SIGNAL void backgroundChanged();
88 Q_SIGNAL void menuBarChanged();
89 Q_SIGNAL void headerChanged();
90 Q_SIGNAL void footerChanged();
91 Q_SIGNAL void activeFocusControlChanged();
92 Q_SIGNAL void fontChanged();
93 Q_SIGNAL void typescaleChanged();
94 Q_SIGNAL void localeChanged();
95 Q_SIGNAL void topPaddingChanged();
96 Q_SIGNAL void leftPaddingChanged();
97 Q_SIGNAL void rightPaddingChanged();
98 Q_SIGNAL void bottomPaddingChanged();
99
100protected:
101 void classBegin() override;
102
103private:
104 void relayout();
105 void updateActiveFocusControl();
106
107 Page* m_frame { nullptr };
108 Page* m_body { nullptr };
109 QPointer<QQuickItem> m_activeFocusControl;
110 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(ApplicationWindow, token::TypeScaleItem, m_typescale,
111 token::TypeScale::default_body_medium,
112 &ApplicationWindow::typescaleChanged)
113};
114
115} // namespace qml_material