Mercurial > projects > qtd
changeset 303:98b211f3ee34 signals
fix for #19
author | eldar_ins@eldar-laptop |
---|---|
date | Sat, 12 Dec 2009 16:01:55 +0500 |
parents | 55ee4603365d |
children | 04b52676b45f |
files | generator/cppheadergenerator.cpp generator/cppimplgenerator.cpp generator/dgenerator.cpp generator/typesystem_core.xml include/qtd_core.h qt/qtd/MetaMarshall.d |
diffstat | 6 files changed, 29 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/generator/cppheadergenerator.cpp Sat Dec 12 03:22:54 2009 +0500 +++ b/generator/cppheadergenerator.cpp Sat Dec 12 16:01:55 2009 +0500 @@ -198,6 +198,7 @@ // << " QT_TR_FUNCTIONS" << end << " virtual int qt_metacall(QMetaObject::Call, int, void **);" << endl << " int __override_qt_metacall(QMetaObject::Call _c, int _id, void **_a);" << endl + << " virtual const QMetaObject *metaObject() const;" << endl << "private:" << endl; }
--- a/generator/cppimplgenerator.cpp Sat Dec 12 03:22:54 2009 +0500 +++ b/generator/cppimplgenerator.cpp Sat Dec 12 16:01:55 2009 +0500 @@ -506,8 +506,10 @@ } } // D-side signal callbacks - if (java_class->isQObject()) - s << " qtd_" << java_class->name() << "_qt_metacall_dispatch = (QtMetacallCallback)sigs[0];" << endl; + if (java_class->isQObject()) { + s << " qtd_" << java_class->name() << "_qt_metacall_dispatch = (QtMetacallCallback)sigs[0];" << endl + << " qtd_" << java_class->name() << "_metaObject_dispatch = (MetaObjectCallback)sigs[1];" << endl; + } s << "}" << endl; } @@ -1350,11 +1352,18 @@ */ if(cpp_shared) - s << "QtMetacallCallback qtd_" << java_class->name() << "_qt_metacall_dispatch;" << endl; + s << "MetaObjectCallback qtd_" << java_class->name() << "_metaObject_dispatch;" << endl + << "QtMetacallCallback qtd_" << java_class->name() << "_qt_metacall_dispatch;" << endl; else - s << "extern \"C\" int qtd_" << java_class->name() << "_qt_metacall_dispatch(void *d_entity, QMetaObject::Call _c, int _id, void **_a);" << endl << endl; - - s << "int " << shellClassName(java_class) << "::qt_metacall(QMetaObject::Call _c, int _id, void **_a)" << endl + s << "extern \"C\" const QMetaObject* qtd_" << java_class->name() << "_metaObject_dispatch(void *d_entity);" << endl + << "extern \"C\" int qtd_" << java_class->name() << "_qt_metacall_dispatch(void *d_entity, QMetaObject::Call _c, int _id, void **_a);" << endl; + + s << endl + << "const QMetaObject * " << shellClassName(java_class) << "::metaObject() const" << endl + << "{" << endl + << " return qtd_" << java_class->name() << "_metaObject_dispatch(this->dId);" << endl + << "}" << endl << endl + << "int " << shellClassName(java_class) << "::qt_metacall(QMetaObject::Call _c, int _id, void **_a)" << endl << "{" << endl << " return qtd_" << java_class->name() << "_qt_metacall_dispatch(this->dId, _c, _id, _a);" << endl << "}" << endl << endl
--- a/generator/dgenerator.cpp Sat Dec 12 03:22:54 2009 +0500 +++ b/generator/dgenerator.cpp Sat Dec 12 16:01:55 2009 +0500 @@ -2573,9 +2573,10 @@ initArgs = "virt_arr.ptr"; if (d_class->isQObject()) { - // qt_metacalls - s << endl << INDENT << "void*[1] sign_arr;" << endl; + // qt_metacall, metaObject + s << endl << INDENT << "void*[2] sign_arr;" << endl; s << INDENT << "sign_arr[0] = &qtd_" << d_class->name() << "_qt_metacall_dispatch;" << endl; + s << INDENT << "sign_arr[1] = &qtd_" << d_class->name() << "_metaObject_dispatch;" << endl; initArgs += ", sign_arr.ptr"; } @@ -2682,8 +2683,13 @@ << "private extern(C) int qtd_" << d_class->name() << "_qt_metacall_dispatch(void *d_entity, QMetaObject.Call _c, int _id, void **_a) {" << " auto d_object = cast(" << d_class->name() << ") d_entity;" << " return d_object.qt_metacall(_c, _id, _a);" + << "}" << endl << endl + + << "private extern(C) void* qtd_" << d_class->name() << "_metaObject_dispatch(void *d_entity) {" + << " auto d_object = cast(" << d_class->name() << ") d_entity;" + << " return d_object.metaObject().nativeId();" << "}" << endl << endl; -} + } void writeMetaMethodSignatures(QTextStream &s, const QString &var_name, AbstractMetaFunctionList meta_funcs) {
--- a/generator/typesystem_core.xml Sat Dec 12 03:22:54 2009 +0500 +++ b/generator/typesystem_core.xml Sat Dec 12 16:01:55 2009 +0500 @@ -559,7 +559,6 @@ <rejection class="QObject" function-name="disconnectNotify"/> <rejection class="QObject" function-name="registerUserData"/> <rejection class="QObject" function-name="sender"/> - <rejection class="QTimer" function-name="singleShot"/> <rejection class="QProcess" function-name="pid"/> <rejection class="QRegion" function-name="cleanUp"/> <rejection class="QSettings" function-name="registerFormat"/>
--- a/include/qtd_core.h Sat Dec 12 03:22:54 2009 +0500 +++ b/include/qtd_core.h Sat Dec 12 16:01:55 2009 +0500 @@ -83,6 +83,7 @@ extern "C" typedef void (*EmitCallback)(void*, void**); extern "C" typedef int (*QtMetacallCallback)(void *d_entity, QMetaObject::Call _c, int _id, void **_a); +extern "C" typedef const QMetaObject* (*MetaObjectCallback)(void *d_entity); template <class T> void call_destructor(T *a)
--- a/qt/qtd/MetaMarshall.d Sat Dec 12 03:22:54 2009 +0500 +++ b/qt/qtd/MetaMarshall.d Sat Dec 12 16:01:55 2009 +0500 @@ -58,7 +58,7 @@ // converts an argumnent from C++ to D in qt_metacall string metaCallArgument(T)(string ptr) { - static if (isQObjectType!T) + static if (isQObjectType!T || isObjectType!T) return T.stringof ~ ".__getObject(*cast(void**)(" ~ ptr ~ "))"; else static if (isNativeType!T) return "*(cast(" ~ T.stringof ~ "*)" ~ ptr ~ ")"; @@ -72,7 +72,7 @@ // converts a D argument type to C++ for registering in Qt meta system string qtDeclArg(T)() { - static if (isQObjectType!T) + static if (isQObjectType!T || isObjectType!T) return T.stringof ~ "*"; else static if (isStringType!T) return "QString"; @@ -85,7 +85,7 @@ // converts an argument from D to C++ in a signal emitter string convertSignalArgument(T)(string arg) { - static if (isQObjectType!T) + static if (isQObjectType!T || isObjectType!T) return arg ~ ".__nativeId"; else static if (isStringType!T) return "_qt" ~ arg;