diff options
author | Hugo Lima <hugo.lima@openbossa.org> | 2009-10-27 11:32:27 -0200 |
---|---|---|
committer | Hugo Lima <hugo.lima@openbossa.org> | 2009-10-27 11:32:27 -0200 |
commit | 568683ea4b2ff7a8209333ddf5ee5e166f4aee25 (patch) | |
tree | 9456452e899c8c090e1c836fc9a2561aee8b1350 /PySide | |
parent | 5b440adbbcc6ae8468c869dfd68b25950a12abe2 (diff) |
- Added isConvertible methods to all custom converters.
- Added a custom converter for QString.
Diffstat (limited to 'PySide')
-rw-r--r-- | PySide/QtCore/qhash_conversions.h | 4 | ||||
-rw-r--r-- | PySide/QtCore/qlist_conversions.h | 6 | ||||
-rw-r--r-- | PySide/QtCore/qmap_conversions.h | 4 | ||||
-rw-r--r-- | PySide/QtCore/qpair_conversions.h | 3 | ||||
-rw-r--r-- | PySide/QtCore/qstring_conversions.h | 35 | ||||
-rw-r--r-- | PySide/QtCore/qvector_conversions.h | 3 | ||||
-rw-r--r-- | PySide/QtCore/typesystem_core.xml | 1 |
7 files changed, 55 insertions, 1 deletions
diff --git a/PySide/QtCore/qhash_conversions.h b/PySide/QtCore/qhash_conversions.h index 1f5e506dd..49b4c461b 100644 --- a/PySide/QtCore/qhash_conversions.h +++ b/PySide/QtCore/qhash_conversions.h @@ -1,6 +1,10 @@ template <typename qhash> struct Converter_qhash { + static bool isConvertible(const PyObject* pyObj) { + return PyDict_Check(const_cast<PyObject*>(pyObj)); + } + static PyObject* toPython(qhash hash) { PyObject* result = PyDict_New(); diff --git a/PySide/QtCore/qlist_conversions.h b/PySide/QtCore/qlist_conversions.h index 0f72b3ccd..8662305dd 100644 --- a/PySide/QtCore/qlist_conversions.h +++ b/PySide/QtCore/qlist_conversions.h @@ -1,7 +1,11 @@ template <typename qlist> struct Converter_qlist { - static PyObject* toPython(qlist holder) + static bool isConvertible(const PyObject* pyObj) { + return PySequence_Check(const_cast<PyObject*>(pyObj)); + } + + static PyObject* toPython(const qlist holder) { PyObject* result = PyList_New(holder.size()); for (int i = 0; i < holder.size(); i++) { diff --git a/PySide/QtCore/qmap_conversions.h b/PySide/QtCore/qmap_conversions.h index c1c262405..a3067f679 100644 --- a/PySide/QtCore/qmap_conversions.h +++ b/PySide/QtCore/qmap_conversions.h @@ -1,6 +1,10 @@ template <typename qmap> struct Converter_qmap { + static bool isConvertible(const PyObject* pyObj) { + return PyDict_Check(const_cast<PyObject*>(pyObj)); + } + static PyObject* toPython(qmap map) { PyObject* result = PyDict_New(); diff --git a/PySide/QtCore/qpair_conversions.h b/PySide/QtCore/qpair_conversions.h index de9904630..c3be87826 100644 --- a/PySide/QtCore/qpair_conversions.h +++ b/PySide/QtCore/qpair_conversions.h @@ -1,6 +1,9 @@ template <typename qpair> struct Converter_qpair { + static bool isConvertible(const PyObject* pyObj) { + return PySequence_Check(const_cast<PyObject*>(pyObj)); + } static PyObject* toPython(qpair holder) { typename qpair::first_type first(holder.first); diff --git a/PySide/QtCore/qstring_conversions.h b/PySide/QtCore/qstring_conversions.h new file mode 100644 index 000000000..760800038 --- /dev/null +++ b/PySide/QtCore/qstring_conversions.h @@ -0,0 +1,35 @@ +inline bool Converter< QString >::isConvertible(const PyObject* pyObj) +{ + return PyObject_TypeCheck(pyObj, &PyQString_Type) || PyUnicode_Check(pyObj) || PyString_Check(pyObj); +} + +inline PyObject* Converter< QString >::toPython(const QString cppobj) +{ + PyObject* pyobj; + void* holder = (void*) new QString(cppobj); + pyobj = Shiboken::PyBaseWrapper_New(&PyQString_Type, &PyQString_Type, holder); + return pyobj; +} + +inline QString Converter< QString >::toCpp(PyObject* pyobj) +{ + if (Converter<QChar>::isConvertible(pyobj)) { + return QString(Converter< QChar >::toCpp(pyobj)); + } else if (Converter<QByteArray>::isConvertible(pyobj)) { + return QString(Converter< QByteArray >::toCpp(pyobj)); + } else if (Converter<QLatin1String>::isConvertible(pyobj)) { + return QString(Converter< QLatin1String >::toCpp(pyobj)); + } else if (PyUnicode_Check(pyobj)) { +#if defined(Py_UNICODE_WIDE) + Py_UNICODE* unicode = PyUnicode_AS_UNICODE(pyobj); + return QString::fromUcs4(unicode); +#else + PyObject* str = PyUnicode_AsUTF8String(pyobj); + QString result = QString::fromUtf8(PyString_AS_STRING(str)); + Py_DECREF(str); + return result; +#endif + } else if (PyString_Check(pyobj)) + return QString(Converter< char * >::toCpp(pyobj)); + return *((QString*) ((Shiboken::PyBaseWrapper*)pyobj)->cptr); +} diff --git a/PySide/QtCore/qvector_conversions.h b/PySide/QtCore/qvector_conversions.h index c1cc304c1..5b4a10f60 100644 --- a/PySide/QtCore/qvector_conversions.h +++ b/PySide/QtCore/qvector_conversions.h @@ -1,6 +1,9 @@ template <typename qvector> struct Converter_qvector { + static bool isConvertible(const PyObject* pyObj) { + return PySequence_Check(const_cast<PyObject*>(pyObj)); + } static PyObject* toPython(qvector vector) { PyObject* result = PyList_New(vector.size()); diff --git a/PySide/QtCore/typesystem_core.xml b/PySide/QtCore/typesystem_core.xml index 2b36e354d..d3e0c2011 100644 --- a/PySide/QtCore/typesystem_core.xml +++ b/PySide/QtCore/typesystem_core.xml @@ -893,6 +893,7 @@ <extra-includes> <include file-name="QTextCodec" location="global"/> </extra-includes> + <conversion-rule file="qstring_conversions.h" /> <modify-documentation xpath="/description/section[@id='initializing-a-string']/para[2]" /> <modify-documentation xpath="/description/section[@id='initializing-a-string']/para[3]" /> |