aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside
diff options
context:
space:
mode:
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