24 #include "customtyperegistry_p.h" 25 #include "metaenumvariable_p.h" 27 #include <QtCore/QDebug> 29 #include <QAssociativeIterable> 31 #include <QJsonObject> 32 #include <QJsonDocument> 33 #include <QSequentialIterable> 37 Q_GLOBAL_STATIC(CustomTypeRegistry, customTypes)
39 void Cutelee::MetaType::internalLock() {
return customTypes()->mutex.lock(); }
41 void Cutelee::MetaType::internalUnlock()
43 return customTypes()->mutex.unlock();
46 void 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()});
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>() ||
220 object.canConvert<QVariantMap>()) {
224 if (property == QStringLiteral(
"size")
225 ||
property == QStringLiteral(
"count")) {
229 if (property == QStringLiteral(
"items")) {
230 auto it = iter.begin();
231 const auto end = iter.end();
233 for (; it != end; ++it) {
234 list.push_back(QVariantList{it.key(), it.value()});
239 if (property == QStringLiteral(
"keys")) {
240 auto it = iter.begin();
241 const auto end = iter.end();
243 for (; it != end; ++it) {
244 list.push_back(it.key());
249 if (property == QStringLiteral(
"values")) {
250 auto it = iter.begin();
251 const auto end = iter.end();
253 for (; it != end; ++it) {
254 list.push_back(it.value());
259 auto mappedValue = iter.value(property);
260 if (mappedValue.isValid())
271 const auto mp = mo->property(idx);
280 for (
auto i = 0; i < mo->enumeratorCount(); ++i) {
281 me = mo->enumerator(i);
284 MetaEnumVariable mev(me);
294 MetaEnumVariable mev(me, value);
300 return customTypes()->lookup(
object, property);
303 bool Cutelee::MetaType::lookupAlreadyRegistered(
int id)
305 return customTypes()->lookupAlreadyRegistered(
id);
QStringList keys() const const
qsizetype size() const const
The Cutelee namespace holds all public Cutelee API.
const_iterator constEnd() const const
void reserve(qsizetype size)
QVariant fromValue(T &&value)
qsizetype size() const const
QString fromUtf8(QByteArrayView str)
qsizetype size() const const
const_iterator constBegin() const const
QJsonValue at(qsizetype i) const const
const char * constData() const const
QVariant toVariant() const const
QJsonValue value(QLatin1StringView key) const const
void push_back(const QJsonValue &value)
QByteArray toLatin1() const const
QByteArray toUtf8() const const