diff options
author | Renato Filho <renato.filho@openbossa.org> | 2011-10-03 18:49:42 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:56:08 -0300 |
commit | 1e29ab65924166688e352eaaa099ad571a980c4f (patch) | |
tree | 2a7ae3cb38b33a3211c9cec0da70016dd5d44c1d /libpyside/pysideconversions.h | |
parent | a2cb6fe0254a122f0ad9d2ee991d9a249903ee12 (diff) |
Initia QtCore port to python3.
Diffstat (limited to 'libpyside/pysideconversions.h')
-rw-r--r-- | libpyside/pysideconversions.h | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/libpyside/pysideconversions.h b/libpyside/pysideconversions.h index e01d29426..859868c8d 100644 --- a/libpyside/pysideconversions.h +++ b/libpyside/pysideconversions.h @@ -24,8 +24,9 @@ #define PYSIDECONVERSIONS_H #include <Python.h> -#include <conversions.h> #include <QFlag> +#include <conversions.h> +#include <pysideqflags.h> template <typename QtDict> struct QtDictConverter @@ -211,6 +212,7 @@ struct QSequenceConverter } }; + template <typename T> struct QFlagsConverter { @@ -232,17 +234,23 @@ struct QFlagsConverter static inline PyObject* toPython(const T& cppObj) { - PyObject* qflags = Shiboken::SbkType<T>()->tp_alloc(Shiboken::SbkType<T>(), 0); - reinterpret_cast<PyIntObject*>(qflags)->ob_ival = cppObj; - return qflags; + return reinterpret_cast<PyObject*>(PySide::QFlags::newObject(cppObj, Shiboken::SbkType<T>())); } static inline T toCpp(PyObject* pyObj) { - if (Shiboken::isShibokenEnum(pyObj)) - return T(QFlag(Shiboken::Enum::getValue(pyObj))); - else - return T(QFlag(reinterpret_cast<PyIntObject*>(pyObj)->ob_ival)); + long val = 0; + if (Shiboken::Enum::check(pyObj)) { + val = Shiboken::Enum::getValue(pyObj); + } else if (PyObject_TypeCheck(pyObj, Shiboken::SbkType<T>())) { + val = PySide::QFlags::getValue(reinterpret_cast<PySideQFlagsObject*>(pyObj)); + } else if (PyNumber_Check(pyObj)) { + Shiboken::AutoDecRef pyLong(PyNumber_Long(pyObj)); + val = PyLong_AsLong(pyLong.object()); + } else { + PyErr_BadArgument(); + } + return T(QFlag(val)); } }; |