From ccd189d30c284e9a67a802193ef05c4149108f9a Mon Sep 17 00:00:00 2001 From: Hugo Parente Lima Date: Tue, 8 Jun 2010 09:57:21 -0300 Subject: Add checkType method to PySide custom converters. --- PySide/QtCore/qchar_conversions.h | 9 +++++++-- PySide/QtCore/qstring_conversions.h | 8 ++++++-- PySide/QtCore/qstringref_conversions.h | 3 +-- PySide/QtCore/qvariant_conversions.h | 5 +++++ PySide/QtGui/qpixmap_conversion.h | 23 ++++++++++++++--------- 5 files changed, 33 insertions(+), 15 deletions(-) (limited to 'PySide') 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 +struct Converter { -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 +struct Converter { -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 : public Converter static PyObject* toPython(const QStringRef& cppObj) { - const QString* str = cppObj.string(); - return Converter::toPython(*str); + return Converter::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::checkType(PyObject* pyObj) +{ + return ValueTypeConverter::checkType(pyObj); +} + // all types are convertible to QVariant inline bool Converter::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::checkType(PyObject* pyObj) +{ + return ValueTypeConverter::checkType(pyObj); +} + +inline bool Converter::isConvertible(PyObject* pyobj) { if (ValueTypeConverter::isConvertible(pyobj)) return true; SbkBaseWrapperType* shiboType = reinterpret_cast(SbkType()); - bool isVariant = SbkQVariant_Check(pyobj); + bool isVariant = Converter::checkType(pyobj); if (isVariant) { QVariant var(Converter::toCpp(pyobj)); return var.type() == QVariant::Pixmap; - } else if (SbkQSize_Check(pyobj) || SbkQString_Check(pyobj)) { + } else if (Converter::checkType(pyobj) || Converter::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::toCpp(PyObject* pyobj) { SbkBaseWrapperType* shiboType = reinterpret_cast(SbkType()); - bool isVariant = SbkQVariant_Check(pyobj); + bool isVariant = Converter::checkType(pyobj); if (isVariant) { QVariant var(Converter::toCpp(pyobj)); return var.value(); - } else if (SbkQSize_Check(pyobj)) { - return QPixmap(Shiboken::Converter::toCpp(pyobj)); - } else if (SbkQString_Check(pyobj)) { - return QPixmap(Shiboken::Converter::toCpp(pyobj)); + } else if (Converter::checkType(pyobj)) { + return QPixmap(Shiboken::Converter::toCpp(pyobj)); + } else if (Converter::checkType(pyobj)) { + return QPixmap(Shiboken::Converter::toCpp(pyobj)); } else if (shiboType->ext_isconvertible && shiboType->ext_tocpp && shiboType->ext_isconvertible(pyobj)) { QPixmap* cptr = reinterpret_cast(shiboType->ext_tocpp(pyobj)); std::auto_ptr cptr_auto_ptr(cptr); -- cgit v1.2.3