aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHugo Parente Lima <hugo.pl@gmail.com>2011-10-28 17:23:56 -0200
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:18:24 -0300
commit2b677ef0eb94f15b257f7a6ccf7e9447c32d36b9 (patch)
tree3d03ab4d722820eb1f815b44725d71d4b92ad727
parent2a5330b26469914db917c019b97b5966e4f26014 (diff)
Create qflags at runtime.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org> Marcelo Lira <marcelo.lira@openbossa.org>
-rw-r--r--generator/cppgenerator.cpp71
-rw-r--r--generator/cppgenerator.h1
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<enum>)
- 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);