Mercurial > projects > qtd
comparison generator/cppimplgenerator.cpp @ 183:d3f4f14d43a5
fixes with QObjects
author | eldar |
---|---|
date | Fri, 03 Jul 2009 20:53:07 +0000 |
parents | ae06da58ec25 |
children | 7dd099050621 |
comparison
equal
deleted
inserted
replaced
182:973564c7e388 | 183:d3f4f14d43a5 |
---|---|
1319 | 1319 |
1320 void CppImplGenerator::writeQObjectLink(QTextStream &s, const AbstractMetaClass *java_class) | 1320 void CppImplGenerator::writeQObjectLink(QTextStream &s, const AbstractMetaClass *java_class) |
1321 { | 1321 { |
1322 QString linkName = java_class->name() + "_Link"; | 1322 QString linkName = java_class->name() + "_Link"; |
1323 QString className = java_class->name(); | 1323 QString className = java_class->name(); |
1324 | |
1325 if (cpp_shared) | |
1326 s << "extern \"C\" typedef void (*qtd_pf_D_" << java_class->name() << "_delete)(void *d_ptr);" << endl | |
1327 << "qtd_pf_D_" << java_class->name() << "_delete qtd_D_" << java_class->name() << "_delete;" << endl << endl; | |
1328 else | |
1329 s << "extern \"C\" void qtd_D_" << java_class->name() << "_delete(void *d_ptr);" << endl << endl; | |
1330 | |
1324 s << "class " << linkName << " : public QObject, public QObjectUserData" << endl | 1331 s << "class " << linkName << " : public QObject, public QObjectUserData" << endl |
1325 << "{" << endl | 1332 << "{" << endl |
1326 << "public:" << endl | 1333 << "public:" << endl |
1327 << " Q_OBJECT_CHECK" << endl | 1334 << " Q_OBJECT_CHECK" << endl |
1328 << " virtual int qt_metacall(QMetaObject::Call, int, void **);" << endl << endl | 1335 << " virtual int qt_metacall(QMetaObject::Call, int, void **);" << endl << endl |
1329 | 1336 |
1330 << " " << linkName << "(QObject *parent, void *d_ptr) : QObject() { _d_ptr = d_ptr; }" << endl | 1337 << " " << linkName << "(QObject *parent, void *d_ptr) : QObject() { _d_ptr = d_ptr; }" << endl |
1338 << " ~" << linkName << "() { qtd_D_" << className << "_delete(_d_ptr); }" << endl | |
1331 << " void *d_entity() const { return _d_ptr; }" << endl << endl | 1339 << " void *d_entity() const { return _d_ptr; }" << endl << endl |
1332 | 1340 |
1333 << "private:" << endl | 1341 << "private:" << endl |
1334 << " void *_d_ptr;" << endl | 1342 << " void *_d_ptr;" << endl |
1335 << "};" << endl << endl; | 1343 << "};" << endl << endl; |
1461 s << "}" << endl << endl; | 1469 s << "}" << endl << endl; |
1462 } | 1470 } |
1463 | 1471 |
1464 void CppImplGenerator::writeShellDestructor(QTextStream &s, const AbstractMetaClass *java_class) | 1472 void CppImplGenerator::writeShellDestructor(QTextStream &s, const AbstractMetaClass *java_class) |
1465 { | 1473 { |
1466 | |
1467 if (java_class->isQObject()) | |
1468 if (cpp_shared) | |
1469 s << "extern \"C\" typedef void (*qtd_pf_D_" << java_class->name() << "_delete)(void *d_ptr);" << endl | |
1470 << "qtd_pf_D_" << java_class->name() << "_delete qtd_D_" << java_class->name() << "_delete;" << endl << endl; | |
1471 else | |
1472 s << "extern \"C\" void qtd_D_" << java_class->name() << "_delete(void *d_ptr);" << endl << endl; | |
1473 | |
1474 s << shellClassName(java_class) << "::~" | 1474 s << shellClassName(java_class) << "::~" |
1475 << shellClassName(java_class) << "()" << endl | 1475 << shellClassName(java_class) << "()" << endl |
1476 << "{" << endl; | 1476 << "{" << endl; |
1477 { | 1477 { |
1478 /* qtd | |
1478 Indentation indent(INDENT); | 1479 Indentation indent(INDENT); |
1479 if (java_class->isQObject()) | 1480 |
1480 s << INDENT << "if (QObject::parent())" << endl | |
1481 << INDENT << " qtd_D_" << java_class->name() << "_delete(this->d_entity());" << endl; | |
1482 | |
1483 /* qtd | |
1484 s << "#ifdef QT_DEBUG" << endl | 1481 s << "#ifdef QT_DEBUG" << endl |
1485 << INDENT << "if (m_vtable)" << endl | 1482 << INDENT << "if (m_vtable)" << endl |
1486 << INDENT << " m_vtable->deref();" << endl | 1483 << INDENT << " m_vtable->deref();" << endl |
1487 << "#endif" << endl | 1484 << "#endif" << endl |
1488 << INDENT << "if (m_link) {" << endl; | 1485 << INDENT << "if (m_link) {" << endl; |