aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside/pysideconversions.h
diff options
context:
space:
mode:
authorRenato Filho <renato.filho@openbossa.org>2011-10-03 18:49:42 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:56:08 -0300
commit1e29ab65924166688e352eaaa099ad571a980c4f (patch)
tree2a7ae3cb38b33a3211c9cec0da70016dd5d44c1d /libpyside/pysideconversions.h
parenta2cb6fe0254a122f0ad9d2ee991d9a249903ee12 (diff)
Initia QtCore port to python3.
Diffstat (limited to 'libpyside/pysideconversions.h')
-rw-r--r--libpyside/pysideconversions.h24
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));
}
};