diff options
Diffstat (limited to 'PySide/QtCore/qstring_conversions.h')
-rw-r--r-- | PySide/QtCore/qstring_conversions.h | 68 |
1 files changed, 37 insertions, 31 deletions
diff --git a/PySide/QtCore/qstring_conversions.h b/PySide/QtCore/qstring_conversions.h index 0456421da..d2edf9479 100644 --- a/PySide/QtCore/qstring_conversions.h +++ b/PySide/QtCore/qstring_conversions.h @@ -1,51 +1,52 @@ namespace Shiboken { -inline bool Converter< QString >::isConvertible(PyObject* pyobj) +inline bool Converter<QString>::isConvertible(PyObject* pyObj) { SbkBaseWrapperType* shiboType = reinterpret_cast<SbkBaseWrapperType*>(SbkType<QString>()); - return PyString_Check(pyobj) - || PyUnicode_Check(pyobj) - || SbkQByteArray_Check(pyobj) - || SbkQLatin1String_Check(pyobj) + return PyString_Check(pyObj) + || PyObject_TypeCheck(pyObj, SbkType<QString>()) + || PyUnicode_Check(pyObj) + || SbkQByteArray_Check(pyObj) + || SbkQLatin1String_Check(pyObj) #if PY_VERSION_HEX < 0x03000000 - || (pyobj->ob_type->tp_as_buffer - && PyType_HasFeature(pyobj->ob_type, Py_TPFLAGS_HAVE_GETCHARBUFFER) - && pyobj->ob_type->tp_as_buffer->bf_getcharbuffer) + || (pyObj->ob_type->tp_as_buffer + && PyType_HasFeature(pyObj->ob_type, Py_TPFLAGS_HAVE_GETCHARBUFFER) + && pyObj->ob_type->tp_as_buffer->bf_getcharbuffer) #endif - || SbkQChar_Check(pyobj) - || (shiboType->ext_isconvertible && shiboType->ext_isconvertible(pyobj)); + || SbkQChar_Check(pyObj) + || (shiboType->ext_isconvertible && shiboType->ext_isconvertible(pyObj)); } -inline QString Converter< QString >::toCpp(PyObject* pyobj) +inline QString Converter<QString>::toCpp(PyObject* pyObj) { SbkBaseWrapperType* shiboType = reinterpret_cast<SbkBaseWrapperType*>(SbkType<QString>()); - if (SbkQChar_Check(pyobj)) { - return QString(Converter< QChar >::toCpp(pyobj)); - } else if (SbkQByteArray_Check(pyobj)) { - return QString(Converter< QByteArray >::toCpp(pyobj)); - } else if (SbkQLatin1String_Check(pyobj)) { - return QString(Converter< QLatin1String >::toCpp(pyobj)); - } else if (PyUnicode_Check(pyobj)) { - Py_UNICODE* unicode = PyUnicode_AS_UNICODE(pyobj); + if (SbkQChar_Check(pyObj)) { + return QString(Converter< QChar >::toCpp(pyObj)); + } else if (SbkQByteArray_Check(pyObj)) { + return QString(Converter< QByteArray >::toCpp(pyObj)); + } else if (SbkQLatin1String_Check(pyObj)) { + return QString(Converter< QLatin1String >::toCpp(pyObj)); + } else if (PyUnicode_Check(pyObj)) { + Py_UNICODE* unicode = PyUnicode_AS_UNICODE(pyObj); #if defined(Py_UNICODE_WIDE) // cast as Py_UNICODE can be a different type return QString::fromUcs4(reinterpret_cast<const uint*>(unicode)); #else - return QString::fromUtf16(unicode, PyUnicode_GET_SIZE(pyobj)); + return QString::fromUtf16(unicode, PyUnicode_GET_SIZE(pyObj)); #endif - } else if (PyString_Check(pyobj)) { - return QString(Converter< char * >::toCpp(pyobj)); + } else if (PyString_Check(pyObj)) { + return QString(Converter< char * >::toCpp(pyObj)); } #if PY_VERSION_HEX < 0x03000000 // Support for buffer objects on QString constructor - else if (pyobj->ob_type->tp_as_buffer - && PyType_HasFeature(pyobj->ob_type, Py_TPFLAGS_HAVE_GETCHARBUFFER) - && pyobj->ob_type->tp_as_buffer->bf_getcharbuffer) { + else if (pyObj->ob_type->tp_as_buffer + && PyType_HasFeature(pyObj->ob_type, Py_TPFLAGS_HAVE_GETCHARBUFFER) + && pyObj->ob_type->tp_as_buffer->bf_getcharbuffer) { QByteArray data; - PyBufferProcs* bufferProcs = pyobj->ob_type->tp_as_buffer; - int segments = bufferProcs->bf_getsegcount(pyobj, 0); + PyBufferProcs* bufferProcs = pyObj->ob_type->tp_as_buffer; + int segments = bufferProcs->bf_getsegcount(pyObj, 0); for (int i = 0; i < segments; ++i) { char* segmentData; - int length = bufferProcs->bf_getcharbuffer(pyobj, i, &segmentData); + int length = bufferProcs->bf_getcharbuffer(pyObj, i, &segmentData); if (length == -1) break; data.append(segmentData, length); @@ -53,11 +54,16 @@ inline QString Converter< QString >::toCpp(PyObject* pyobj) return QString(data); } #endif - else if (shiboType->ext_isconvertible && shiboType->ext_tocpp && shiboType->ext_isconvertible(pyobj)) { - QString* cptr = reinterpret_cast<QString*>(shiboType->ext_tocpp(pyobj)); + else if (shiboType->ext_isconvertible && shiboType->ext_tocpp && shiboType->ext_isconvertible(pyObj)) { + QString* cptr = reinterpret_cast<QString*>(shiboType->ext_tocpp(pyObj)); std::auto_ptr<QString> cptr_auto_ptr(cptr); return *cptr; } - return *Converter<QString*>::toCpp(pyobj); + return *Converter<QString*>::toCpp(pyObj); +} + +inline PyObject* Converter<QString>::toPython(const QString& cppObj) +{ + return ValueTypeConverter<QString>::toPython(cppObj); } } |