diff options
author | Hugo Parente Lima <hugo.lima@openbossa.org> | 2010-06-08 09:57:21 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.lima@openbossa.org> | 2010-06-10 14:57:42 -0300 |
commit | ccd189d30c284e9a67a802193ef05c4149108f9a (patch) | |
tree | 9cad80bbabd36375c7dac046b386cc599bf3f942 /PySide | |
parent | e39bfefde9edda662f51eeaf9a482f209c7f1217 (diff) |
Add checkType method to PySide custom converters.
Diffstat (limited to 'PySide')
-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 |
5 files changed, 33 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); |