diff options
Diffstat (limited to 'PySide/QtCore')
25 files changed, 42 insertions, 752 deletions
diff --git a/PySide/QtCore/glue/hwnd_conversions.h b/PySide/QtCore/glue/hwnd_conversions.h deleted file mode 100644 index 6dbaa8f4e..000000000 --- a/PySide/QtCore/glue/hwnd_conversions.h +++ /dev/null @@ -1,54 +0,0 @@ -namespace Shiboken { -template <> -struct Converter<HWND> -{ - static bool checkType(PyObject* pyObj) - { - return false; - } - - static bool isConvertible(PyObject* pyobj) - { - if (pyobj == Py_None) - return true; - -#ifdef IS_PY3K - return PyCapsule_CheckExact(pyobj); -#else - return PyCObject_Check(pyobj); -#endif - } - - static inline PyObject* toPython(void* cppobj) - { - // not supported - Q_ASSERT(true); - return 0; - } - - static PyObject* toPython(HWND cppobj) - { - if (!cppobj) - Py_RETURN_NONE; - -#ifdef IS_PY3K - return PyCapsule_New(cppobj, 0, 0); -#else - return PyCObject_FromVoidPtr(cppobj, 0); -#endif - } - - static HWND toCpp(PyObject* pyobj) - { - if (pyobj == Py_None) - return 0; - -#ifdef IS_PY3K - return (HWND)PyCapsule_GetPointer(pyobj, 0); -#else - return (HWND)PyCObject_AsVoidPtr(pyobj); -#endif - } -}; - -} diff --git a/PySide/QtCore/glue/qbytearray_bufferprotocol.cpp b/PySide/QtCore/glue/qbytearray_bufferprotocol.cpp index 03ffcb4af..acc7bb93e 100644 --- a/PySide/QtCore/glue/qbytearray_bufferprotocol.cpp +++ b/PySide/QtCore/glue/qbytearray_bufferprotocol.cpp @@ -18,7 +18,7 @@ static Py_ssize_t SbkQByteArray_readbufferproc(PyObject* self, Py_ssize_t segmen if (segment || !Shiboken::Object::isValid(self)) return -1; - QByteArray* cppSelf = Shiboken::Converter<QByteArray*>::toCpp(self); + QByteArray* cppSelf = %CONVERTTOCPP[QByteArray*](self); *ptrptr = reinterpret_cast<void*>(cppSelf->data()); return cppSelf->size(); } diff --git a/PySide/QtCore/glue/qeasingcurve_glue.cpp b/PySide/QtCore/glue/qeasingcurve_glue.cpp index fd2dee092..7f56315b3 100644 --- a/PySide/QtCore/glue/qeasingcurve_glue.cpp +++ b/PySide/QtCore/glue/qeasingcurve_glue.cpp @@ -93,7 +93,7 @@ qreal PySideEasingCurveFunctor::operator()(qreal progress) PyObject* result = PyObject_CallObject(m_func, args); qreal cppResult = 0.0; if (result) { - cppResult = Shiboken::Converter<qreal>::toCpp(result); + Shiboken::Conversions::pythonToCppCopy(Shiboken::Conversions::PrimitiveTypeConverter<qreal>(), result, &cppResult); Py_DECREF(result); } Py_DECREF(args); diff --git a/PySide/QtCore/glue/qobject_connect.cpp b/PySide/QtCore/glue/qobject_connect.cpp index b46cbcfbc..96bcfb227 100644 --- a/PySide/QtCore/glue/qobject_connect.cpp +++ b/PySide/QtCore/glue/qobject_connect.cpp @@ -13,13 +13,13 @@ static bool getReceiver(QObject *source, const char* signal, PyObject* callback, bool forceGlobalReceiver = false; if (PyMethod_Check(callback)) { *self = PyMethod_GET_SELF(callback); - if (Shiboken::Converter<QObject*>::checkType(*self)) - *receiver = Shiboken::Converter<QObject*>::toCpp(*self); + if (%CHECKTYPE[QObject*](*self)) + *receiver = %CONVERTTOCPP[QObject*](*self); forceGlobalReceiver = isDecorator(callback, *self); } else if (PyCFunction_Check(callback)) { *self = PyCFunction_GET_SELF(callback); - if (*self && Shiboken::Converter<QObject*>::checkType(*self)) - *receiver = Shiboken::Converter<QObject*>::toCpp(*self); + if (*self && %CHECKTYPE[QObject*](*self)) + *receiver = %CONVERTTOCPP[QObject*](*self); } else if (PyCallable_Check(callback)) { // Ok, just a callable object *receiver = 0; diff --git a/PySide/QtCore/qbool_conversions.h b/PySide/QtCore/qbool_conversions.h deleted file mode 100644 index f4fb43fa6..000000000 --- a/PySide/QtCore/qbool_conversions.h +++ /dev/null @@ -1,16 +0,0 @@ -namespace Shiboken { -template <> -struct Converter<QBool> : public ValueTypeConverter<QBool> -{ - using ValueTypeConverter<QBool>::toPython; - - static PyObject* toPython(const QBool& cppobj) - { - return PyBool_FromLong((bool) cppobj); - } - static QBool toCpp(PyObject* pyobj) - { - return QBool(pyobj == Py_True); - } -}; -} diff --git a/PySide/QtCore/qbytearray_conversions.h b/PySide/QtCore/qbytearray_conversions.h deleted file mode 100644 index d776d82c4..000000000 --- a/PySide/QtCore/qbytearray_conversions.h +++ /dev/null @@ -1,44 +0,0 @@ -namespace Shiboken { - -inline bool Converter<QByteArray>::checkType(PyObject* pyObj) -{ - return ValueTypeConverter<QByteArray>::checkType(pyObj); -} - -inline bool Converter<QByteArray>::isConvertible(PyObject* pyObj) -{ - if (ValueTypeConverter<QByteArray>::isConvertible(pyObj)) - return true; - SbkObjectType* shiboType = reinterpret_cast<SbkObjectType*>(SbkType< ::QByteArray >()); - return Shiboken::Converter<const char *>::checkType(pyObj) - || PyBytes_Check(pyObj) - || (ObjectType::isExternalConvertible(shiboType, pyObj)); -} - -inline QByteArray Converter<QByteArray>::toCpp(PyObject* pyObj) -{ - if (pyObj == Py_None) { - return 0; - } else if (PyObject_TypeCheck(pyObj, SbkType<QByteArray>())) { - return *Converter<QByteArray*>::toCpp(pyObj); - } else if (PyBytes_Check(pyObj)) { - return QByteArray(PyBytes_AS_STRING(pyObj), PyBytes_GET_SIZE(pyObj)); - } else if (PyUnicode_Check(pyObj)) { - Shiboken::AutoDecRef data(PyUnicode_AsASCIIString(pyObj)); - if (!data.isNull()) - return QByteArray(PyBytes_AsString(data.object()), PyBytes_GET_SIZE(data.object())); - else - return QByteArray(); - } else if (Shiboken::String::check(pyObj)) { - return QByteArray(Shiboken::String::toCString(pyObj)); - } else { - return ValueTypeConverter<QByteArray>::toCpp(pyObj); - } -} - -inline PyObject* Converter<QByteArray>::toPython(const ::QByteArray& cppObj) -{ - return ValueTypeConverter<QByteArray>::toPython(cppObj); -} - -} diff --git a/PySide/QtCore/qchar_conversions.h b/PySide/QtCore/qchar_conversions.h deleted file mode 100644 index f79bac3c7..000000000 --- a/PySide/QtCore/qchar_conversions.h +++ /dev/null @@ -1,35 +0,0 @@ -namespace Shiboken { - -template<> -struct Converter<QChar> -{ - static bool checkType(PyObject* pyObj) - { - return Shiboken::String::check(pyObj) && (Shiboken::String::len(pyObj) == 1); - } - - static bool isConvertible(PyObject* pyObj) - { - return (Shiboken::String::check(pyObj) && (Shiboken::String::len(pyObj) == 1)) - || pyObj == Py_None - || PyInt_Check(pyObj); - } - - static QChar toCpp(PyObject* pyObj) - { - if (Shiboken::String::check(pyObj) && (Shiboken::String::len(pyObj) == 1)) - return QChar(Shiboken::Converter<char >::toCpp(pyObj)); - else if (PyInt_Check(pyObj)) - return QChar(Shiboken::Converter<int >::toCpp(pyObj)); - return QChar(); - } - - static PyObject* toPython(void* cppObj) { return toPython(*reinterpret_cast<QChar*>(cppObj)); } - static PyObject* toPython(const QChar& cppObj) - { - wchar_t c = (wchar_t)cppObj.unicode(); - PyObject* pyObj = PyUnicode_FromWideChar(&c, 1); - return pyObj; - } -}; -} diff --git a/PySide/QtCore/qdate_conversions.h b/PySide/QtCore/qdate_conversions.h deleted file mode 100644 index 0d97a057a..000000000 --- a/PySide/QtCore/qdate_conversions.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifdef IS_PY3K -#define PySideDateTime_IMPORT PyDateTime_IMPORT -#else -#define PySideDateTime_IMPORT \ - PyDateTimeAPI = (PyDateTime_CAPI*) PyCObject_Import((char*)"datetime", \ - (char*)"datetime_CAPI") -#endif - -namespace Shiboken { - -inline bool Converter<QDate>::checkType(PyObject* pyObj) -{ - return ValueTypeConverter<QDate>::checkType(pyObj); -} - -inline PyObject* Converter<QDate>::toPython(const ::QDate& cppObj) -{ - return ValueTypeConverter<QDate>::toPython(cppObj); -} - -inline bool Converter<QDate>::isConvertible(PyObject* pyObj) -{ - if (ValueTypeConverter<QDate>::isConvertible(pyObj)) - return true; - - if (!PyDateTimeAPI) - PySideDateTime_IMPORT; - - SbkObjectType* shiboType = reinterpret_cast<SbkObjectType*>(SbkType< ::QDate >()); - return PyDate_Check(pyObj) || ObjectType::isExternalConvertible(shiboType, pyObj); -} - -inline QDate Converter<QDate>::toCpp(PyObject* pyObj) -{ - if (!PyDateTimeAPI) - PySideDateTime_IMPORT; - - if (pyObj == Py_None) { - return QDate(); - } else if (PyObject_TypeCheck(pyObj, SbkType<QDate>())) { - return *Converter<QDate*>::toCpp(pyObj); - } else if (PyDate_Check(pyObj)) { - int day = PyDateTime_GET_DAY(pyObj); - int month = PyDateTime_GET_MONTH(pyObj); - int year = PyDateTime_GET_YEAR(pyObj); - return QDate(year, month, day); - } else { - return ValueTypeConverter<QDate>::toCpp(pyObj); - } -} - - -} diff --git a/PySide/QtCore/qdatetime_conversions.h b/PySide/QtCore/qdatetime_conversions.h deleted file mode 100644 index bcf9ad3fe..000000000 --- a/PySide/QtCore/qdatetime_conversions.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifdef IS_PY3K -#define PySideDateTime_IMPORT PyDateTime_IMPORT -#else -#define PySideDateTime_IMPORT \ - PyDateTimeAPI = (PyDateTime_CAPI*) PyCObject_Import((char*)"datetime", \ - (char*)"datetime_CAPI") -#endif -namespace Shiboken { - -inline bool Converter<QDateTime>::checkType(PyObject* pyObj) -{ - return ValueTypeConverter<QDateTime>::checkType(pyObj); -} - -inline PyObject* Converter<QDateTime>::toPython(const ::QDateTime& cppObj) -{ - return ValueTypeConverter<QDateTime>::toPython(cppObj); -} - -inline bool Converter<QDateTime>::isConvertible(PyObject* pyObj) -{ - if (ValueTypeConverter<QDateTime>::isConvertible(pyObj)) - return true; - - if (!PyDateTimeAPI) - PySideDateTime_IMPORT; - - SbkObjectType* shiboType = reinterpret_cast<SbkObjectType*>(SbkType< ::QDateTime >()); - return PyDateTime_Check(pyObj) || ObjectType::isExternalConvertible(shiboType, pyObj); -} - - -inline QDateTime Converter<QDateTime>::toCpp(PyObject* pyObj) -{ - if (!PyDateTimeAPI) - PySideDateTime_IMPORT; - - if (pyObj == Py_None) { - return QDateTime(); - } else if (PyObject_TypeCheck(pyObj, SbkType<QDateTime>())) { - return *Converter<QDateTime*>::toCpp(pyObj); - } else if (PyDateTime_Check(pyObj)) { - int day = PyDateTime_GET_DAY(pyObj); - int month = PyDateTime_GET_MONTH(pyObj); - int year = PyDateTime_GET_YEAR(pyObj); - int hour = PyDateTime_DATE_GET_HOUR(pyObj); - int min = PyDateTime_DATE_GET_MINUTE(pyObj); - int sec = PyDateTime_DATE_GET_SECOND(pyObj); - int usec = PyDateTime_DATE_GET_MICROSECOND(pyObj); - return QDateTime(QDate(year, month, day), QTime(hour, min, sec, usec/1000)); - } else { - return ValueTypeConverter<QDateTime>::toCpp(pyObj); - } -} - -} diff --git a/PySide/QtCore/qhash_conversions.h b/PySide/QtCore/qhash_conversions.h deleted file mode 100644 index f9e2e4217..000000000 --- a/PySide/QtCore/qhash_conversions.h +++ /dev/null @@ -1,4 +0,0 @@ -namespace Shiboken { -template<typename KT, typename VT> -struct Converter<QHash<KT, VT> > : QtDictConverter<QHash<KT, VT> > {}; -} diff --git a/PySide/QtCore/qlist_conversions.h b/PySide/QtCore/qlist_conversions.h deleted file mode 100644 index cb1d26bd5..000000000 --- a/PySide/QtCore/qlist_conversions.h +++ /dev/null @@ -1,4 +0,0 @@ -namespace Shiboken { -template<typename T> -struct Converter<QList<T> > : StdListConverter<QList<T> > {}; -} diff --git a/PySide/QtCore/qmap_conversions.h b/PySide/QtCore/qmap_conversions.h deleted file mode 100644 index 3153fae92..000000000 --- a/PySide/QtCore/qmap_conversions.h +++ /dev/null @@ -1,5 +0,0 @@ -namespace Shiboken { -template<typename KT, typename VT> -struct Converter<QMap<KT, VT> > : QtDictConverter<QMap<KT, VT> > { -}; -} diff --git a/PySide/QtCore/qmultimap_conversions.h b/PySide/QtCore/qmultimap_conversions.h deleted file mode 100644 index 43abd84df..000000000 --- a/PySide/QtCore/qmultimap_conversions.h +++ /dev/null @@ -1,5 +0,0 @@ -namespace Shiboken { -template<typename KT, typename VT> -struct Converter<QMultiMap<KT, VT> > : QtMultiMapConverter<QMap<KT, VT> > { -}; -} diff --git a/PySide/QtCore/qpair_conversions.h b/PySide/QtCore/qpair_conversions.h deleted file mode 100644 index 99e9cd8b8..000000000 --- a/PySide/QtCore/qpair_conversions.h +++ /dev/null @@ -1,4 +0,0 @@ -namespace Shiboken { -template<typename FT, typename ST> -struct Converter<QPair<FT, ST> > : StdPairConverter<QPair<FT, ST> > {}; -} diff --git a/PySide/QtCore/qset_conversions.h b/PySide/QtCore/qset_conversions.h deleted file mode 100644 index c46fef00b..000000000 --- a/PySide/QtCore/qset_conversions.h +++ /dev/null @@ -1,4 +0,0 @@ -namespace Shiboken { -template<typename T> -struct Converter<QSet<T> > : QSequenceConverter<QSet<T> > {}; -} diff --git a/PySide/QtCore/qstack_conversion.h b/PySide/QtCore/qstack_conversion.h deleted file mode 100644 index 709a91891..000000000 --- a/PySide/QtCore/qstack_conversion.h +++ /dev/null @@ -1,4 +0,0 @@ -namespace Shiboken { -template<typename T> -struct Converter<QStack<T> > : StdListConverter<QStack<T> > {}; -} diff --git a/PySide/QtCore/qstring_conversions.h b/PySide/QtCore/qstring_conversions.h deleted file mode 100644 index 33c393b1f..000000000 --- a/PySide/QtCore/qstring_conversions.h +++ /dev/null @@ -1,49 +0,0 @@ -namespace Shiboken { - -template<> -inline PyTypeObject* SbkType<QString>() -{ - return &PyUnicode_Type; -} - -template<> -struct Converter<QString> -{ - static bool checkType(PyObject* pyObj) - { - return Shiboken::String::check(pyObj); - } - - static bool isConvertible(PyObject* pyObj) - { - return Shiboken::String::isConvertible(pyObj); - } - - static QString toCpp(PyObject* pyObj) - { - if (PyUnicode_Check(pyObj)) { - Py_UNICODE* unicode = PyUnicode_AS_UNICODE(pyObj); - #if defined(Py_UNICODE_WIDE) || defined(__CYGWIN__) - // cast as Py_UNICODE can be a different type - return QString::fromUcs4(reinterpret_cast<const uint*>(unicode)); - #else - return QString::fromUtf16(unicode, PyUnicode_GET_SIZE(pyObj)); - #endif - } else if (Shiboken::String::check(pyObj)) { - return QString(Shiboken::String::toCString(pyObj)); - } - return QString(); - } - - static PyObject* toPython(void* cppObj) { return toPython(*reinterpret_cast<QString*>(cppObj)); } - static PyObject* toPython(const QString& cppObj) - { - const int N = cppObj.length(); - wchar_t* str = new wchar_t[N]; - cppObj.toWCharArray(str); - PyObject* pyObj = PyUnicode_FromWideChar(str, N); - delete[] str; - return pyObj; - } -}; -} diff --git a/PySide/QtCore/qstringlist_conversions.h b/PySide/QtCore/qstringlist_conversions.h deleted file mode 100644 index 6075c1672..000000000 --- a/PySide/QtCore/qstringlist_conversions.h +++ /dev/null @@ -1,5 +0,0 @@ -namespace Shiboken -{ -template<> -struct Converter<QStringList> : StdListConverter<QStringList> {}; -} diff --git a/PySide/QtCore/qstringref_conversions.h b/PySide/QtCore/qstringref_conversions.h deleted file mode 100644 index db3eefcae..000000000 --- a/PySide/QtCore/qstringref_conversions.h +++ /dev/null @@ -1,18 +0,0 @@ -namespace Shiboken { - -template<> -struct Converter<QStringRef> : public Converter<QString> -{ - static PyObject* toPython(void* cppObj) { return toPython(*reinterpret_cast<QStringRef*>(cppObj)); } - - static PyObject* toPython(const QStringRef& cppObj) - { - return Converter<QString>::toPython(cppObj.toString()); - } - - static QStringRef toCpp(PyObject* pyObj) - { - return QStringRef(); - } -}; -} diff --git a/PySide/QtCore/qtime_conversions.h b/PySide/QtCore/qtime_conversions.h deleted file mode 100644 index 4600ef758..000000000 --- a/PySide/QtCore/qtime_conversions.h +++ /dev/null @@ -1,45 +0,0 @@ -namespace Shiboken { - -inline bool Converter<QTime>::checkType(PyObject* pyObj) -{ - return ValueTypeConverter<QTime>::checkType(pyObj); -} - -inline PyObject* Converter<QTime>::toPython(const ::QTime& cppObj) -{ - return ValueTypeConverter<QTime>::toPython(cppObj); -} - -inline bool Converter<QTime>::isConvertible(PyObject* pyObj) -{ - if (ValueTypeConverter<QTime>::isConvertible(pyObj)) - return true; - - if (!PyDateTimeAPI) - PyDateTime_IMPORT; - - SbkObjectType* shiboType = reinterpret_cast<SbkObjectType*>(SbkType< ::QTime >()); - return PyTime_Check(pyObj) || ObjectType::isExternalConvertible(shiboType, pyObj); -} - -inline QTime Converter<QTime>::toCpp(PyObject* pyObj) -{ - if (!PyDateTimeAPI) - PyDateTime_IMPORT; - - if (pyObj == Py_None) { - return QTime(); - } else if (PyObject_TypeCheck(pyObj, SbkType<QTime>())) { - return *Converter<QTime*>::toCpp(pyObj); - } else if (PyTime_Check(pyObj)) { - int hour = PyDateTime_TIME_GET_HOUR(pyObj); - int min = PyDateTime_TIME_GET_MINUTE(pyObj); - int sec = PyDateTime_TIME_GET_SECOND(pyObj); - int usec = PyDateTime_TIME_GET_MICROSECOND(pyObj); - return QTime(hour, min, sec, usec/1000); - } else { - return ValueTypeConverter<QTime>::toCpp(pyObj); - } -} - -} diff --git a/PySide/QtCore/qvariant_conversions.h b/PySide/QtCore/qvariant_conversions.h deleted file mode 100644 index eda2acce9..000000000 --- a/PySide/QtCore/qvariant_conversions.h +++ /dev/null @@ -1,219 +0,0 @@ -namespace Shiboken { - -template<> -struct Converter<QVariant> -{ - static bool checkType(PyObject* pyObj) - { - return false; // lets avoid the chaos - } - - // all types are convertible to QVariant - static bool isConvertible(PyObject* pyObj) - { - return true; - } - - static const char* resolveMetaType(PyTypeObject* type, int* typeId) - { - if (PyObject_TypeCheck(type, &SbkObjectType_Type)) { - SbkObjectType* sbkType = reinterpret_cast<SbkObjectType*>(type); - const char* typeName = Shiboken::ObjectType::getOriginalName(sbkType); - if (!typeName) - return 0; - bool valueType = '*' != typeName[qstrlen(typeName) - 1]; - - // Do not convert user type of value - if (valueType && Shiboken::ObjectType::isUserType(type)) - return 0; - - int obTypeId = QMetaType::type(typeName); - if (obTypeId) { - *typeId = obTypeId; - return typeName; - } - - // Do not resolve types to value type - if (valueType) - return 0; - - // find in base types - if (type->tp_base) { - return resolveMetaType(type->tp_base, typeId); - } else if (type->tp_bases) { - int size = PyTuple_GET_SIZE(type->tp_bases); - for(int i=0; i < size; i++){ - const char* derivedName = resolveMetaType(reinterpret_cast<PyTypeObject*>(PyTuple_GET_ITEM(type->tp_bases, i)), typeId); - if (derivedName) - return derivedName; - } - } - } - *typeId = 0; - return 0; - } - - static QVariant toCpp(PyObject* pyObj) - { - using namespace Shiboken; - - // Primitive types - if (Converter<bool>::checkType(pyObj)) { - // QVariant(bool) - return QVariant(Converter<bool>::toCpp(pyObj)); - } else if (pyObj == Py_None) { - // QVariant() - return QVariant(); - } else if (Converter<QString>::checkType(pyObj)) { - // QVariant(const char*) - return QVariant(Converter<QString>::toCpp(pyObj)); - } else if (Converter<QByteArray>::checkType(pyObj)) { - // QVariant(QByteArray) - return QVariant(Converter<QByteArray>::toCpp(pyObj)); - } else if (PyFloat_CheckExact(pyObj)) { - // QVariant(double) - return QVariant(Converter<double>::toCpp(pyObj)); - } else if (PyInt_Check(pyObj)) { - // QVariant(int) - return QVariant(Converter<int>::toCpp(pyObj)); - } else if (PyLong_CheckExact(pyObj)) { - // QVariant(qlonglong) - return QVariant(Converter<qlonglong>::toCpp(pyObj)); - } else if (Shiboken::isShibokenEnum(pyObj)) { - // QVariant(enum) - return QVariant(Converter<int>::toCpp(pyObj)); - } else if (PyNumber_Check(pyObj)) { - Shiboken::AutoDecRef pyValue(PyNumber_Long(pyObj)); - return QVariant((int)PyLong_AsLong(pyValue.object())); - } else if (Shiboken::Object::checkType(pyObj)) { - // a class supported by QVariant? - int typeCode; - const char* typeName = resolveMetaType(pyObj->ob_type, &typeCode); - if (typeCode && typeName) { - Shiboken::TypeResolver* tr = Shiboken::TypeResolver::get(typeName); - QVariant var(typeCode, (void*)0); - void* args[] = { var.data() }; - tr->toCpp(pyObj, args); - return var; - } - } - - // Sequence and dictionary - if (PyDict_Check(pyObj)) { - QVariant ret = convertToVariantMap(pyObj); - if (ret.isValid()) - return ret; - } else if (PySequence_Check(pyObj)) { - return convertToVariantList(pyObj); - } - - // Is a shiboken type not known by Qt - return QVariant::fromValue<PySide::PyObjectWrapper>(pyObj); - } - - static PyObject* toPython(void* cppObj) - { - return toPython(*reinterpret_cast<QVariant*>(cppObj)); - } - - static PyObject* toPython(const QVariant& cppObj) - { - if (cppObj.isValid()) { - if (qstrcmp(cppObj.typeName(), "QVariantList") == 0) - return Converter<QList<QVariant> >::toPython(cppObj.value<QVariantList>()); - - if (qstrcmp(cppObj.typeName(), "QStringList") == 0) - return Converter<QList<QString> >::toPython(cppObj.value<QStringList>()); - - if (qstrcmp(cppObj.typeName(), "QVariantMap") == 0) - return Converter<QMap<QString, QVariant> >::toPython(cppObj.value<QVariantMap>()); - - Shiboken::TypeResolver* tr = Shiboken::TypeResolver::get(cppObj.typeName()); - if (tr) - return tr->toPython(const_cast<void*>(cppObj.data())); - } - Py_RETURN_NONE; - } - - static QVariant convertToValueList(PyObject* list) - { - if (PySequence_Size(list) < 1) - return QVariant(); - - Shiboken::AutoDecRef element(PySequence_GetItem(list, 0)); - int typeId; - const char* typeName = resolveMetaType(element.cast<PyTypeObject*>(), &typeId); - if (typeName) { - QByteArray listTypeName("QList<"); - listTypeName += typeName; - listTypeName += '>'; - typeId = QMetaType::type(listTypeName); - if (typeId > 0) { - Shiboken::TypeResolver* tr = Shiboken::TypeResolver::get(listTypeName); - if (!tr) { - qWarning() << "TypeResolver for :" << listTypeName << "not registered."; - } else { - QVariant var(typeId, (void*)0); - void* args[] = { var.data(), 0 }; - tr->toCpp(list, args); - return var; - } - } - } - return QVariant(); - } - - static QVariant convertToVariantMap(PyObject* map) - { - PyObject *key, *value; - Py_ssize_t pos = 0; - AutoDecRef keys(PyDict_Keys(map)); - bool keysIsString = isStringList(keys); - if (keysIsString) { - QMap<QString, QVariant> ret; - while (PyDict_Next(map, &pos, &key, &value)) - ret.insert(Converter<QString>::toCpp(key), toCpp(value)); - return QVariant(ret); - } else { - return QVariant(); - } - } - - static bool isStringList(PyObject *list) - { - bool allString = true; - AutoDecRef fast(PySequence_Fast(list, "Failed to convert QVariantList")); - Py_ssize_t size = PySequence_Fast_GET_SIZE(fast.object()); - for(int i=0; i < size; i++) { - PyObject* item = PySequence_Fast_GET_ITEM(fast.object(), i); - if (!Converter<QString>::checkType(item)) { - allString = false; - break; - } - } - return allString; - } - - static QVariant convertToVariantList(PyObject* list) - { - bool allString = isStringList(list); - if (allString) { - QStringList lst = Converter<QList<QString> >::toCpp(list); - return QVariant(lst); - } else { - QVariant valueList = convertToValueList(list); - if (valueList.isValid()) - return valueList; - QList<QVariant> lst; - AutoDecRef fast(PySequence_Fast(list, "Failed to convert QVariantList")); - Py_ssize_t size = PySequence_Fast_GET_SIZE(fast.object()); - for(int i=0; i < size; i++) { - PyObject* item = PySequence_Fast_GET_ITEM(fast.object(), i); - lst.append(toCpp(item)); - } - return QVariant(lst); - } - Q_ASSERT(false); - } -}; -} diff --git a/PySide/QtCore/qvariant_type_conversions.h b/PySide/QtCore/qvariant_type_conversions.h deleted file mode 100644 index 9fad1f183..000000000 --- a/PySide/QtCore/qvariant_type_conversions.h +++ /dev/null @@ -1,87 +0,0 @@ -namespace Shiboken { - -template<> -struct Converter<QVariant::Type> -{ - static bool checkType(PyObject* pyObj) - { - return pyObj == Py_None || PyType_Check(pyObj) || Converter<QString>::checkType(pyObj); - } - - static bool isConvertible(PyObject* pyObj) - { - return checkType(pyObj); - } - - static QVariant::Type toCpp(PyObject* pyObj) - { - const char* typeName = 0; - if (pyObj == Py_None) - return QVariant::Invalid; - - if (Shiboken::String::checkType(reinterpret_cast<PyTypeObject*>(pyObj))) - typeName = "QString"; - - - else if (pyObj == reinterpret_cast<PyObject*>(&PyFloat_Type)) - typeName = "double"; // float is a UserType in QVariant. - else if (pyObj == reinterpret_cast<PyObject*>(&PyLong_Type)) - typeName = "int"; // long is a UserType in QVariant. - else if (PyType_Check(pyObj)) { - if (pyObj->ob_type == &SbkObjectType_Type) - typeName = Shiboken::ObjectType::getOriginalName(reinterpret_cast<SbkObjectType*>(pyObj)); - else - typeName = reinterpret_cast<PyTypeObject*>(pyObj)->tp_name; - } - else if (Shiboken::String::check(pyObj)) - typeName = Shiboken::String::toCString(pyObj); - else if (PyDict_Check(pyObj) && checkAllStringKeys(pyObj)) - typeName = "QVariantMap"; - else if (PySequence_Check(pyObj)) - if (isStringList(pyObj)) - typeName = "QStringList"; - else - typeName = "QVariantList"; - else - Q_ASSERT(false); - - return QVariant::nameToType(typeName); - } - - static PyObject* toPython(void* cppObj) { return toPython(*reinterpret_cast<QVariant::Type*>(cppObj)); } - static PyObject* toPython(const QVariant::Type& cppObj) - { - const char* typeName = QVariant::typeToName(cppObj); - PyObject* pyObj; - if (!typeName) { - pyObj = Py_None; - } else { - Shiboken::TypeResolver* tr = Shiboken::TypeResolver::get(typeName); - pyObj = tr ? reinterpret_cast<PyObject*>(tr->pythonType()) : Py_None; - } - Py_INCREF(pyObj); - return pyObj; - } - - static bool isStringList(PyObject* list) - { - bool allString = true; - AutoDecRef fast(PySequence_Fast(list, "Failed to convert QVariantList")); - Py_ssize_t size = PySequence_Fast_GET_SIZE(fast.object()); - for(int i=0; i < size; i++) { - PyObject* item = PySequence_Fast_GET_ITEM(fast.object(), i); - if (!Converter<QString>::checkType(item)) { - allString = false; - break; - } - } - return allString; - } - - static bool checkAllStringKeys(PyObject* dict) - { - AutoDecRef keys(PyDict_Keys(dict)); - return isStringList(keys); - } -}; -} diff --git a/PySide/QtCore/qvector_conversions.h b/PySide/QtCore/qvector_conversions.h deleted file mode 100644 index 0857036ae..000000000 --- a/PySide/QtCore/qvector_conversions.h +++ /dev/null @@ -1,4 +0,0 @@ -namespace Shiboken { -template<typename T> -struct Converter<QVector<T> > : StdListConverter<QVector<T> > {}; -} diff --git a/PySide/QtCore/typesystem_core_common.xml b/PySide/QtCore/typesystem_core_common.xml index 965433b8d..aa39e9536 100644 --- a/PySide/QtCore/typesystem_core_common.xml +++ b/PySide/QtCore/typesystem_core_common.xml @@ -153,7 +153,7 @@ <include file-name="signalmanager.h" location="global"/> </primitive-type> <primitive-type name="QBool" target-lang-api-name="PyBool"> - <conversion-rule file="qbool_conversions.h"> + <conversion-rule> <native-to-target> return PyBool_FromLong((bool)%in); </native-to-target> @@ -180,7 +180,7 @@ <primitive-type name="QString" target-lang-api-name="PyUnicode"> <include file-name="QString" location="global"/> - <conversion-rule file="qstring_conversions.h"> + <conversion-rule> <native-to-target> const int N = %in.length(); wchar_t* str = new wchar_t[N]; @@ -213,8 +213,7 @@ </primitive-type> <primitive-type name="QStringRef"> - <include file-name="datetime.h" location="global"/> - <conversion-rule file="qstringref_conversions.h"> + <conversion-rule> <native-to-target> const int N = %in.toString().length(); wchar_t* str = new wchar_t[N]; @@ -231,7 +230,7 @@ </conversion-rule> </primitive-type> <primitive-type name="QChar"> - <conversion-rule file="qchar_conversions.h"> + <conversion-rule> <native-to-target> wchar_t c = (wchar_t)%in.unicode(); return PyUnicode_FromWideChar(&c, 1); @@ -254,7 +253,7 @@ <primitive-type name="QVariant" target-lang-api-name="PyObject"> <include file-name="typeresolver.h" location="global"/> - <conversion-rule file="qvariant_conversions.h"> + <conversion-rule> <native-to-target> if (!%in.isValid()) Py_RETURN_NONE; @@ -448,7 +447,7 @@ </inject-code> <primitive-type name="QVariant::Type" default-constructor="QVariant::Invalid"> - <conversion-rule file="qvariant_type_conversions.h"> + <conversion-rule> <native-to-target> const char* typeName = QVariant::typeToName(%in); PyObject* %out; @@ -524,7 +523,7 @@ <primitive-type name="QStringList"> <include file-name="QStringList" location="global"/> - <conversion-rule file="qstringlist_conversions.h"> + <conversion-rule> <native-to-target> <insert-template name="cpplist_to_pylist_convertion"> <replace from="%INTYPE_0" to="QString" /> @@ -560,7 +559,7 @@ <container-type name="QSet" type="set"> <include file-name="QSet" location="global"/> - <conversion-rule file="qset_conversions.h"> + <conversion-rule> <native-to-target> <insert-template name="cpplist_to_pylist_convertion"/> </native-to-target> @@ -574,7 +573,7 @@ <container-type name="QList" type="list"> <include file-name="QList" location="global"/> - <conversion-rule file="qlist_conversions.h"> + <conversion-rule> <native-to-target> <insert-template name="cpplist_to_pylist_convertion"/> </native-to-target> @@ -588,7 +587,7 @@ <container-type name="QVector" type="vector"> <include file-name="QVector" location="global"/> - <conversion-rule file="qvector_conversions.h"> + <conversion-rule> <native-to-target> <insert-template name="cpplist_to_pylist_convertion"/> </native-to-target> @@ -603,7 +602,7 @@ <container-type name="QStack" type="stack"> <include file-name="QStack" location="global"/> - <conversion-rule file="qstack_conversion.h"> + <conversion-rule> <native-to-target> <insert-template name="cpplist_to_pylist_convertion"/> </native-to-target> @@ -669,7 +668,7 @@ <container-type name="QHash" type="hash"> <include file-name="QHash" location="global"/> <include file-name="pysideconversions.h" location="global"/> - <conversion-rule file="qhash_conversions.h"> + <conversion-rule> <native-to-target> <insert-template name="cppmap_to_pymap_convertion"/> </native-to-target> @@ -682,7 +681,7 @@ </container-type> <container-type name="QMap" type="map"> <include file-name="QMap" location="global"/> - <conversion-rule file="qmap_conversions.h"> + <conversion-rule> <native-to-target> <insert-template name="cppmap_to_pymap_convertion"/> </native-to-target> @@ -695,7 +694,7 @@ </container-type> <container-type name="QMultiMap" type="multi-map"> <include file-name="QMultiMap" location="global"/> - <conversion-rule file="qmultimap_conversions.h"> + <conversion-rule> <native-to-target> <insert-template name="cppmap_to_pymap_convertion"/> </native-to-target> @@ -709,7 +708,7 @@ <container-type name="QPair" type="pair"> <include file-name="QPair" location="global"/> - <conversion-rule file="qpair_conversions.h"> + <conversion-rule> <native-to-target> PyObject* %out = PyTuple_New(2); PyTuple_SET_ITEM(%out, 0, %CONVERTTOPYTHON[%INTYPE_0](%in.first)); @@ -1110,9 +1109,15 @@ <value-type name="QByteArrayMatcher"/> <value-type name="QDate" hash-function="PySide::hash" > <template name="pydatetime_importandcheck_function"> + #ifdef IS_PY3K + #define PySideDateTime_IMPORT PyDateTime_IMPORT + #else + #define PySideDateTime_IMPORT \ + (PyDateTimeAPI = (PyDateTime_CAPI*) PyCObject_Import((char*)"datetime", \ + (char*)"datetime_CAPI")) + #endif static bool PyDateTime_ImportAndCheck(PyObject* pyIn) { - if (!PyDateTimeAPI) - PyDateTime_IMPORT; + if (!PyDateTimeAPI) PySideDateTime_IMPORT; return $DATETIMETYPE_Check(pyIn); } </template> @@ -1121,7 +1126,7 @@ <replace from="$DATETIMETYPE" to="PyDate" /> </insert-template> </inject-code> - <conversion-rule file="qdate_conversions.h"> + <conversion-rule> <target-to-native> <add-conversion type="Py_None"> %out = %OUTTYPE(); @@ -1157,8 +1162,8 @@ </add-function> <add-function signature="toPython()" return-type="PyObject"> <inject-code class="target" position="beginning"> - if (!PyDateTimeAPI) PyDateTime_IMPORT; - %PYARG_0 = PyDate_FromDate(%CPPSELF.year(), %CPPSELF.month(), %CPPSELF.day()); + if (!PyDateTimeAPI) PySideDateTime_IMPORT; + %PYARG_0 = PyDate_FromDate(%CPPSELF.year(), %CPPSELF.month(), %CPPSELF.day()); </inject-code> </add-function> <modify-function signature="getDate(int*,int*,int*)" > @@ -1211,7 +1216,7 @@ <replace from="$DATETIMETYPE" to="PyDateTime" /> </insert-template> </inject-code> - <conversion-rule file="qdatetime_conversions.h"> + <conversion-rule> <target-to-native> <add-conversion type="Py_None"> %out = %OUTTYPE(); @@ -1260,10 +1265,10 @@ </add-function> <add-function signature="toPython()" return-type="PyObject"> <inject-code class="target" position="beginning"> - QDate date = %CPPSELF.date(); - QTime time = %CPPSELF.time(); - if (!PyDateTimeAPI) PyDateTime_IMPORT; - %PYARG_0 = PyDateTime_FromDateAndTime(date.year(), date.month(), date.day(), time.hour(), time.minute(), time.second(), time.msec()*1000); + QDate date = %CPPSELF.date(); + QTime time = %CPPSELF.time(); + if (!PyDateTimeAPI) PySideDateTime_IMPORT; + %PYARG_0 = PyDateTime_FromDateAndTime(date.year(), date.month(), date.day(), time.hour(), time.minute(), time.second(), time.msec()*1000); </inject-code> </add-function> </value-type> @@ -1570,7 +1575,7 @@ <replace from="$DATETIMETYPE" to="PyTime" /> </insert-template> </inject-code> - <conversion-rule file="qtime_conversions.h"> + <conversion-rule> <target-to-native> <add-conversion type="Py_None"> %out = %OUTTYPE(); @@ -1607,8 +1612,8 @@ </add-function> <add-function signature="toPython()" return-type="PyObject"> <inject-code class="target" position="beginning"> - if (!PyDateTimeAPI) PyDateTime_IMPORT; - %PYARG_0 = PyTime_FromTime(%CPPSELF.hour(), %CPPSELF.minute(), %CPPSELF.second(), %CPPSELF.msec()*1000); + if (!PyDateTimeAPI) PySideDateTime_IMPORT; + %PYARG_0 = PyTime_FromTime(%CPPSELF.hour(), %CPPSELF.minute(), %CPPSELF.second(), %CPPSELF.msec()*1000); </inject-code> </add-function> </value-type> @@ -2259,7 +2264,7 @@ </add-function> </value-type> <value-type name="QByteArray" hash-function="qHash"> - <conversion-rule file="qbytearray_conversions.h"> + <conversion-rule> <target-to-native> <add-conversion type="Py_None"> %out = %OUTTYPE(); diff --git a/PySide/QtCore/typesystem_core_win.xml b/PySide/QtCore/typesystem_core_win.xml index f4b8cab24..26c7a82a2 100644 --- a/PySide/QtCore/typesystem_core_win.xml +++ b/PySide/QtCore/typesystem_core_win.xml @@ -21,7 +21,7 @@ <typesystem package="PySide.QtCore"> <primitive-type name="Qt::HANDLE" target-lang-api-name="PyObject" /> <primitive-type name="HWND"> - <conversion-rule file="glue/hwnd_conversions.h"> + <conversion-rule> <native-to-target> #ifdef IS_PY3K return PyCapsule_New(%in, 0, 0); |