QmlMaterial 0.1.0
Loading...
Searching...
No Matches
qml_util.hpp
1#pragma once
2#include <QObject>
3#include <QQmlEngine>
4#include <QColor>
5#include <QQuickItem>
6#include <QPointer>
7#include <QQuickWindow>
8
9#include "qml_material/util/corner.hpp"
10#include "qml_material/enum.hpp"
11#include "qml_material/token/token.hpp"
12#include "qml_material/core.hpp"
13
14namespace qml_material
15{
16
17class Util : public QObject {
18 Q_OBJECT
19 QML_ELEMENT
20 QML_SINGLETON
21public:
22 Util(QObject* parent = nullptr);
23 ~Util();
24
25 enum Track
26 {
27 TrackCreate = 0,
28 TrackDelete
29 };
30 Q_ENUMS(Track)
31
32 Q_INVOKABLE void track(QVariant, Track);
33
34 Q_INVOKABLE bool hasIcon(const QJSValue& v) {
35 auto name = v.property("name");
36 auto source = v.property("source");
37 if (name.isString() && source.toVariant().isValid()) {
38 return ! name.toString().isEmpty() || ! source.toString().isEmpty();
39 }
40 return false;
41 }
42
43 Q_INVOKABLE QColor transparent(QColor in, float alpha) {
44 in.setAlphaF(alpha);
45 return in;
46 }
47
48 Q_INVOKABLE void closePopup(QObject* obj) {
49 do {
50 auto meta = obj->metaObject();
51 do {
52 if (meta->className() == std::string("QQuickPopup")) {
53 QMetaObject::invokeMethod(obj, "close");
54 return;
55 }
56 } while (meta = meta->superClass(), meta);
57 } while (obj = obj->parent(), obj);
58 }
59
60 Q_INVOKABLE QColor hoverColor(QColor in) {
61 in.setAlphaF(0.08);
62 return in;
63 }
64
65 Q_INVOKABLE QColor pressColor(QColor in) {
66 in.setAlphaF(0.18);
67 return in;
68 }
69
70 Q_INVOKABLE qreal devicePixelRatio(QQuickItem* in) {
71 return in ? in->window() ? in->window()->devicePixelRatio() : 1.0 : 1.0;
72 }
73
74 // tl tr bl br
75 Q_INVOKABLE CornersGroup cornerArray(QVariant in);
76 Q_INVOKABLE CornersGroup corner(qreal in);
77 Q_INVOKABLE CornersGroup corner(qreal, qreal);
78 Q_INVOKABLE CornersGroup corner(qreal tl, qreal tr, qreal bl, qreal br);
79
80 QString type_str(const QJSValue&);
81 Q_INVOKABLE void print_parents(const QJSValue&);
82
83 Q_INVOKABLE qreal lightness(QColor color);
84
85 Q_INVOKABLE token::Elevation token_elevation();
86 Q_INVOKABLE token::Shape token_shape();
87 Q_INVOKABLE token::State token_state();
88 Q_INVOKABLE QObject* create_item(const QJSValue& url_or_comp, const QVariantMap& props,
89 QObject* parent = nullptr);
90
91 Q_INVOKABLE QObject* show_popup(const QJSValue& url_or_comp, const QVariantMap& props,
92 QObject* parent = nullptr, bool open_and_destry = true);
93
94 Q_INVOKABLE QString params_string(const QVariantMap& props);
95
96private:
97 Q_SLOT void on_popup_closed();
98
99private:
100 usize m_tracked { 0 };
101};
102} // namespace qml_material
103
104namespace qcm
105{
106auto qml_dyn_count() -> std::atomic<i32>&;
107auto create_item(QQmlEngine* engine, const QJSValue& url_or_comp, const QVariantMap& props,
108 QObject* parent) -> QObject*;
109} // namespace qcm