24#include "customtyperegistry_p.h"
25#include "metaenumvariable_p.h"
27#include <QtCore/QDebug>
29#include <QAssociativeIterable>
32#include <QJsonDocument>
33#include <QSequentialIterable>
37Q_GLOBAL_STATIC(CustomTypeRegistry, customTypes)
39void Cutelee::MetaType::internalLock() {
return customTypes()->mutex.lock(); }
41void Cutelee::MetaType::internalUnlock()
43 return customTypes()->mutex.unlock();
46void Cutelee::MetaType::registerLookUpOperator(
int id, LookupFunction f)
51 customTypes()->registerLookupOperator(
id, f);
59 if (property == QStringLiteral(
"children")) {
60 const auto childList =
object->children();
61 if (childList.isEmpty())
63 QVariantList children;
65 auto it = childList.constBegin();
66 const auto end = childList.constEnd();
67 for (; it != end; ++it)
72 if (property == QStringLiteral(
"objectName")) {
73 return object->objectName();
76 auto metaObj =
object->metaObject();
79 for (
auto i = 0; i < metaObj->propertyCount(); ++i) {
82 mp = metaObj->property(i);
92 return mp.
read(
object);
95 for (
auto i = 0; i < metaObj->enumeratorCount(); ++i) {
96 me = metaObj->enumerator(i);
99 MetaEnumVariable mev(me);
108 const MetaEnumVariable mev(me, value);
123 const int listIndex =
property.
toInt(&ok);
124 if (!ok || listIndex >= list.
size()) {
140 list.reserve(obj.
size());
142 list.push_back(QVariantList{it.key(), it.value().toVariant()});
153 list.reserve(obj.
size());
155 list.push_back(it.value().toVariant());
166 if (
object.canConvert<QObject *>()) {
167 return doQobjectLookUp(
object.value<QObject *>(), property);
170 const auto doc =
object.toJsonDocument();
171 if (doc.isObject()) {
172 return doJsonObjectLookUp(doc.object(), property);
175 return doJsonArrayLookUp(doc.array(), property);
180 const auto val =
object.toJsonValue();
182 switch (val.type()) {
186 return val.toDouble();
188 return val.toString();
190 return doJsonArrayLookUp(val.toArray(), property);
192 return doJsonObjectLookUp(val.toObject(), property);
198 return doJsonArrayLookUp(
object.toJsonArray(), property);
201 return doJsonObjectLookUp(
object.toJsonObject(), property);
203 if (
object.canConvert<QVariantList>()) {
205 if (property == QStringLiteral(
"size")
206 || property == QStringLiteral(
"count")) {
211 const auto listIndex =
property.toInt(&ok);
213 if (!ok || listIndex >= iter.size()) {
217 return iter.
at(listIndex);
219 if (
object.canConvert<QVariantHash>()) {
223 auto mappedValue = iter.
value(property);
224 if (mappedValue.isValid())
227 if (property == QStringLiteral(
"size")
228 || property == QStringLiteral(
"count")) {
232 if (property == QStringLiteral(
"items")) {
233 auto it = iter.begin();
234 const auto end = iter.end();
236 for (; it != end; ++it) {
237 list.push_back(QVariantList{it.key(), it.value()});
242 if (property == QStringLiteral(
"keys")) {
243 auto it = iter.begin();
244 const auto end = iter.end();
246 for (; it != end; ++it) {
247 list.push_back(it.key());
252 if (property == QStringLiteral(
"values")) {
253 auto it = iter.begin();
254 const auto end = iter.end();
256 for (; it != end; ++it) {
257 list.push_back(it.value());
264#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
274 const auto mp = mo->property(idx);
283 for (
auto i = 0; i < mo->enumeratorCount(); ++i) {
284 me = mo->enumerator(i);
287 MetaEnumVariable mev(me);
297 MetaEnumVariable mev(me, value);
303 return customTypes()->lookup(
object, property);
306bool Cutelee::MetaType::lookupAlreadyRegistered(
int id)
308 return customTypes()->lookupAlreadyRegistered(
id);
The Cutelee namespace holds all public Cutelee API.
QVariant value(const QVariant &key) const const
const char * constData() const const
QJsonValue at(qsizetype i) const const
qsizetype size() const const
QJsonObject::const_iterator constBegin() const const
QJsonObject::const_iterator constEnd() const const
QStringList keys() const const
qsizetype size() const const
QJsonValue value(QLatin1StringView key) const const
QVariant toVariant() const const
QVariant at(qsizetype idx) const const
QString fromUtf8(QByteArrayView str)
QByteArray toLatin1() const const
QByteArray toUtf8() const const
QVariant fromValue(T &&value)
int toInt(bool *ok) const const