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;