diff --git a/lib/include/DOtherSide/DOtherSide.h b/lib/include/DOtherSide/DOtherSide.h index 4751b79..0e19948 100644 --- a/lib/include/DOtherSide/DOtherSide.h +++ b/lib/include/DOtherSide/DOtherSide.h @@ -35,6 +35,7 @@ DOS_API void dos_qqmlapplicationengine_load(void* vptr, const char* filename); DOS_API void dos_qqmlapplicationengine_load_url(void* vptr, void* url); DOS_API void dos_qqmlapplicationengine_add_import_path(void* vptr, const char* path); DOS_API void dos_qqmlapplicationengine_context(void* vptr, void** context); +DOS_API void dos_qqmlapplicationengine_rootObjects(void* vptr, void*** array, int* array_length); DOS_API void dos_qqmlapplicationengine_delete(void* vptr); // QQuickView @@ -104,6 +105,8 @@ DOS_API void dos_qobject_property_create(void* vptr, const char* readSlot, const char* writeSlot, const char* notifySignal); +DOS_API void dos_qobject_objectName(void* vptr, char** result); +DOS_API void dos_qobject_findChild(void* vptr, const char* name, int options, void** child); DOS_API void dos_qobject_delete(void* vptr); // QModelIndex diff --git a/lib/src/DOtherSide.cpp b/lib/src/DOtherSide.cpp index f044098..542c04f 100644 --- a/lib/src/DOtherSide.cpp +++ b/lib/src/DOtherSide.cpp @@ -106,6 +106,20 @@ void dos_qqmlapplicationengine_context(void* vptr, void** context) *context = engine->rootContext(); } +void dos_qqmlapplicationengine_rootObjects(void* vptr, void*** array, int* array_length) +{ + QQmlApplicationEngine* engine = reinterpret_cast(vptr); + auto list = engine->rootObjects(); + // Note: On fringe architectures where `8 < CHAR_BIT` this may not allocate enough memory, + // as sizeof returns the number of chars required, while calloc/malloc expects + // the number of octets required. + QObject** objects = reinterpret_cast(calloc(list.length(), sizeof(QObject*))); + if (objects == NULL) return; + for (int i = 0; i < list.length(); i += 1) objects[i] = list.at(i); + *array = reinterpret_cast(objects); + *array_length = list.length(); +} + void dos_qqmlapplicationengine_delete(void* vptr) { QQmlApplicationEngine* engine = reinterpret_cast(vptr); @@ -401,6 +415,18 @@ void dos_qobject_property_create(void* vptr, QString(notifySignal)); } +void dos_qobject_objectName(void* vptr, char** result) +{ + QObject* object = reinterpret_cast(vptr); + convert_to_cstring(object->objectName(), result); +} + +void dos_qobject_findChild(void* vptr, const char* name, int options, void** child) +{ + QObject* object = reinterpret_cast(vptr); + *child = object->findChild(QString::fromUtf8(name), (Qt::FindChildOptions) options); +} + void dos_qmodelindex_create(void** vptr) { auto index = new QModelIndex();