7#include <QtCore/QObject>
8#include <QtCore/QTimer>
9#include <QtQml/QQmlEngine>
10#include <QtGui/QColor>
12#include "qml_material/core/attached_property.hpp"
13#include "qml_material/token/color.hpp"
14#include "qml_material/control/page_context.hpp"
16#define ATTACH_PROPERTY(Type, Name) \
18 Q_PROPERTY(Type Name READ Name WRITE set_##Name RESET reset_##Name NOTIFY Name##Changed FINAL) \
21 void set_##Name(Type); \
22 void reset_##Name(); \
23 AttachProp<Type>& get_##Name(); \
24 Q_SIGNAL void Name##Changed(); \
27 AttachProp<Type> m_##Name { &Self::Name##Changed };
32class ThemeSize :
public QObject {
36 ThemeSize(QObject* parent =
nullptr);
39 qint32 windowClass READ windowClass WRITE setWindowClass NOTIFY windowClassChanged FINAL)
40 Q_PROPERTY(
bool isCompact READ isCompact NOTIFY windowClassChanged FINAL)
41 Q_PROPERTY(
bool isMedium READ isMedium NOTIFY windowClassChanged FINAL)
42 Q_PROPERTY(
bool isExpanded READ isExpanded NOTIFY windowClassChanged FINAL)
43 Q_PROPERTY(
bool isLarge READ isLarge NOTIFY windowClassChanged FINAL)
44 Q_PROPERTY(
bool isExtraLarge READ isExtraLarge NOTIFY windowClassChanged FINAL)
46 Q_PROPERTY(qint32 duration READ duration WRITE setDuration NOTIFY durationChanged FINAL)
47 Q_PROPERTY(qint32 width READ width WRITE setWidth NOTIFY widthChanged FINAL)
49 auto isCompact() const ->
bool;
50 auto isMedium() const ->
bool;
51 auto isExpanded() const ->
bool;
52 auto isLarge() const ->
bool;
53 auto isExtraLarge() const ->
bool;
55 auto width() const -> qint32;
56 void setWidth(qint32 w);
57 Q_SIGNAL
void widthChanged(qint32);
59 auto duration() const -> qint32;
60 void setDuration(qint32 w);
61 Q_SIGNAL
void durationChanged(qint32);
63 auto windowClass() const -> qint32;
64 void setWindowClass(qint32);
65 Q_SIGNAL
void windowClassChanged(qint32);
67 Q_PROPERTY(qint32 verticalPadding READ verticalPadding NOTIFY verticalPaddingChanged FINAL)
68 auto verticalPadding() const -> qint32;
69 Q_SIGNAL
void verticalPaddingChanged();
72 qint32 m_window_class;
78class QML_MATERIAL_API Theme final : public AttachedPropertyNode {
81 QML_NAMED_ELEMENT(MProp)
90 using SigFunc = void (Theme::*)();
91 using ReadFunc = V (Theme::*
const)();
92 using WriteFunc = void (Theme::*)(V);
93 using GetFunc = AttachProp<V>& (Theme::*
const)();
95 std::optional<V> value;
99 AttachProp(SigFunc s): value(), explicited(false), sig_func(s) {}
102 Q_PROPERTY(QColor textColor READ textColor WRITE set_textColor RESET reset_textColor NOTIFY
103 textColorChanged BINDABLE bindableTextColor FINAL)
104 Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE set_backgroundColor RESET
105 reset_backgroundColor NOTIFY backgroundColorChanged BINDABLE
106 bindableBackgroundColor FINAL)
107 QColor textColor()
const;
108 void set_textColor(QColor);
109 void reset_textColor();
110 QBindable<QColor> bindableTextColor() {
return QBindable<QColor>(&m_textColor); }
111 QColor backgroundColor()
const;
112 void set_backgroundColor(QColor);
113 void reset_backgroundColor();
114 QBindable<QColor> bindableBackgroundColor() {
return QBindable<QColor>(&m_backgroundColor); }
115 Q_SIGNAL
void textColorChanged();
116 Q_SIGNAL
void backgroundColorChanged();
117 ATTACH_PROPERTY(
int, elevation)
120 colorChanged BINDABLE bindableColor FINAL)
121 MdColorMgr* color()
const;
122 void set_color(MdColorMgr*);
124 QBindable<MdColorMgr*> bindableColor() {
return QBindable<MdColorMgr*>(&m_color); }
125 Q_SIGNAL
void colorChanged();
129 QProperty<Theme*> m_colorParent {
nullptr };
130 QMetaObject::Connection m_colorParentDestroyed;
131 QMetaObject::Connection m_colorDestroyed;
132 Q_OBJECT_BINDABLE_PROPERTY(Theme, MdColorMgr*, m_color, &Theme::colorChange)
133 Q_OBJECT_BINDABLE_PROPERTY(Theme, QColor, m_textColor, &Theme::textColorChanged)
134 Q_OBJECT_BINDABLE_PROPERTY(Theme, QColor, m_backgroundColor, &Theme::backgroundColorChanged)
135 ATTACH_PROPERTY(qml_material::ThemeSize*, size)
136 ATTACH_PROPERTY(qml_material::PageContext*, page)
139 Theme(QObject* parent);
142 static Theme* qmlAttachedProperties(QObject*
object);
145 void updateInheritedValues()
override;
149 void setProp(AttachProp<V>& property,
const V& value);
152 void resetProp(AttachProp<V>& property,
const V& inheritedValue);
155 bool inheritProp(AttachProp<V>& property,
const V& value);
159#undef ATTACH_PROPERTY
Material Design Color Manager class.
Definition color.hpp:20