diff options
-rw-r--r-- | PySide/QtCore/qchar_conversions.h | 9 | ||||
-rw-r--r-- | PySide/QtCore/qstring_conversions.h | 8 | ||||
-rw-r--r-- | PySide/QtCore/qstringref_conversions.h | 3 | ||||
-rw-r--r-- | PySide/QtCore/qvariant_conversions.h | 5 | ||||
-rw-r--r-- | PySide/QtGui/qpixmap_conversion.h | 23 | ||||
-rw-r--r-- | libpyside/pysideconversions.h | 16 |
6 files changed, 49 insertions, 15 deletions
diff --git a/PySide/QtCore/qchar_conversions.h b/PySide/QtCore/qchar_conversions.h index ab477efc8..1ebcb646b 100644 --- a/PySide/QtCore/qchar_conversions.h +++ b/PySide/QtCore/qchar_conversions.h @@ -1,12 +1,17 @@ namespace Shiboken { template<> -class Converter<QChar> +struct Converter<QChar> { -public: + static bool checkType(PyObject* pyObj) + { + return PyString_Check(pyObj) && (PyString_Size(pyObj) == 1); + } + static bool isConvertible(PyObject* pyObj) { return (PyString_Check(pyObj) && (PyString_Size(pyObj) == 1)) + || pyObj == Py_None || PyInt_Check(pyObj); } diff --git a/PySide/QtCore/qstring_conversions.h b/PySide/QtCore/qstring_conversions.h index 392f0e7b7..04b46f4ea 100644 --- a/PySide/QtCore/qstring_conversions.h +++ b/PySide/QtCore/qstring_conversions.h @@ -1,9 +1,13 @@ namespace Shiboken { template<> -class Converter<QString> +struct Converter<QString> { -public: + static bool checkType(PyObject* pyObj) + { + return PyString_Check(pyObj) || PyUnicode_Check(pyObj); + } + static bool isConvertible(PyObject* pyObj) { return PyString_Check(pyObj) diff --git a/PySide/QtCore/qstringref_conversions.h b/PySide/QtCore/qstringref_conversions.h index 11e1b9c62..db3eefcae 100644 --- a/PySide/QtCore/qstringref_conversions.h +++ b/PySide/QtCore/qstringref_conversions.h @@ -7,8 +7,7 @@ struct Converter<QStringRef> : public Converter<QString> static PyObject* toPython(const QStringRef& cppObj) { - const QString* str = cppObj.string(); - return Converter<QString>::toPython(*str); + return Converter<QString>::toPython(cppObj.toString()); } static QStringRef toCpp(PyObject* pyObj) diff --git a/PySide/QtCore/qvariant_conversions.h b/PySide/QtCore/qvariant_conversions.h index f0f78a077..aa6d521fb 100644 --- a/PySide/QtCore/qvariant_conversions.h +++ b/PySide/QtCore/qvariant_conversions.h @@ -12,6 +12,11 @@ Q_DECLARE_METATYPE(PyQt_PyObject) namespace Shiboken { +inline bool Converter<QVariant>::checkType(PyObject* pyObj) +{ + return ValueTypeConverter<QVariant>::checkType(pyObj); +} + // all types are convertible to QVariant inline bool Converter<QVariant>::isConvertible(PyObject* pyObj) { diff --git a/PySide/QtGui/qpixmap_conversion.h b/PySide/QtGui/qpixmap_conversion.h index 10b480352..1423959a4 100644 --- a/PySide/QtGui/qpixmap_conversion.h +++ b/PySide/QtGui/qpixmap_conversion.h @@ -1,14 +1,19 @@ namespace Shiboken { -inline bool Converter< QPixmap >::isConvertible(PyObject* pyobj) +inline bool Converter<QPixmap>::checkType(PyObject* pyObj) +{ + return ValueTypeConverter<QPixmap>::checkType(pyObj); +} + +inline bool Converter<QPixmap>::isConvertible(PyObject* pyobj) { if (ValueTypeConverter<QPixmap>::isConvertible(pyobj)) return true; SbkBaseWrapperType* shiboType = reinterpret_cast<SbkBaseWrapperType*>(SbkType<QPixmap>()); - bool isVariant = SbkQVariant_Check(pyobj); + bool isVariant = Converter<QVariant>::checkType(pyobj); if (isVariant) { QVariant var(Converter<QVariant>::toCpp(pyobj)); return var.type() == QVariant::Pixmap; - } else if (SbkQSize_Check(pyobj) || SbkQString_Check(pyobj)) { + } else if (Converter<QSize>::checkType(pyobj) || Converter<QString>::checkType(pyobj)) { return true; } else if (shiboType->ext_isconvertible) { return shiboType->ext_isconvertible(pyobj); @@ -17,17 +22,17 @@ inline bool Converter< QPixmap >::isConvertible(PyObject* pyobj) } -inline QPixmap Converter< QPixmap >::toCpp(PyObject* pyobj) +inline QPixmap Converter<QPixmap>::toCpp(PyObject* pyobj) { SbkBaseWrapperType* shiboType = reinterpret_cast<SbkBaseWrapperType*>(SbkType<QPixmap>()); - bool isVariant = SbkQVariant_Check(pyobj); + bool isVariant = Converter<QVariant>::checkType(pyobj); if (isVariant) { QVariant var(Converter<QVariant>::toCpp(pyobj)); return var.value<QPixmap>(); - } else if (SbkQSize_Check(pyobj)) { - return QPixmap(Shiboken::Converter<QSize& >::toCpp(pyobj)); - } else if (SbkQString_Check(pyobj)) { - return QPixmap(Shiboken::Converter<QString& >::toCpp(pyobj)); + } else if (Converter<QSize>::checkType(pyobj)) { + return QPixmap(Shiboken::Converter<QSize >::toCpp(pyobj)); + } else if (Converter<QString>::checkType(pyobj)) { + return QPixmap(Shiboken::Converter<QString >::toCpp(pyobj)); } else if (shiboType->ext_isconvertible && shiboType->ext_tocpp && shiboType->ext_isconvertible(pyobj)) { QPixmap* cptr = reinterpret_cast<QPixmap*>(shiboType->ext_tocpp(pyobj)); std::auto_ptr<QPixmap> cptr_auto_ptr(cptr); diff --git a/libpyside/pysideconversions.h b/libpyside/pysideconversions.h index 9539b118a..86f50030f 100644 --- a/libpyside/pysideconversions.h +++ b/libpyside/pysideconversions.h @@ -41,6 +41,11 @@ template <typename QtDict> struct QtDictConverter { + static inline bool checkType(PyObject* pyObj) + { + return isConvertible(pyObj); + } + static inline bool isConvertible(PyObject* pyObj) { if (PyObject_TypeCheck(pyObj, Shiboken::SbkType<QtDict>())) @@ -95,6 +100,11 @@ struct QtDictConverter template <typename MultiMap> struct QtMultiMapConverter { + static inline bool checkType(PyObject* pyObj) + { + return isConvertible(pyObj); + } + static inline bool isConvertible(PyObject* pyObj) { if (PyObject_TypeCheck(pyObj, Shiboken::SbkType<MultiMap>())) @@ -145,6 +155,7 @@ struct QtMultiMapConverter return result; } + static inline MultiMap toCpp(PyObject* pyObj) { if (PyObject_TypeCheck(pyObj, Shiboken::SbkType<MultiMap>())) @@ -165,6 +176,11 @@ struct QtMultiMapConverter template <typename T> struct QSequenceConverter { + static inline bool checkType(PyObject* pyObj) + { + return isConvertible(pyObj); + } + static inline bool isConvertible(PyObject* pyObj) { if (PyObject_TypeCheck(pyObj, Shiboken::SbkType<T>())) |