aboutsummaryrefslogtreecommitdiffstats
path: root/PySide/QtCore/qstring_conversions.h
diff options
context:
space:
mode:
authorHugo Lima <hugo.lima@openbossa.org>2010-03-15 14:46:30 -0300
committerHugo Lima <hugo.lima@openbossa.org>2010-03-17 18:17:13 -0300
commit781bdbe6321298e7bb567a717a8b0fca4cd0e7e2 (patch)
tree6eb7b4ab029f566d6aba94113cc16a579a9cdfef /PySide/QtCore/qstring_conversions.h
parentb53b9e49ba3b277913b970df758b75b36cc253a4 (diff)
Fixed PySide custom conversions to work with newer versions of shiboken generator.
Diffstat (limited to 'PySide/QtCore/qstring_conversions.h')
-rw-r--r--PySide/QtCore/qstring_conversions.h68
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);
}
}