aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside
diff options
context:
space:
mode:
authorHugo Parente Lima <hugo.pl@gmail.com>2010-08-17 10:44:48 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2010-08-17 11:15:44 -0300
commit9a969935ccc866804574480ac41ec004646f104c (patch)
tree8c0d60730595957500b52c607c73281b15681bd3 /libpyside
parentd686c687074708af1654131f603b767d52f611e6 (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.h31
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