comparison generator/cppimplgenerator.cpp @ 288:f9559a957be9 signals

new signals and slots implementation
author eldar
date Sun, 08 Nov 2009 19:28:01 +0000
parents 7243f9ed2307
children 19498f420252
comparison
equal deleted inserted replaced
287:b6984b290e46 288:f9559a957be9
590 590
591 if (hasCustomDestructor(java_class)) */ 591 if (hasCustomDestructor(java_class)) */
592 if (!java_class->isQObject()) 592 if (!java_class->isQObject())
593 writeFinalDestructor(s, java_class); 593 writeFinalDestructor(s, java_class);
594 594
595 if (java_class->isQObject()) 595 if (java_class->isQObject()) {
596 writeQObjectEntity(s, java_class);
596 writeSignalsHandling(s, java_class); 597 writeSignalsHandling(s, java_class);
597 598 }
598 if (shellClass) { 599 if (shellClass) {
599 foreach (AbstractMetaFunction *function, java_class->functions()) { 600 foreach (AbstractMetaFunction *function, java_class->functions()) {
600 if (function->isConstructor() && !function->isPrivate()) 601 if (function->isConstructor() && !function->isPrivate())
601 writeShellConstructor(s, function); 602 writeShellConstructor(s, function);
602 } 603 }
1215 1216
1216 s << "class " << entityName << " : public QObject, public QtD_QObjectEntity" << endl 1217 s << "class " << entityName << " : public QObject, public QtD_QObjectEntity" << endl
1217 << "{" << endl 1218 << "{" << endl
1218 << "public:" << endl 1219 << "public:" << endl
1219 << " Q_OBJECT_CHECK" << endl 1220 << " Q_OBJECT_CHECK" << endl
1220 << " virtual int qt_metacall(QMetaObject::Call, int, void **);" << endl << endl 1221 << "// virtual int qt_metacall(QMetaObject::Call, int, void **);" << endl << endl
1221 1222
1222 << " " << entityName << "(QObject *qObject, void *dId) : QObject(), QtD_QObjectEntity(qObject, dId) {}" << endl 1223 << " " << entityName << "(QObject *qObject, void *dId) : QObject(), QtD_QObjectEntity(qObject, dId) {}" << endl
1223 << "};" << endl << endl; 1224 << "};" << endl << endl;
1224 1225
1225 // QObject_Link::qt_metacall() 1226 /* // QObject_Link::qt_metacall()
1226 s << "int " << entityName << "::qt_metacall(QMetaObject::Call _c, int _id, void **_a)" << endl 1227 s << "int " << entityName << "::qt_metacall(QMetaObject::Call _c, int _id, void **_a)" << endl
1227 << "{" << endl 1228 << "{" << endl
1228 << " _id = QObject::qt_metacall(_c, _id, _a);" << endl 1229 << " _id = QObject::qt_metacall(_c, _id, _a);" << endl
1229 << " if (_id < 0 || _c != QMetaObject::InvokeMetaMethod)" << endl 1230 << " if (_id < 0 || _c != QMetaObject::InvokeMetaMethod)" << endl
1230 << " return _id;" << endl 1231 << " return _id;" << endl
1231 // << " Q_ASSERT(_id < 2);" << endl
1232 << " emit_callbacks_" << java_class->name() << "[_id](dId, _a);" << endl 1232 << " emit_callbacks_" << java_class->name() << "[_id](dId, _a);" << endl
1233 << " return -1;" << endl 1233 << " return -1;" << endl
1234 << "}" << endl << endl; 1234 << "}" << endl << endl;
1235 1235 */
1236 s << "extern \"C\" DLL_PUBLIC void qtd_" << className << "_createEntity(void *nativeId, void* dId)" << endl 1236 s << "extern \"C\" DLL_PUBLIC void qtd_" << className << "_createEntity(void *nativeId, void* dId)" << endl
1237 << "{" << endl 1237 << "{" << endl
1238 << " new " << entityName << "((QObject*)nativeId, dId);" << endl 1238 << " new " << entityName << "((QObject*)nativeId, dId);" << endl
1239 << "}" << endl << endl; 1239 << "}" << endl << endl;
1240 } 1240 }
1280 << " if (!strcmp(_clname, \"" << shellClassName(java_class) << "\"))" << endl 1280 << " if (!strcmp(_clname, \"" << shellClassName(java_class) << "\"))" << endl
1281 << " return static_cast<void*>(const_cast<" << shellClassName(java_class) << "*>(this));" << endl 1281 << " return static_cast<void*>(const_cast<" << shellClassName(java_class) << "*>(this));" << endl
1282 << " return " << java_class->qualifiedCppName() << "::qt_metacast(_clname);" << endl 1282 << " return " << java_class->qualifiedCppName() << "::qt_metacast(_clname);" << endl
1283 << "}" << endl << endl; 1283 << "}" << endl << endl;
1284 */ 1284 */
1285 1285 /*
1286 s << "int " << shellClassName(java_class) << "::qt_metacall(QMetaObject::Call _c, int _id, void **_a)" << endl 1286 s << "int " << shellClassName(java_class) << "::qt_metacall(QMetaObject::Call _c, int _id, void **_a)" << endl
1287 << "{" << endl; 1287 << "{" << endl
1288 1288 << " _id = " << java_class->qualifiedCppName() << "::qt_metacall(_c, _id, _a);" << endl
1289 s << " _id = " << java_class->qualifiedCppName() << "::qt_metacall(_c, _id, _a);" << endl
1290 << " if (_id < 0 || _c != QMetaObject::InvokeMetaMethod)" << endl 1289 << " if (_id < 0 || _c != QMetaObject::InvokeMetaMethod)" << endl
1291 << " return _id;" << endl 1290 << " return _id;" << endl
1292 << " emit_callbacks_" << java_class->name() << "[_id](this->dId, _a);" << endl 1291 << " emit_callbacks_" << java_class->name() << "[_id](this->dId, _a);" << endl
1293 << " return -1;" << endl 1292 << " return -1;" << endl
1293 << "}" << endl << endl;
1294 */
1295
1296 s << "extern \"C\" int qtd_" << java_class->name() << "_qt_metacall_dispatch(void *d_entity, QMetaObject::Call _c, int _id, void **_a);" << endl << endl
1297
1298 << "int " << shellClassName(java_class) << "::qt_metacall(QMetaObject::Call _c, int _id, void **_a)" << endl
1299 << "{" << endl
1300 << " return qtd_" << java_class->name() << "_qt_metacall_dispatch(this->dId, _c, _id, _a);" << endl
1301 << "}" << endl << endl
1302
1303 << "int " << shellClassName(java_class) << "::__override_qt_metacall(QMetaObject::Call _c, int _id, void **_a)" << endl
1304 << "{" << endl
1305 << " return " << java_class->qualifiedCppName() << "::qt_metacall(_c, _id, _a);"
1306 << "}" << endl << endl
1307
1308 << "extern \"C\" DLL_PUBLIC int qtd_" << java_class->name() << "_qt_metacall(void* __this_nativeId, QMetaObject::Call _c, int _id, void **_a)"
1309 << "{" << endl
1310 << " " << shellClassName(java_class) << " *__qt_this = (" << shellClassName(java_class) << " *) __this_nativeId;" << endl
1311 << " return __qt_this->__override_qt_metacall(_c, _id, _a);" << endl
1294 << "}" << endl << endl; 1312 << "}" << endl << endl;
1295 } 1313 }
1296 1314
1297 void CppImplGenerator::writeSignalEmitter(QTextStream &s, const AbstractMetaClass *d_class, AbstractMetaFunction *function) 1315 void CppImplGenerator::writeSignalEmitter(QTextStream &s, const AbstractMetaClass *d_class, AbstractMetaFunction *function)
1298 { 1316 {
1339 s << endl << endl; 1357 s << endl << endl;
1340 } 1358 }
1341 1359
1342 void CppImplGenerator::writeSignalsHandling(QTextStream &s, const AbstractMetaClass *java_class) 1360 void CppImplGenerator::writeSignalsHandling(QTextStream &s, const AbstractMetaClass *java_class)
1343 { 1361 {
1362 return; // #TODO probably don't need this function at all
1363
1344 s << "extern \"C\" typedef void (*EmitCallback)(void*, void**);" << endl; 1364 s << "extern \"C\" typedef void (*EmitCallback)(void*, void**);" << endl;
1345 AbstractMetaFunctionList signal_funcs = signalFunctions(java_class); 1365 AbstractMetaFunctionList signal_funcs = signalFunctions(java_class);
1346 1366
1347 if (cpp_shared) 1367 if (cpp_shared)
1348 if(signal_funcs.size() > 0) 1368 if(signal_funcs.size() > 0)
1367 s << ", "; 1387 s << ", ";
1368 s << "&" << signalExternName(java_class, signal) << "_handle"; 1388 s << "&" << signalExternName(java_class, signal) << "_handle";
1369 } 1389 }
1370 s << endl << "};" << endl << endl; 1390 s << endl << "};" << endl << endl;
1371 } 1391 }
1372
1373 writeQObjectEntity(s, java_class);
1374 } 1392 }
1375 1393
1376 1394
1377 void CppImplGenerator::writeShellConstructor(QTextStream &s, const AbstractMetaFunction *java_function) 1395 void CppImplGenerator::writeShellConstructor(QTextStream &s, const AbstractMetaFunction *java_function)
1378 { 1396 {