From 781bdbe6321298e7bb567a717a8b0fca4cd0e7e2 Mon Sep 17 00:00:00 2001 From: Hugo Lima Date: Mon, 15 Mar 2010 14:46:30 -0300 Subject: Fixed PySide custom conversions to work with newer versions of shiboken generator. --- libpyside/pysideconversions.h | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) (limited to 'libpyside') diff --git a/libpyside/pysideconversions.h b/libpyside/pysideconversions.h index be6697e51..6e6db7902 100644 --- a/libpyside/pysideconversions.h +++ b/libpyside/pysideconversions.h @@ -35,11 +35,14 @@ #ifndef PYSIDECONVERSIONS_H #define PYSIDECONVERSIONS_H -template +template struct QtDictConverter { - static inline bool checkType(PyObject* pyObj) + static inline bool isConvertible(PyObject* pyObj) { + if (PyObject_TypeCheck(pyObj, Shiboken::SbkType())) + return true; + if (!PyDict_Check(pyObj)) return false; @@ -48,44 +51,37 @@ struct QtDictConverter Py_ssize_t pos = 0; while (PyDict_Next(pyObj, &pos, &key, &value)) { - if (!Shiboken::Converter::checkType(key) - && !Shiboken::Converter::checkType(value) - && !Shiboken::Converter::isConvertible(key) - && !Shiboken::Converter::isConvertible(value)) { + if (!Shiboken::Converter::isConvertible(key) + && !Shiboken::Converter::isConvertible(value)) { return false; } } return true; } - static inline bool isConvertible(PyObject* pyObj) - { - return checkType(pyObj); - } - - static inline PyObject* toPython(const StdMap& cppobj) + static inline PyObject* toPython(const QtDict& cppobj) { PyObject* result = PyDict_New(); - typename StdMap::const_iterator it = cppobj.begin(); + typename QtDict::const_iterator it = cppobj.begin(); for (; it != cppobj.end(); ++it) { PyDict_SetItem(result, - Shiboken::Converter::toPython(it.key()), - Shiboken::Converter::toPython(it.value())); + Shiboken::Converter::toPython(it.key()), + Shiboken::Converter::toPython(it.value())); } return result; } - static inline StdMap toCpp(PyObject* pyobj) + static inline QtDict toCpp(PyObject* pyobj) { - StdMap result; + QtDict result; PyObject* key; PyObject* value; Py_ssize_t pos = 0; while (PyDict_Next(pyobj, &pos, &key, &value)) - result[Shiboken::Converter::toCpp(key)] = Shiboken::Converter::toCpp(value); + result[Shiboken::Converter::toCpp(key)] = Shiboken::Converter::toCpp(value); return result; } }; -- cgit v1.2.3