diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2010-03-02 13:30:38 -0300 |
---|---|---|
committer | Marcelo Lira <marcelo.lira@openbossa.org> | 2010-03-04 17:14:12 -0300 |
commit | 77bb1220b4bc7d538d1e57cf6011d7b3fbe42925 (patch) | |
tree | 0dcb3746487bf0be2b40ba39a65a5b6f390d621f | |
parent | 4eafde570f4bb3d4bf663959959d8c1a0b221212 (diff) |
Updated type system and QString and QPixmap conversions to be extensible.
And removed the QkeySequence test from the black list (the list of tests
expected to fail).
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Lauro Moura <lauro.neto@openbossa.org>
-rw-r--r-- | PySide/QtCore/qstring_conversions.h | 10 | ||||
-rw-r--r-- | PySide/QtGui/qpixmap_conversion.h | 8 | ||||
-rw-r--r-- | PySide/QtGui/typesystem_gui_common.xml | 2 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 2 |
4 files changed, 20 insertions, 2 deletions
diff --git a/PySide/QtCore/qstring_conversions.h b/PySide/QtCore/qstring_conversions.h index 9a33d08d7..0456421da 100644 --- a/PySide/QtCore/qstring_conversions.h +++ b/PySide/QtCore/qstring_conversions.h @@ -1,6 +1,7 @@ namespace Shiboken { inline bool Converter< QString >::isConvertible(PyObject* pyobj) { + SbkBaseWrapperType* shiboType = reinterpret_cast<SbkBaseWrapperType*>(SbkType<QString>()); return PyString_Check(pyobj) || PyUnicode_Check(pyobj) || SbkQByteArray_Check(pyobj) @@ -10,11 +11,13 @@ inline bool Converter< QString >::isConvertible(PyObject* pyobj) && PyType_HasFeature(pyobj->ob_type, Py_TPFLAGS_HAVE_GETCHARBUFFER) && pyobj->ob_type->tp_as_buffer->bf_getcharbuffer) #endif - || SbkQChar_Check(pyobj); + || SbkQChar_Check(pyobj) + || (shiboType->ext_isconvertible && shiboType->ext_isconvertible(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)) { @@ -50,6 +53,11 @@ 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)); + std::auto_ptr<QString> cptr_auto_ptr(cptr); + return *cptr; + } return *Converter<QString*>::toCpp(pyobj); } } diff --git a/PySide/QtGui/qpixmap_conversion.h b/PySide/QtGui/qpixmap_conversion.h index cad242b95..e3973b98c 100644 --- a/PySide/QtGui/qpixmap_conversion.h +++ b/PySide/QtGui/qpixmap_conversion.h @@ -1,12 +1,15 @@ namespace Shiboken { inline bool Converter< QPixmap >::isConvertible(PyObject* pyobj) { + SbkBaseWrapperType* shiboType = reinterpret_cast<SbkBaseWrapperType*>(SbkType<QPixmap>()); bool isVariant = SbkQVariant_Check(pyobj); if (isVariant) { QVariant var(Converter<QVariant>::toCpp(pyobj)); return var.type() == QVariant::Pixmap; } else if (SbkQSize_Check(pyobj) || SbkQString_Check(pyobj)) { return true; + } else if (shiboType->ext_isconvertible) { + return shiboType->ext_isconvertible(pyobj); } return false; @@ -14,6 +17,7 @@ inline bool Converter< QPixmap >::isConvertible(PyObject* pyobj) inline QPixmap Converter< QPixmap >::toCpp(PyObject* pyobj) { + SbkBaseWrapperType* shiboType = reinterpret_cast<SbkBaseWrapperType*>(SbkType<QPixmap>()); bool isVariant = SbkQVariant_Check(pyobj); if (isVariant) { QVariant var(Converter<QVariant>::toCpp(pyobj)); @@ -22,6 +26,10 @@ inline QPixmap Converter< QPixmap >::toCpp(PyObject* pyobj) return QPixmap(Shiboken::Converter<QSize& >::toCpp(pyobj)); } else if (SbkQString_Check(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); + return *cptr; } return *Converter<QPixmap*>::toCpp(pyobj); diff --git a/PySide/QtGui/typesystem_gui_common.xml b/PySide/QtGui/typesystem_gui_common.xml index 948e16f66..41824d8a0 100644 --- a/PySide/QtGui/typesystem_gui_common.xml +++ b/PySide/QtGui/typesystem_gui_common.xml @@ -525,6 +525,8 @@ </value-type> <value-type name="QKeySequence"> <modify-function signature="operator=(QKeySequence)" remove="all"/> + <!-- TODO: QVariant operator temporarily removed due to compilation problems. --> + <modify-function signature="operator QVariant()const" remove="all"/> <modify-function signature="operator int()const" remove="all"/> <modify-function signature="operator[](uint)const" remove="all"/> </value-type> diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 2a1d422ce..044823247 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,7 +1,7 @@ file(GLOB TEST_FILES */*_test.py) -set(test_blacklist "qtgui_qstring_qkeysequence") +set(test_blacklist "") foreach(test_file ${TEST_FILES}) string(REGEX MATCH "/([^/]+)//?([^/]+)_test.py" test_name ${test_file} ) |