From 7fcd1003ca9dafc2ae8c3a4f5b1bac0de2586957 Mon Sep 17 00:00:00 2001 From: Moritz Maxeiner Date: Wed, 23 Dec 2015 19:46:21 +0100 Subject: [PATCH] Implement functionality to receive signals - Bind QObject::connect - Bind QObject::disconnect - Add conversion to get a QObject from inside a (received) QVariant --- lib/include/DOtherSide/DOtherSide.h | 12 ++++++++++ lib/src/DOtherSide.cpp | 36 +++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/lib/include/DOtherSide/DOtherSide.h b/lib/include/DOtherSide/DOtherSide.h index eebf995..8a75e63 100644 --- a/lib/include/DOtherSide/DOtherSide.h +++ b/lib/include/DOtherSide/DOtherSide.h @@ -72,6 +72,7 @@ DOS_API void dos_qvariant_toDouble(void* vptr, double* result); DOS_API void dos_qvariant_setDouble(void* vptr, double value); DOS_API void dos_qvariant_toString(void* vptr, char** result); DOS_API void dos_qvariant_setString(void* vptr, const char* value); +DOS_API void dos_qvariant_toQObject(void* vptr, void** value); DOS_API void dos_qvariant_setQObject(void* vptr, void* value); DOS_API void dos_qvariant_setQAbstractListModel(void* vptr, void* value); DOS_API void dos_qvariant_isnull(void* vptr, bool* result); @@ -96,6 +97,17 @@ DOS_API void dos_qobject_signal_emit(void* vptr, const char* name, int parametersCount, void** parameters); +DOS_API void dos_qobject_signal_connect(void* senderVPtr, + const char* signal, + void* receiverVPtr, + const char* method, + int type, + bool* result); +DOS_API void dos_qobject_signal_disconnect(void* senderVPtr, + const char* signal, + void* receiverVPtr, + const char* method, + bool* result); DOS_API void dos_qobject_property_create(void* vptr, const char* name, int propertyMetaType, diff --git a/lib/src/DOtherSide.cpp b/lib/src/DOtherSide.cpp index f4db538..09469d7 100644 --- a/lib/src/DOtherSide.cpp +++ b/lib/src/DOtherSide.cpp @@ -270,6 +270,12 @@ void dos_qvariant_toString(void* vptr, char** ptr) convert_to_cstring(variant->toString(), ptr); } +void dos_qvariant_toQObject(void* vptr, void** value) +{ + auto variant = reinterpret_cast(vptr); + *value = variant->value(); +} + void dos_qvariant_setInt(void* vptr, int value) { auto variant = reinterpret_cast(vptr); @@ -372,6 +378,36 @@ void dos_qobject_signal_emit(void* vptr, const char* name, int parametersCount, dynamicQObject->emitSignal(QString::fromStdString(name), arguments); } +void dos_qobject_signal_connect(void* senderVPtr, + const char* signal, + void* receiverVPtr, + const char* method, + int type, + bool* result) +{ + auto sender = reinterpret_cast(senderVPtr); + auto receiver = reinterpret_cast(receiverVPtr); + *result = QObject::connect(sender, + signal, + receiver, + method, + (Qt::ConnectionType) type); +} + +void dos_qobject_signal_disconnect(void* senderVPtr, + const char* signal, + void* receiverVPtr, + const char* method, + bool* result) +{ + auto sender = reinterpret_cast(senderVPtr); + auto receiver = reinterpret_cast(receiverVPtr); + *result = QObject::disconnect(sender, + signal, + receiver, + method); +} + void dos_qobject_property_create(void* vptr, const char* name, int type,