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>
This commit is contained in:
parent
4eafde570f
commit
77bb1220b4
4 changed files with 20 additions and 2 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
namespace Shiboken {
|
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)
|
return PyString_Check(pyobj)
|
||||||
|| PyUnicode_Check(pyobj)
|
|| PyUnicode_Check(pyobj)
|
||||||
|| SbkQByteArray_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)
|
&& PyType_HasFeature(pyobj->ob_type, Py_TPFLAGS_HAVE_GETCHARBUFFER)
|
||||||
&& pyobj->ob_type->tp_as_buffer->bf_getcharbuffer)
|
&& pyobj->ob_type->tp_as_buffer->bf_getcharbuffer)
|
||||||
#endif
|
#endif
|
||||||
|| SbkQChar_Check(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)) {
|
if (SbkQChar_Check(pyobj)) {
|
||||||
return QString(Converter< QChar >::toCpp(pyobj));
|
return QString(Converter< QChar >::toCpp(pyobj));
|
||||||
} else if (SbkQByteArray_Check(pyobj)) {
|
} else if (SbkQByteArray_Check(pyobj)) {
|
||||||
|
|
@ -50,6 +53,11 @@ inline QString Converter< QString >::toCpp(PyObject* pyobj)
|
||||||
return QString(data);
|
return QString(data);
|
||||||
}
|
}
|
||||||
#endif
|
#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);
|
return *Converter<QString*>::toCpp(pyobj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,15 @@
|
||||||
namespace Shiboken {
|
namespace Shiboken {
|
||||||
inline bool Converter< QPixmap >::isConvertible(PyObject* pyobj)
|
inline bool Converter< QPixmap >::isConvertible(PyObject* pyobj)
|
||||||
{
|
{
|
||||||
|
SbkBaseWrapperType* shiboType = reinterpret_cast<SbkBaseWrapperType*>(SbkType<QPixmap>());
|
||||||
bool isVariant = SbkQVariant_Check(pyobj);
|
bool isVariant = SbkQVariant_Check(pyobj);
|
||||||
if (isVariant) {
|
if (isVariant) {
|
||||||
QVariant var(Converter<QVariant>::toCpp(pyobj));
|
QVariant var(Converter<QVariant>::toCpp(pyobj));
|
||||||
return var.type() == QVariant::Pixmap;
|
return var.type() == QVariant::Pixmap;
|
||||||
} else if (SbkQSize_Check(pyobj) || SbkQString_Check(pyobj)) {
|
} else if (SbkQSize_Check(pyobj) || SbkQString_Check(pyobj)) {
|
||||||
return true;
|
return true;
|
||||||
|
} else if (shiboType->ext_isconvertible) {
|
||||||
|
return shiboType->ext_isconvertible(pyobj);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
@ -14,6 +17,7 @@ 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 = SbkQVariant_Check(pyobj);
|
||||||
if (isVariant) {
|
if (isVariant) {
|
||||||
QVariant var(Converter<QVariant>::toCpp(pyobj));
|
QVariant var(Converter<QVariant>::toCpp(pyobj));
|
||||||
|
|
@ -22,6 +26,10 @@ inline QPixmap Converter< QPixmap >::toCpp(PyObject* pyobj)
|
||||||
return QPixmap(Shiboken::Converter<QSize& >::toCpp(pyobj));
|
return QPixmap(Shiboken::Converter<QSize& >::toCpp(pyobj));
|
||||||
} else if (SbkQString_Check(pyobj)) {
|
} else if (SbkQString_Check(pyobj)) {
|
||||||
return QPixmap(Shiboken::Converter<QString& >::toCpp(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);
|
return *Converter<QPixmap*>::toCpp(pyobj);
|
||||||
|
|
|
||||||
|
|
@ -525,6 +525,8 @@
|
||||||
</value-type>
|
</value-type>
|
||||||
<value-type name="QKeySequence">
|
<value-type name="QKeySequence">
|
||||||
<modify-function signature="operator=(QKeySequence)" remove="all"/>
|
<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 int()const" remove="all"/>
|
||||||
<modify-function signature="operator[](uint)const" remove="all"/>
|
<modify-function signature="operator[](uint)const" remove="all"/>
|
||||||
</value-type>
|
</value-type>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
file(GLOB TEST_FILES */*_test.py)
|
file(GLOB TEST_FILES */*_test.py)
|
||||||
|
|
||||||
set(test_blacklist "qtgui_qstring_qkeysequence")
|
set(test_blacklist "")
|
||||||
|
|
||||||
foreach(test_file ${TEST_FILES})
|
foreach(test_file ${TEST_FILES})
|
||||||
string(REGEX MATCH "/([^/]+)//?([^/]+)_test.py" test_name ${test_file} )
|
string(REGEX MATCH "/([^/]+)//?([^/]+)_test.py" test_name ${test_file} )
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue