From 2b677ef0eb94f15b257f7a6ccf7e9447c32d36b9 Mon Sep 17 00:00:00 2001 From: Hugo Parente Lima Date: Fri, 28 Oct 2011 17:23:56 -0200 Subject: Create qflags at runtime. Reviewer: Luciano Wolf Marcelo Lira --- generator/cppgenerator.cpp | 71 ++++------------------------------------------ generator/cppgenerator.h | 1 - 2 files changed, 5 insertions(+), 67 deletions(-) diff --git a/generator/cppgenerator.cpp b/generator/cppgenerator.cpp index 59e86510a..d49fc482e 100644 --- a/generator/cppgenerator.cpp +++ b/generator/cppgenerator.cpp @@ -523,12 +523,6 @@ void CppGenerator::generateClass(QTextStream &s, const AbstractMetaClass *metaCl writeFlagsNumberMethodsDefinition(s, cppEnum); s << endl; } - - if (hasFlags) { - // Write Enum as Flags definition (at the moment used only by QFlags) - writeFlagsDefinition(s, cppEnum); - s << endl; - } } s << endl; @@ -3167,8 +3161,11 @@ void CppGenerator::writeEnumInitialization(QTextStream& s, const AbstractMetaEnu if (!cppEnum->isAnonymous()) { FlagsTypeEntry* flags = cppEnum->typeEntry()->flags(); - if (flags) - s << INDENT << cpythonTypeNameExt(flags) << " = &" << cpythonTypeName(flags) << ';' << endl; + if (flags) { + s << INDENT << cpythonTypeNameExt(flags) << " = PySide::QFlags::create(\"" << flags->flagsName() << "\", &" + << cpythonEnumName(cppEnum) << "_as_number);" << endl; + } + s << INDENT << cpythonTypeNameExt(cppEnum->typeEntry()) << " = Shiboken::Enum::"; s << ((enclosingClass || hasUpperEnclosingClass) ? "createScopedEnum" : "createGlobalEnum"); s << '(' << enclosingObjectVariable << ',' << endl; @@ -3358,64 +3355,6 @@ void CppGenerator::writeFlagsNumberMethodsDefinition(QTextStream& s, const Abstr s << "};" << endl << endl; } -void CppGenerator::writeFlagsDefinition(QTextStream& s, const AbstractMetaEnum* cppEnum) -{ - FlagsTypeEntry* flagsEntry = cppEnum->typeEntry()->flags(); - if (!flagsEntry) - return; - QString cpythonName = cpythonFlagsName(flagsEntry); - QString enumName = cpythonEnumName(cppEnum); - - s << "// forward declaration of new function" << endl; - s << "static PyTypeObject " << cpythonName << "_Type = {" << endl; - s << INDENT << "PyVarObject_HEAD_INIT(&PyType_Type, 0)" << endl; - s << INDENT << "/*tp_name*/ \"" << flagsEntry->flagsName() << "\"," << endl; - s << INDENT << "/*tp_basicsize*/ sizeof(PySideQFlagsObject)," << endl; - s << INDENT << "/*tp_itemsize*/ 0," << endl; - s << INDENT << "/*tp_dealloc*/ 0," << endl; - s << INDENT << "/*tp_print*/ 0," << endl; - s << INDENT << "/*tp_getattr*/ 0," << endl; - s << INDENT << "/*tp_setattr*/ 0," << endl; - s << INDENT << "/*tp_compare*/ 0," << endl; - s << INDENT << "/*tp_repr*/ 0," << endl; - s << INDENT << "/*tp_as_number*/ &" << enumName << "_as_number," << endl; - s << INDENT << "/*tp_as_sequence*/ 0," << endl; - s << INDENT << "/*tp_as_mapping*/ 0," << endl; - s << INDENT << "/*tp_hash*/ 0," << endl; - s << INDENT << "/*tp_call*/ 0," << endl; - s << INDENT << "/*tp_str*/ 0," << endl; - s << INDENT << "/*tp_getattro*/ 0," << endl; - s << INDENT << "/*tp_setattro*/ 0," << endl; - s << INDENT << "/*tp_as_buffer*/ 0," << endl; - s << INDENT << "/*tp_flags*/ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES," << endl; - s << INDENT << "/*tp_doc*/ 0," << endl; - s << INDENT << "/*tp_traverse*/ 0," << endl; - s << INDENT << "/*tp_clear*/ 0," << endl; - s << INDENT << "/*tp_richcompare*/ &PySideQFlagsRichCompare," << endl; - s << INDENT << "/*tp_weaklistoffset*/ 0," << endl; - s << INDENT << "/*tp_iter*/ 0," << endl; - s << INDENT << "/*tp_iternext*/ 0," << endl; - s << INDENT << "/*tp_methods*/ 0," << endl; - s << INDENT << "/*tp_members*/ 0," << endl; - s << INDENT << "/*tp_getset*/ 0," << endl; - s << INDENT << "/*tp_base*/ 0," << endl; - s << INDENT << "/*tp_dict*/ 0," << endl; - s << INDENT << "/*tp_descr_get*/ 0," << endl; - s << INDENT << "/*tp_descr_set*/ 0," << endl; - s << INDENT << "/*tp_dictoffset*/ 0," << endl; - s << INDENT << "/*tp_init*/ 0," << endl; - s << INDENT << "/*tp_alloc*/ 0," << endl; - s << INDENT << "/*tp_new*/ &PySideQFlagsNew," << endl; - s << INDENT << "/*tp_free*/ 0," << endl; - s << INDENT << "/*tp_is_gc*/ 0," << endl; - s << INDENT << "/*tp_bases*/ 0," << endl; - s << INDENT << "/*tp_mro*/ 0," << endl; - s << INDENT << "/*tp_cache*/ 0," << endl; - s << INDENT << "/*tp_subclasses*/ 0," << endl; - s << INDENT << "/*tp_weaklist*/ 0" << endl; - s << "};" << endl << endl; -} - void CppGenerator::writeFlagsBinaryOperator(QTextStream& s, const AbstractMetaEnum* cppEnum, QString pyOpName, QString cppOpName) { diff --git a/generator/cppgenerator.h b/generator/cppgenerator.h index 8b3256262..094864282 100644 --- a/generator/cppgenerator.h +++ b/generator/cppgenerator.h @@ -179,7 +179,6 @@ private: void writeSignalInitialization(QTextStream& s, const AbstractMetaClass* metaClass); - void writeFlagsDefinition(QTextStream& s, const AbstractMetaEnum* cppEnum); void writeFlagsMethods(QTextStream& s, const AbstractMetaEnum* cppEnum); void writeFlagsToLong(QTextStream& s, const AbstractMetaEnum* cppEnum); void writeFlagsNonZero(QTextStream& s, const AbstractMetaEnum* cppEnum); -- cgit v1.2.3