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/QtCore/qstring_conversions.h | |
parent | 5b440adbbcc6ae8468c869dfd68b25950a12abe2 (diff) |
- Added isConvertible methods to all custom converters.
- Added a custom converter for QString.
Diffstat (limited to 'PySide/QtCore/qstring_conversions.h')
-rw-r--r-- | PySide/QtCore/qstring_conversions.h | 35 |
1 files changed, 35 insertions, 0 deletions
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); +} |