diff options
author | Hugo Parente Lima <hugo.pl@gmail.com> | 2010-08-17 10:44:48 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2010-08-17 11:15:44 -0300 |
commit | 9a969935ccc866804574480ac41ec004646f104c (patch) | |
tree | 8c0d60730595957500b52c607c73281b15681bd3 /libpyside | |
parent | d686c687074708af1654131f603b767d52f611e6 (diff) |
Fix bug 294 addind a converter specific for QFlags.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
Renato Araújo <renato.filho@openbossa.org>
Diffstat (limited to 'libpyside')
-rw-r--r-- | libpyside/pysideconversions.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/libpyside/pysideconversions.h b/libpyside/pysideconversions.h index 32d5f34b9..c7fdcb516 100644 --- a/libpyside/pysideconversions.h +++ b/libpyside/pysideconversions.h @@ -37,6 +37,7 @@ #include <Python.h> #include <conversions.h> +#include <QFlag> template <typename QtDict> struct QtDictConverter @@ -222,4 +223,34 @@ struct QSequenceConverter } }; +template <typename T> +struct QFlagsConverter +{ + static inline bool checkType(PyObject* pyObj) + { + return PyObject_TypeCheck(pyObj, Shiboken::SbkType<T>()); + } + + static inline bool isConvertible(PyObject* pyObj) + { + return PyObject_TypeCheck(pyObj, Shiboken::SbkType<T>()) + || PyObject_TypeCheck(pyObj, Shiboken::SbkType<typename T::enum_type>()); + } + + static inline PyObject* toPython(void* cppobj) + { + return toPython(*reinterpret_cast<T*>(cppobj)); + } + + static inline PyObject* toPython(T cppenum) + { + return Shiboken::SbkEnumObject_New(Shiboken::SbkType<T>(), (long) cppenum); + } + + static inline T toCpp(PyObject* pyobj) + { + return T(QFlag(reinterpret_cast<Shiboken::SbkEnumObject*>(pyobj)->ob_ival)); + } +}; + #endif |