diff --git a/CMakeLists.txt b/CMakeLists.txt index a7ffbd5..aa2d1e8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,8 @@ project(pysidebindings) cmake_minimum_required(VERSION 2.6) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Macros/ ${CMAKE_MODULE_PATH}) -find_package(Shiboken 1.1.1 REQUIRED) +find_package(GeneratorRunner 0.6.14 REQUIRED) +find_package(Shiboken 1.0.8 REQUIRED) find_package(Qt4 4.5.0 REQUIRED) find_file(GL_H "gl.h" PATH_SUFFIXES "GL") include(FindQt4Extra) @@ -31,7 +32,7 @@ endif() if(MSVC) set(CMAKE_CXX_FLAGS "/Zc:wchar_t- /GR /EHsc /DNOCOLOR /DWIN32 /D_WINDOWS /D_SCL_SECURE_NO_WARNINGS") else() - if(CMAKE_HOST_UNIX AND NOT CYGWIN) + if(CMAKE_HOST_UNIX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fvisibility=hidden -Wno-strict-aliasing") endif() set(CMAKE_CXX_FLAGS_DEBUG "-g") @@ -61,8 +62,8 @@ endif() set(BINDING_NAME PySide) set(BINDING_API_MAJOR_VERSION "1") -set(BINDING_API_MINOR_VERSION "1") -set(BINDING_API_MICRO_VERSION "1") +set(BINDING_API_MINOR_VERSION "0") +set(BINDING_API_MICRO_VERSION "8") set(BINDING_API_RELEASE_LEVEL "final") # alpha, beta, rc, or final set(BINDING_API_SERIAL 1) # leave as 0 when release level is final set(BINDING_API_VERSION "${BINDING_API_MAJOR_VERSION}.${BINDING_API_MINOR_VERSION}.${BINDING_API_MICRO_VERSION}" CACHE STRING "PySide version" FORCE) diff --git a/PySide/CMakeLists.txt b/PySide/CMakeLists.txt index d8371c0..62c8068 100644 --- a/PySide/CMakeLists.txt +++ b/PySide/CMakeLists.txt @@ -9,6 +9,9 @@ configure_file("${CMAKE_CURRENT_SOURCE_DIR}/global.h.in" configure_file("${CMAKE_CURRENT_SOURCE_DIR}/__init__.py.in" "${CMAKE_CURRENT_BINARY_DIR}/__init__.py" @ONLY) +execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/private.py" + "${CMAKE_BINARY_DIR}/PySide/private.py") + HAS_QT_MODULE(QT_QTCORE_FOUND QtCore) HAS_QT_MODULE(QT_QTGUI_FOUND QtGui) HAS_QT_MODULE(QT_QTNETWORK_FOUND QtNetwork) @@ -31,7 +34,7 @@ HAS_QT_MODULE(QT_PHONON_FOUND phonon) HAS_QT_MODULE(QT_QTDECLARATIVE_FOUND QtDeclarative) # install -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/__init__.py" +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/__init__.py" "${CMAKE_CURRENT_BINARY_DIR}/private.py" DESTINATION "${SITE_PACKAGE}/${BINDING_NAME}${pyside_SUFFIX}") install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/typesystem_templates.xml DESTINATION share/PySide${pyside_SUFFIX}/typesystems) diff --git a/PySide/QtCore/CMakeLists.txt b/PySide/QtCore/CMakeLists.txt index a2337c0..86df1d1 100644 --- a/PySide/QtCore/CMakeLists.txt +++ b/PySide/QtCore/CMakeLists.txt @@ -37,12 +37,14 @@ else() endif() if(ENABLE_WIN) - set(SPECIFIC_OS_FILES + set(QtCore_typesystem "typesystem_core_win.xml") + set(QtCore_extra_SRC ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/msg_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/point_wrapper.cpp ) else() - set(SPECIFIC_OS_FILES "") + set(QtCore_typesystem "typesystem_core.xml") + set(QtCore_extra_SRC "") endif() set(QtCore_SRC @@ -144,14 +146,10 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qxmlstreamreader_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qxmlstreamwriter_wrapper.cpp ${QtCore_46_SRC} ${QtCore_47_SRC} -${SPECIFIC_OS_FILES} +${QtCore_extra_SRC} ) -configure_file("${CMAKE_CURRENT_SOURCE_DIR}/typesystem_core.xml.in" - "${CMAKE_CURRENT_BINARY_DIR}/typesystem_core.xml" @ONLY) - -set(QtCore_typesystem_path "${QtCore_SOURCE_DIR}") - +set(QtCore_typesystem_path "") set(QtCore_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/ ${QT_INCLUDE_DIR} @@ -170,4 +168,4 @@ create_pyside_module(QtCore QtCore_typesystem_path QtCore_SRC QtCore_gluecode - ${CMAKE_CURRENT_BINARY_DIR}/typesystem_core.xml) + ${CMAKE_CURRENT_SOURCE_DIR}/${QtCore_typesystem}) diff --git a/PySide/QtCore/glue/hwnd_conversions.h b/PySide/QtCore/glue/hwnd_conversions.h new file mode 100644 index 0000000..65b95e2 --- /dev/null +++ b/PySide/QtCore/glue/hwnd_conversions.h @@ -0,0 +1,32 @@ +namespace Shiboken { +template <> +struct Converter +{ + static bool checkType(PyObject* pyObj) + { + return false; + } + + static bool isConvertible(PyObject* pyobj) + { + return PyCObject_Check(pyobj); + } + + static inline PyObject* toPython(void* cppobj) + { + // not supported + Q_ASSERT(true); + return 0; + } + + static PyObject* toPython(HWND cppobj) + { + return PyCObject_FromVoidPtr(cppobj, 0); + } + + static HWND toCpp(PyObject* pyobj) + { + return (HWND)PyCObject_AsVoidPtr(pyobj); + } +}; +} diff --git a/PySide/QtCore/glue/qbytearray_bufferprotocol.cpp b/PySide/QtCore/glue/qbytearray_bufferprotocol.cpp index acc7bb9..03ffcb4 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 = %CONVERTTOCPP[QByteArray*](self); + QByteArray* cppSelf = Shiboken::Converter::toCpp(self); *ptrptr = reinterpret_cast(cppSelf->data()); return cppSelf->size(); } diff --git a/PySide/QtCore/glue/qeasingcurve_glue.cpp b/PySide/QtCore/glue/qeasingcurve_glue.cpp index 7f56315..fd2dee0 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) { - Shiboken::Conversions::pythonToCppCopy(Shiboken::Conversions::PrimitiveTypeConverter(), result, &cppResult); + cppResult = Shiboken::Converter::toCpp(result); Py_DECREF(result); } Py_DECREF(args); diff --git a/PySide/QtCore/glue/qobject_connect.cpp b/PySide/QtCore/glue/qobject_connect.cpp index 96bcfb2..b46cbcf 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 (%CHECKTYPE[QObject*](*self)) - *receiver = %CONVERTTOCPP[QObject*](*self); + if (Shiboken::Converter::checkType(*self)) + *receiver = Shiboken::Converter::toCpp(*self); forceGlobalReceiver = isDecorator(callback, *self); } else if (PyCFunction_Check(callback)) { *self = PyCFunction_GET_SELF(callback); - if (*self && %CHECKTYPE[QObject*](*self)) - *receiver = %CONVERTTOCPP[QObject*](*self); + if (*self && Shiboken::Converter::checkType(*self)) + *receiver = Shiboken::Converter::toCpp(*self); } else if (PyCallable_Check(callback)) { // Ok, just a callable object *receiver = 0; diff --git a/PySide/QtCore/glue/qt_version.cpp b/PySide/QtCore/glue/qt_version.cpp new file mode 100644 index 0000000..66f8c00 --- /dev/null +++ b/PySide/QtCore/glue/qt_version.cpp @@ -0,0 +1,5 @@ +QList version = QByteArray(qVersion()).split('.'); +PyObject *pyQtVersion = Shiboken::makeTuple(version[0].toInt(), version[1].toInt(), version[2].toInt()); + +PyModule_AddStringConstant(module, "__version__", qVersion()); +PyModule_AddObject(module, "__version_info__", pyQtVersion); diff --git a/PySide/QtCore/qbool_conversions.h b/PySide/QtCore/qbool_conversions.h new file mode 100644 index 0000000..f4fb43f --- /dev/null +++ b/PySide/QtCore/qbool_conversions.h @@ -0,0 +1,16 @@ +namespace Shiboken { +template <> +struct Converter : public ValueTypeConverter +{ + using ValueTypeConverter::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 new file mode 100644 index 0000000..d776d82 --- /dev/null +++ b/PySide/QtCore/qbytearray_conversions.h @@ -0,0 +1,44 @@ +namespace Shiboken { + +inline bool Converter::checkType(PyObject* pyObj) +{ + return ValueTypeConverter::checkType(pyObj); +} + +inline bool Converter::isConvertible(PyObject* pyObj) +{ + if (ValueTypeConverter::isConvertible(pyObj)) + return true; + SbkObjectType* shiboType = reinterpret_cast(SbkType< ::QByteArray >()); + return Shiboken::Converter::checkType(pyObj) + || PyBytes_Check(pyObj) + || (ObjectType::isExternalConvertible(shiboType, pyObj)); +} + +inline QByteArray Converter::toCpp(PyObject* pyObj) +{ + if (pyObj == Py_None) { + return 0; + } else if (PyObject_TypeCheck(pyObj, SbkType())) { + return *Converter::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::toCpp(pyObj); + } +} + +inline PyObject* Converter::toPython(const ::QByteArray& cppObj) +{ + return ValueTypeConverter::toPython(cppObj); +} + +} diff --git a/PySide/QtCore/qchar_conversions.h b/PySide/QtCore/qchar_conversions.h new file mode 100644 index 0000000..f79bac3 --- /dev/null +++ b/PySide/QtCore/qchar_conversions.h @@ -0,0 +1,35 @@ +namespace Shiboken { + +template<> +struct Converter +{ + 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::toCpp(pyObj)); + else if (PyInt_Check(pyObj)) + return QChar(Shiboken::Converter::toCpp(pyObj)); + return QChar(); + } + + static PyObject* toPython(void* cppObj) { return toPython(*reinterpret_cast(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 new file mode 100644 index 0000000..0d97a05 --- /dev/null +++ b/PySide/QtCore/qdate_conversions.h @@ -0,0 +1,53 @@ +#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::checkType(PyObject* pyObj) +{ + return ValueTypeConverter::checkType(pyObj); +} + +inline PyObject* Converter::toPython(const ::QDate& cppObj) +{ + return ValueTypeConverter::toPython(cppObj); +} + +inline bool Converter::isConvertible(PyObject* pyObj) +{ + if (ValueTypeConverter::isConvertible(pyObj)) + return true; + + if (!PyDateTimeAPI) + PySideDateTime_IMPORT; + + SbkObjectType* shiboType = reinterpret_cast(SbkType< ::QDate >()); + return PyDate_Check(pyObj) || ObjectType::isExternalConvertible(shiboType, pyObj); +} + +inline QDate Converter::toCpp(PyObject* pyObj) +{ + if (!PyDateTimeAPI) + PySideDateTime_IMPORT; + + if (pyObj == Py_None) { + return QDate(); + } else if (PyObject_TypeCheck(pyObj, SbkType())) { + return *Converter::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::toCpp(pyObj); + } +} + + +} diff --git a/PySide/QtCore/qdatetime_conversions.h b/PySide/QtCore/qdatetime_conversions.h new file mode 100644 index 0000000..bcf9ad3 --- /dev/null +++ b/PySide/QtCore/qdatetime_conversions.h @@ -0,0 +1,56 @@ +#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::checkType(PyObject* pyObj) +{ + return ValueTypeConverter::checkType(pyObj); +} + +inline PyObject* Converter::toPython(const ::QDateTime& cppObj) +{ + return ValueTypeConverter::toPython(cppObj); +} + +inline bool Converter::isConvertible(PyObject* pyObj) +{ + if (ValueTypeConverter::isConvertible(pyObj)) + return true; + + if (!PyDateTimeAPI) + PySideDateTime_IMPORT; + + SbkObjectType* shiboType = reinterpret_cast(SbkType< ::QDateTime >()); + return PyDateTime_Check(pyObj) || ObjectType::isExternalConvertible(shiboType, pyObj); +} + + +inline QDateTime Converter::toCpp(PyObject* pyObj) +{ + if (!PyDateTimeAPI) + PySideDateTime_IMPORT; + + if (pyObj == Py_None) { + return QDateTime(); + } else if (PyObject_TypeCheck(pyObj, SbkType())) { + return *Converter::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::toCpp(pyObj); + } +} + +} diff --git a/PySide/QtCore/qhash_conversions.h b/PySide/QtCore/qhash_conversions.h new file mode 100644 index 0000000..f9e2e42 --- /dev/null +++ b/PySide/QtCore/qhash_conversions.h @@ -0,0 +1,4 @@ +namespace Shiboken { +template +struct Converter > : QtDictConverter > {}; +} diff --git a/PySide/QtCore/qlist_conversions.h b/PySide/QtCore/qlist_conversions.h new file mode 100644 index 0000000..cb1d26b --- /dev/null +++ b/PySide/QtCore/qlist_conversions.h @@ -0,0 +1,4 @@ +namespace Shiboken { +template +struct Converter > : StdListConverter > {}; +} diff --git a/PySide/QtCore/qmap_conversions.h b/PySide/QtCore/qmap_conversions.h new file mode 100644 index 0000000..3153fae --- /dev/null +++ b/PySide/QtCore/qmap_conversions.h @@ -0,0 +1,5 @@ +namespace Shiboken { +template +struct Converter > : QtDictConverter > { +}; +} diff --git a/PySide/QtCore/qmultimap_conversions.h b/PySide/QtCore/qmultimap_conversions.h new file mode 100644 index 0000000..43abd84 --- /dev/null +++ b/PySide/QtCore/qmultimap_conversions.h @@ -0,0 +1,5 @@ +namespace Shiboken { +template +struct Converter > : QtMultiMapConverter > { +}; +} diff --git a/PySide/QtCore/qpair_conversions.h b/PySide/QtCore/qpair_conversions.h new file mode 100644 index 0000000..99e9cd8 --- /dev/null +++ b/PySide/QtCore/qpair_conversions.h @@ -0,0 +1,4 @@ +namespace Shiboken { +template +struct Converter > : StdPairConverter > {}; +} diff --git a/PySide/QtCore/qset_conversions.h b/PySide/QtCore/qset_conversions.h new file mode 100644 index 0000000..c46fef0 --- /dev/null +++ b/PySide/QtCore/qset_conversions.h @@ -0,0 +1,4 @@ +namespace Shiboken { +template +struct Converter > : QSequenceConverter > {}; +} diff --git a/PySide/QtCore/qstack_conversion.h b/PySide/QtCore/qstack_conversion.h new file mode 100644 index 0000000..709a918 --- /dev/null +++ b/PySide/QtCore/qstack_conversion.h @@ -0,0 +1,4 @@ +namespace Shiboken { +template +struct Converter > : StdListConverter > {}; +} diff --git a/PySide/QtCore/qstring_conversions.h b/PySide/QtCore/qstring_conversions.h new file mode 100644 index 0000000..975a571 --- /dev/null +++ b/PySide/QtCore/qstring_conversions.h @@ -0,0 +1,49 @@ +namespace Shiboken { + +template<> +inline PyTypeObject* SbkType() +{ + return &PyUnicode_Type; +} + +template<> +struct Converter +{ + 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) + // cast as Py_UNICODE can be a different type + return QString::fromUcs4(reinterpret_cast(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(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 new file mode 100644 index 0000000..6075c16 --- /dev/null +++ b/PySide/QtCore/qstringlist_conversions.h @@ -0,0 +1,5 @@ +namespace Shiboken +{ +template<> +struct Converter : StdListConverter {}; +} diff --git a/PySide/QtCore/qstringref_conversions.h b/PySide/QtCore/qstringref_conversions.h new file mode 100644 index 0000000..db3eefc --- /dev/null +++ b/PySide/QtCore/qstringref_conversions.h @@ -0,0 +1,18 @@ +namespace Shiboken { + +template<> +struct Converter : public Converter +{ + static PyObject* toPython(void* cppObj) { return toPython(*reinterpret_cast(cppObj)); } + + static PyObject* toPython(const QStringRef& cppObj) + { + return Converter::toPython(cppObj.toString()); + } + + static QStringRef toCpp(PyObject* pyObj) + { + return QStringRef(); + } +}; +} diff --git a/PySide/QtCore/qtime_conversions.h b/PySide/QtCore/qtime_conversions.h new file mode 100644 index 0000000..4600ef7 --- /dev/null +++ b/PySide/QtCore/qtime_conversions.h @@ -0,0 +1,45 @@ +namespace Shiboken { + +inline bool Converter::checkType(PyObject* pyObj) +{ + return ValueTypeConverter::checkType(pyObj); +} + +inline PyObject* Converter::toPython(const ::QTime& cppObj) +{ + return ValueTypeConverter::toPython(cppObj); +} + +inline bool Converter::isConvertible(PyObject* pyObj) +{ + if (ValueTypeConverter::isConvertible(pyObj)) + return true; + + if (!PyDateTimeAPI) + PyDateTime_IMPORT; + + SbkObjectType* shiboType = reinterpret_cast(SbkType< ::QTime >()); + return PyTime_Check(pyObj) || ObjectType::isExternalConvertible(shiboType, pyObj); +} + +inline QTime Converter::toCpp(PyObject* pyObj) +{ + if (!PyDateTimeAPI) + PyDateTime_IMPORT; + + if (pyObj == Py_None) { + return QTime(); + } else if (PyObject_TypeCheck(pyObj, SbkType())) { + return *Converter::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::toCpp(pyObj); + } +} + +} diff --git a/PySide/QtCore/qvariant_conversions.h b/PySide/QtCore/qvariant_conversions.h new file mode 100644 index 0000000..8465c28 --- /dev/null +++ b/PySide/QtCore/qvariant_conversions.h @@ -0,0 +1,219 @@ +namespace Shiboken { + +template<> +struct Converter +{ + 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(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(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::checkType(pyObj)) { + // QVariant(bool) + return QVariant(Converter::toCpp(pyObj)); + } else if (pyObj == Py_None) { + // QVariant() + return QVariant(); + } else if (Converter::checkType(pyObj)) { + // QVariant(const char*) + return QVariant(Converter::toCpp(pyObj)); + } else if (Converter::checkType(pyObj)) { + // QVariant(QByteArray) + return QVariant(Converter::toCpp(pyObj)); + } else if (PyFloat_CheckExact(pyObj)) { + // QVariant(double) + return QVariant(Converter::toCpp(pyObj)); + } else if (PyInt_Check(pyObj)) { + // QVariant(int) + return QVariant(Converter::toCpp(pyObj)); + } else if (PyLong_CheckExact(pyObj)) { + // QVariant(qlonglong) + return QVariant(Converter::toCpp(pyObj)); + } else if (Shiboken::isShibokenEnum(pyObj)) { + // QVariant(enum) + return QVariant(Converter::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 dictornay + 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(pyObj); + } + + static PyObject* toPython(void* cppObj) + { + return toPython(*reinterpret_cast(cppObj)); + } + + static PyObject* toPython(const QVariant& cppObj) + { + if (cppObj.isValid()) { + if (qstrcmp(cppObj.typeName(), "QVariantList") == 0) + return Converter >::toPython(cppObj.value()); + + if (qstrcmp(cppObj.typeName(), "QStringList") == 0) + return Converter >::toPython(cppObj.value()); + + if (qstrcmp(cppObj.typeName(), "QVariantMap") == 0) + return Converter >::toPython(cppObj.value()); + + Shiboken::TypeResolver* tr = Shiboken::TypeResolver::get(cppObj.typeName()); + if (tr) + return tr->toPython(const_cast(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(), &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 ret; + while (PyDict_Next(map, &pos, &key, &value)) + ret.insert(Converter::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::checkType(item)) { + allString = false; + break; + } + } + return allString; + } + + static QVariant convertToVariantList(PyObject* list) + { + bool allString = isStringList(list); + if (allString) { + QStringList lst = Converter >::toCpp(list); + return QVariant(lst); + } else { + QVariant valueList = convertToValueList(list); + if (valueList.isValid()) + return valueList; + QList 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 new file mode 100644 index 0000000..0381e78 --- /dev/null +++ b/PySide/QtCore/qvariant_type_conversions.h @@ -0,0 +1,85 @@ +namespace Shiboken { + +template<> +struct Converter +{ + static bool checkType(PyObject* pyObj) + { + return pyObj == Py_None || PyType_Check(pyObj) || Converter::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(pyObj))) + typeName = "QString"; + else if (pyObj == reinterpret_cast(&PyFloat_Type)) + typeName = "double"; // float is a UserType in QVariant. + else if (pyObj == reinterpret_cast(&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(pyObj)); + else + typeName = reinterpret_cast(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(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(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::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 new file mode 100644 index 0000000..0857036 --- /dev/null +++ b/PySide/QtCore/qvector_conversions.h @@ -0,0 +1,4 @@ +namespace Shiboken { +template +struct Converter > : StdListConverter > {}; +} diff --git a/PySide/QtCore/typesystem_core_common.xml b/PySide/QtCore/typesystem_core.xml similarity index 81% rename from PySide/QtCore/typesystem_core_common.xml rename to PySide/QtCore/typesystem_core.xml index 2e83131..e9ff13d 100644 --- a/PySide/QtCore/typesystem_core_common.xml +++ b/PySide/QtCore/typesystem_core.xml @@ -1,7 +1,7 @@ @@ -162,576 +125,80 @@ + + + + - - - return PyBool_FromLong((bool)%in); - - - - %out = %OUTTYPE(%in == Py_True); - - - + - - bool py2kStrCheck(PyObject* obj) - { - #ifdef IS_PY3K - return false; - #else - return PyString_Check(obj); - #endif - } - - - + - - - const int N = %in.length(); - wchar_t* str = new wchar_t[N]; - %in.toWCharArray(str); - PyObject* %out = PyUnicode_FromWideChar(str, N); - delete[] str; - return %out; - - - - Py_UNICODE* unicode = PyUnicode_AS_UNICODE(%in); - #if defined(Py_UNICODE_WIDE) - // cast as Py_UNICODE can be a different type - %out = QString::fromUcs4((const uint*)unicode); - #else - %out = QString::fromUtf16(unicode, PyUnicode_GET_SIZE(%in)); - #endif - - - #ifndef IS_PY3K - const char* str = %CONVERTTOCPP[const char*](%in); - %out = %OUTTYPE(str); - #endif - - - %out = %OUTTYPE(); - - - + - - - - - const int N = %in.toString().length(); - wchar_t* str = new wchar_t[N]; - %in.toString().toWCharArray(str); - PyObject* %out = PyUnicode_FromWideChar(str, N); - delete[] str; - return %out; - - - - %out = %OUTTYPE(); - - - - - - - - wchar_t c = (wchar_t)%in.unicode(); - return PyUnicode_FromWideChar(&c, 1); - - - - char c = %CONVERTTOCPP[char](%in); - %out = %OUTTYPE(c); - - - int i = %CONVERTTOCPP[int](%in); - %out = %OUTTYPE(i); - - - %out = %OUTTYPE(); - - - - - - - - - - if (!%in.isValid()) - Py_RETURN_NONE; - - if (qstrcmp(%in.typeName(), "QVariantList") == 0) { - QList<QVariant> var = %in.value<QVariantList>(); - return %CONVERTTOPYTHON[QList<QVariant>](var); - } - - if (qstrcmp(%in.typeName(), "QStringList") == 0) { - QStringList var = %in.value<QStringList>(); - return %CONVERTTOPYTHON[QList<QString>](var); - } - - if (qstrcmp(%in.typeName(), "QVariantMap") == 0) { - QMap<QString, QVariant> var = %in.value<QVariantMap>(); - return %CONVERTTOPYTHON[QMap<QString, QVariant>](var); - } - - Shiboken::Conversions::SpecificConverter converter(cppInRef.typeName()); - if (converter) { - void* ptr = cppInRef.data(); - return converter.toPython(ptr); - } - PyErr_Format(PyExc_RuntimeError, "Can't find converter for '%s'.", %in.typeName()); - return 0; - - - - %out = %OUTTYPE(%in == Py_True); - - - %out = %OUTTYPE(); - - - QString in = %CONVERTTOCPP[QString](%in); - %out = %OUTTYPE(in); - - - QByteArray in = %CONVERTTOCPP[QByteArray](%in); - %out = %OUTTYPE(in); - - - double in = %CONVERTTOCPP[double](%in); - %out = %OUTTYPE(in); - - - int in = %CONVERTTOCPP[int](%in); - %out = %OUTTYPE(in); - - - qlonglong in = %CONVERTTOCPP[qlonglong](%in); - %out = %OUTTYPE(in); - - - int in = %CONVERTTOCPP[int](%in); - %out = %OUTTYPE(in); - - - // a class supported by QVariant? - int typeCode; - const char* typeName = QVariant_resolveMetaType(%in->ob_type, &typeCode); - if (!typeCode || !typeName) - return; - QVariant var(typeCode, (void*)0); - Shiboken::Conversions::SpecificConverter converter(typeName); - converter.toCpp(pyIn, var.data()); - %out = var; - - - QVariant ret = QVariant_convertToVariantMap(%in); - %out = ret.isValid() ? ret : QVariant::fromValue<PySide::PyObjectWrapper>(%in); - - - %out = QVariant_convertToVariantList(%in); - - - // Is a shiboken type not known by Qt - %out = QVariant::fromValue<PySide::PyObjectWrapper>(%in); - - - - - - static const char* QVariant_resolveMetaType(PyTypeObject* type, int* typeId) - { - if (PyObject_TypeCheck(type, &SbkObjectType_Type)) { - SbkObjectType* sbkType = (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 QVariant_resolveMetaType(type->tp_base, typeId); - } else if (type->tp_bases) { - for(int i = 0; i < PyTuple_GET_SIZE(type->tp_bases); ++i) { - const char* derivedName = QVariant_resolveMetaType((PyTypeObject*)PyTuple_GET_ITEM(type->tp_bases, i), typeId); - if (derivedName) - return derivedName; - } - } - } - *typeId = 0; - return 0; - } - static QVariant QVariant_convertToValueList(PyObject* list) - { - if (PySequence_Size(list) < 1) - return QVariant(); - Shiboken::AutoDecRef element(PySequence_GetItem(list, 0)); - int typeId; - const char* typeName = QVariant_resolveMetaType(element.cast<PyTypeObject*>(), &typeId); - if (typeName) { - QByteArray listTypeName("QList<"); - listTypeName += typeName; - listTypeName += '>'; - typeId = QMetaType::type(listTypeName); - if (typeId > 0) { - Shiboken::Conversions::SpecificConverter converter(listTypeName); - if (converter) { - QVariant var(typeId, (void*)0); - converter.toCpp(list, &var); - return var; - } - qWarning() << "Type converter for :" << listTypeName << "not registered."; - } - } - return QVariant(); - } - static bool QVariant_isStringList(PyObject *list) - { - bool allString = true; - Shiboken::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 (!%CHECKTYPE[QString](item)) { - allString = false; - break; - } - } - return allString; - } - static QVariant QVariant_convertToVariantMap(PyObject* map) - { - Py_ssize_t pos = 0; - Shiboken::AutoDecRef keys(PyDict_Keys(map)); - if (!QVariant_isStringList(keys)) - return QVariant(); - PyObject* key; - PyObject* value; - QMap<QString,QVariant> ret; - while (PyDict_Next(map, &pos, &key, &value)) { - QString cppKey = %CONVERTTOCPP[QString](key); - QVariant cppValue = %CONVERTTOCPP[QVariant](value); - ret.insert(cppKey, cppValue); - } - return QVariant(ret); - } - static QVariant QVariant_convertToVariantList(PyObject* list) - { - if (QVariant_isStringList(list)) { - QList<QString > lst = %CONVERTTOCPP[QList<QString>](list); - return QVariant(QStringList(lst)); - } - QVariant valueList = QVariant_convertToValueList(list); - if (valueList.isValid()) - return valueList; - QList<QVariant> lst; - Shiboken::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* pyItem = PySequence_Fast_GET_ITEM(fast.object(), i); - QVariant item = %CONVERTTOCPP[QVariant](pyItem); - lst.append(item); - } - return QVariant(lst); - } - - - - - - const char* typeName = QVariant::typeToName(%in); - PyObject* %out; - PyTypeObject* pyType = 0; - if (typeName) - pyType = Shiboken::Conversions::getPythonTypeObject(typeName); - %out = pyType ? ((PyObject*)pyType) : Py_None; - Py_INCREF(%out); - return %out; - - - - %out = QVariant::Invalid; - - - const char* typeName; - if (Shiboken::String::checkType((PyTypeObject*)%in)) - typeName = "QString"; - else if (%in == (PyObject*)&PyFloat_Type) - typeName = "double"; // float is a UserType in QVariant. - else if (%in == (PyObject*)&PyLong_Type) - typeName = "int"; // long is a UserType in QVariant. - else if (%in->ob_type == &SbkObjectType_Type) - typeName = Shiboken::ObjectType::getOriginalName((SbkObjectType*)%in); - else - typeName = ((PyTypeObject*)%in)->tp_name; - %out = QVariant::nameToType(typeName); - - - %out = QVariant::nameToType(Shiboken::String::toCString(%in)); - - - %out = QVariant::nameToType("QVariantMap"); - - - const char* typeName; - if (QVariantType_isStringList(%in)) - typeName = "QStringList"; - else - typeName = "QVariantList"; - %out = QVariant::nameToType(typeName); - - - - - - - - Shiboken::Conversions::registerConverterName(SbkPySide_QtCoreTypeConverters[SBK_QTCORE_QMAP_QSTRING_QVARIANT_IDX], "QVariantMap"); - - - - static bool QVariantType_isStringList(PyObject* list) - { - bool allString = true; - Shiboken::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 (!%CHECKTYPE[QString](item)) { - allString = false; - break; - } - } - return allString; - } - static bool QVariantType_checkAllStringKeys(PyObject* dict) - { - Shiboken::AutoDecRef keys(PyDict_Keys(dict)); - return QVariantType_isStringList(keys); - } - - - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + - - - - - - - - - - + - - - - - - - - - - + - - - - - - - - - - - - + - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - + + - - - - - - - - - - + - - - - - - - - - - - + - - - PyObject* %out = PyTuple_New(2); - PyTuple_SET_ITEM(%out, 0, %CONVERTTOPYTHON[%INTYPE_0](%in.first)); - PyTuple_SET_ITEM(%out, 1, %CONVERTTOPYTHON[%INTYPE_1](%in.second)); - return %out; - - - - %out.first = %CONVERTTOCPP[%OUTTYPE_0](PySequence_Fast_GET_ITEM(%in, 0)); - %out.second = %CONVERTTOCPP[%OUTTYPE_1](PySequence_Fast_GET_ITEM(%in, 1)); - - - @@ -906,26 +373,7 @@ qAddPostRoutine(PySide::globalPostRoutineCallback); - - QList<QByteArray> version = QByteArray(qVersion()).split('.'); - PyObject* pyQtVersion = PyTuple_New(3); - for (int i = 0; i < 3; ++i) - PyTuple_SET_ITEM(pyQtVersion, i, PyInt_FromLong(version[i].toInt())); - PyModule_AddObject(module, "__version_info__", pyQtVersion); - PyModule_AddStringConstant(module, "__version__", qVersion()); - - - - { // Avoid name clash - Shiboken::AutoDecRef atexit(Shiboken::Module::import("atexit")); - Shiboken::AutoDecRef regFunc(PyObject_GetAttrString(atexit, "register")); - PyObject* shutDownFunc = PyObject_GetAttrString(module, "__moduleShutdown"); - Shiboken::AutoDecRef args(PyTuple_New(1)); - PyTuple_SET_ITEM(args, 0, shutDownFunc); - Shiboken::AutoDecRef retval(PyObject_Call(regFunc, args, 0)); - Q_ASSERT(!retval.isNull()); - } - + @@ -935,10 +383,9 @@ - Shiboken::Conversions::registerConverterName(SbkPySide_QtCoreTypeConverters[SBK_QSTRING_IDX], "unicode"); - Shiboken::Conversions::registerConverterName(SbkPySide_QtCoreTypeConverters[SBK_QSTRING_IDX], "str"); - Shiboken::Conversions::registerConverterName(SbkPySide_QtCoreTypeConverters[SBK_QTCORE_QLIST_QVARIANT_IDX], "QVariantList"); - + Shiboken::TypeResolver::createValueTypeResolver<QString>("unicode"); + Shiboken::TypeResolver::createValueTypeResolver<QString>("str"); + Shiboken::TypeResolver::createValueTypeResolver<QVariantList>("QVariantList"); PySide::init(module); Py_AtExit(QtCoreModuleExit); @@ -953,9 +400,7 @@ static void msgHandlerCallback(QtMsgType type, const char* msg) { Shiboken::GilState state; - Shiboken::AutoDecRef arglist(PyTuple_New(2)); - PyTuple_SET_ITEM(arglist, 0, %CONVERTTOPYTHON[QtMsgType](type)); - PyTuple_SET_ITEM(arglist, 1, %CONVERTTOPYTHON[const char*](msg)); + Shiboken::AutoDecRef arglist(Shiboken::makeTuple(type, msg)); Shiboken::AutoDecRef ret(PyObject_CallObject(qtmsghandler, arglist)); } static void QtCoreModuleExit() @@ -1065,11 +510,9 @@ - QPointF p; - %RETURN_TYPE retval = %CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES, &p); - %PYARG_0 = PyTuple_New(2); - PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](retval)); - PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QPointF](p)); + QPointF p; + %RETURN_TYPE retval = %CPPSELF.%FUNCTION_NAME(%ARGUMENT_NAMES, &p); + %PYARG_0 = Shiboken::makeTuple(retval, p); @@ -1118,42 +561,12 @@ - - - - - - - - - - %out = %OUTTYPE(); - - - int day = PyDateTime_GET_DAY(%in); - int month = PyDateTime_GET_MONTH(%in); - int year = PyDateTime_GET_YEAR(%in); - %out = %OUTTYPE(year, month, day); - - - + - + @@ -1162,7 +575,7 @@ - + @@ -1172,8 +585,8 @@ - if (!PyDateTimeAPI) PySideDateTime_IMPORT; - %PYARG_0 = PyDate_FromDate(%CPPSELF.year(), %CPPSELF.month(), %CPPSELF.day()); + if (!PyDateTimeAPI) PyDateTime_IMPORT; + %PYARG_0 = PyDate_FromDate(%CPPSELF.year(), %CPPSELF.month(), %CPPSELF.day()); @@ -1191,13 +604,8 @@ int year, month, day; - %BEGIN_ALLOW_THREADS %CPPSELF.%FUNCTION_NAME(&year, &month, &day); - %END_ALLOW_THREADS - %PYARG_0 = PyTuple_New(3); - PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[int](year)); - PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[int](month)); - PyTuple_SET_ITEM(%PYARG_0, 2, %CONVERTTOPYTHON[int](day)); + %PYARG_0 = Shiboken::makeTuple(year, month, day); @@ -1209,40 +617,15 @@ int yearNumber; - %BEGIN_ALLOW_THREADS int week = %CPPSELF.%FUNCTION_NAME(&yearNumber); - %END_ALLOW_THREADS - %PYARG_0 = PyTuple_New(2); - PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[int](week)); - PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[int](yearNumber)); + %PYARG_0 = Shiboken::makeTuple(week, yearNumber); - - - - - - - - - %out = %OUTTYPE(); - - - int day = PyDateTime_GET_DAY(%in); - int month = PyDateTime_GET_MONTH(%in); - int year = PyDateTime_GET_YEAR(%in); - int hour = PyDateTime_DATE_GET_HOUR(%in); - int min = PyDateTime_DATE_GET_MINUTE(%in); - int sec = PyDateTime_DATE_GET_SECOND(%in); - int usec = PyDateTime_DATE_GET_MICROSECOND(%in); - %out = %OUTTYPE(QDate(year, month, day), QTime(hour, min, sec, usec/1000)); - - - + @@ -1257,13 +640,6 @@ %0 = new %TYPE(date, time, Qt::TimeSpec(%8)); - - - QDate date(%1, %2, %3); - QTime time(%4, %5, %6); - %0 = new %TYPE(date, time); - - @@ -1282,10 +658,10 @@ - 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); + 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); @@ -1399,7 +775,6 @@ } }; - @@ -1417,9 +792,9 @@ - - - + int a, b, c, d; + %CPPSELF.%FUNCTION_NAME(&a, &b, &c, &d); + %PYARG_0 = Shiboken::makeTuple(a, b, c, d); @@ -1439,9 +814,9 @@ - - - + int a, b, c, d; + %CPPSELF.%FUNCTION_NAME(&a, &b, &c, &d); + %PYARG_0 = Shiboken::makeTuple(a, b, c, d); @@ -1484,9 +859,9 @@ - - - + qreal a, b, c, d; + %CPPSELF.%FUNCTION_NAME(&a, &b, &c, &d); + %PYARG_0 = Shiboken::makeTuple(a, b, c, d); @@ -1506,9 +881,9 @@ - - - + qreal a, b, c, d; + %CPPSELF.%FUNCTION_NAME(&a, &b, &c, &d); + %PYARG_0 = Shiboken::makeTuple(a, b, c, d); @@ -1587,26 +962,7 @@ - - - - - - - - - %out = %OUTTYPE(); - - - int hour = PyDateTime_TIME_GET_HOUR(%in); - int min = PyDateTime_TIME_GET_MINUTE(%in); - int sec = PyDateTime_TIME_GET_SECOND(%in); - int usec = PyDateTime_TIME_GET_MICROSECOND(%in); - %out = %OUTTYPE(hour, min, sec, usec/1000); - - - - + @@ -1629,8 +985,8 @@ - if (!PyDateTimeAPI) PySideDateTime_IMPORT; - %PYARG_0 = PyTime_FromTime(%CPPSELF.hour(), %CPPSELF.minute(), %CPPSELF.second(), %CPPSELF.msec()*1000); + if (!PyDateTimeAPI) PyDateTime_IMPORT; + %PYARG_0 = PyTime_FromTime(%CPPSELF.hour(), %CPPSELF.minute(), %CPPSELF.second(), %CPPSELF.msec()*1000); @@ -2281,21 +1637,7 @@ - - - - %out = %OUTTYPE(); - - - %out = %OUTTYPE(Shiboken::String::toCString(%in), Shiboken::String::len(%in)); - - - #ifdef IS_PY3K - %out = %OUTTYPE(PyBytes_AS_STRING(%in), PyBytes_GET_SIZE(%in)); - #endif - - - + @@ -2655,9 +1997,6 @@ - - - %PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.%FUNCTION_NAME(%1, %2, %3), %2, Shiboken::Buffer::ReadWrite); @@ -2683,15 +2022,20 @@ - + - + - + - - - + + + + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(%1, Shiboken::String::len(%PYARG_1)); + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](%0); + + + @@ -2700,7 +2044,7 @@ - + QByteArray ba; ba.resize(%2); @@ -2724,7 +2068,7 @@ - + QByteArray ba; ba.resize(%2); @@ -2754,7 +2098,7 @@ - + %CPPSELF.%FUNCTION_NAME(Shiboken::String::toCString(%PYARG_1), Shiboken::String::len(%PYARG_1)); @@ -2857,9 +2201,6 @@ - - - @@ -2868,7 +2209,7 @@ - + @@ -3019,9 +2360,6 @@ - - - %PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.%FUNCTION_NAME(%1, %2, %3), %2, Shiboken::Buffer::ReadWrite); @@ -3098,9 +2436,7 @@ qint64 pid; %RETURN_TYPE retval = %TYPE::%FUNCTION_NAME(%1, %2, %3, &pid); - %PYARG_0 = PyTuple_New(2); - PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](retval)); - PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[qint64](pid)); + %PYARG_0 = Shiboken::makeTuple(retval, pid); @@ -3208,10 +2544,8 @@ - %PYARG_0 = PyTuple_New(2); - PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](%0)); - PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[long](*result_out)); - delete result_out; + %PYARG_0 = Shiboken::makeTuple(%0, *result_out); + delete result_out; @@ -3305,51 +2639,55 @@ - - - - - - - + + *(%CPPSELF) << %1; - - + + %RETURN_TYPE val; + *(%CPPSELF) >> val; + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](val); - - + + *(%CPPSELF) << %1; - - + + %RETURN_TYPE val; + *(%CPPSELF) >> val; + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](val); - - + + *(%CPPSELF) << %1; - - + + %RETURN_TYPE val; + *(%CPPSELF) >> val; + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](val); - - + + *(%CPPSELF) << %1; - - + + %RETURN_TYPE val; + *(%CPPSELF) >> val; + %PYARG_0 = %CONVERTTOPYTHON[%RETURN_TYPE](val); + @@ -3508,7 +2846,7 @@ - + @@ -3517,10 +2855,9 @@ - - + + - @@ -3533,7 +2870,6 @@ - @@ -3552,15 +2888,6 @@ - - - - - QString& res = *%0; - %PYARG_0 = %CONVERTTOPYTHON[QString](res); - - - @@ -3604,7 +2931,7 @@ - + @@ -3675,13 +3002,7 @@ - - - - - - - + @@ -4092,6 +3413,6 @@ s1.addTransition(button.clicked, s1h)</code> - + diff --git a/PySide/QtCore/typesystem_core.xml.in b/PySide/QtCore/typesystem_core.xml.in deleted file mode 100644 index 9de2082..0000000 --- a/PySide/QtCore/typesystem_core.xml.in +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - diff --git a/PySide/QtCore/typesystem_core_mac.xml b/PySide/QtCore/typesystem_core_mac.xml deleted file mode 100644 index 0f9c511..0000000 --- a/PySide/QtCore/typesystem_core_mac.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - diff --git a/PySide/QtCore/typesystem_core_maemo.xml b/PySide/QtCore/typesystem_core_maemo.xml deleted file mode 100644 index eba223c..0000000 --- a/PySide/QtCore/typesystem_core_maemo.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - diff --git a/PySide/QtCore/typesystem_core_win.xml b/PySide/QtCore/typesystem_core_win.xml index 26c7a82..8832b25 100644 --- a/PySide/QtCore/typesystem_core_win.xml +++ b/PySide/QtCore/typesystem_core_win.xml @@ -19,33 +19,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --> - - - - #ifdef IS_PY3K - return PyCapsule_New(%in, 0, 0); - #else - return PyCObject_FromVoidPtr(%in, 0); - #endif - - - - %out = 0; - - - #ifdef IS_PY3K - %out = (%OUTTYPE)PyCapsule_GetPointer(%in, 0); - #else - %out = (%OUTTYPE)PyCObject_AsVoidPtr(%in); - #endif - - - + - - - @@ -54,4 +30,6 @@ + + diff --git a/PySide/QtCore/typesystem_core_x11.xml b/PySide/QtCore/typesystem_core_x11.xml deleted file mode 100644 index eba223c..0000000 --- a/PySide/QtCore/typesystem_core_x11.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - diff --git a/PySide/QtDeclarative/CMakeLists.txt b/PySide/QtDeclarative/CMakeLists.txt index c9ea931..01cf877 100644 --- a/PySide/QtDeclarative/CMakeLists.txt +++ b/PySide/QtDeclarative/CMakeLists.txt @@ -23,7 +23,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtDeclarative/qdeclarativeview_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtDeclarative/qtdeclarative_module_wrapper.cpp ) -set(QtDeclarative_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtNetwork_SOURCE_DIR}${PATH_SEP}${QtDeclarative_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") +set(QtDeclarative_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtNetwork_SOURCE_DIR}${PATH_SEP}${QtDeclarative_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtDeclarative_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${QT_QTCORE_INCLUDE_DIR} diff --git a/PySide/QtDeclarative/pysideqmlregistertype.cpp b/PySide/QtDeclarative/pysideqmlregistertype.cpp index 4efc4bf..1fc8020 100644 --- a/PySide/QtDeclarative/pysideqmlregistertype.cpp +++ b/PySide/QtDeclarative/pysideqmlregistertype.cpp @@ -93,8 +93,8 @@ int PySide::qmlRegisterType(PyObject* pyObj, const char* uri, int versionMajor, { using namespace Shiboken; - static PyTypeObject* qobjectType = Shiboken::Conversions::getPythonTypeObject("QObject*"); - static PyTypeObject* qdeclarativeType = Shiboken::Conversions::getPythonTypeObject("QDeclarativeItem*"); + static PyTypeObject* qobjectType = TypeResolver::get("QObject*")->pythonType(); + static PyTypeObject* qdeclarativeType = TypeResolver::get("QDeclarativeItem*")->pythonType(); assert(qobjectType); static int nextType = 0; @@ -113,9 +113,6 @@ int PySide::qmlRegisterType(PyObject* pyObj, const char* uri, int versionMajor, QMetaObject* metaObject = reinterpret_cast(ObjectType::getTypeUserData(reinterpret_cast(pyObj))); Q_ASSERT(metaObject); - // Inc ref the type object, don't worry about dec ref them because there's no way to unregister a QML type - Py_INCREF(pyObj); - // All ready... now the ugly code begins... :-) pyTypes[nextType] = pyObj; @@ -258,10 +255,7 @@ PyTypeObject PropertyListType = { void propListAppender(QDeclarativeListProperty* propList, QDeclarativeItem* item) { Shiboken::GilState state; - - Shiboken::AutoDecRef args(PyTuple_New(2)); - PyTuple_SET_ITEM(args, 0, Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide_QtCoreTypes[SBK_QOBJECT_IDX], propList->object)); - PyTuple_SET_ITEM(args, 1, Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide_QtDeclarativeTypes[SBK_QDECLARATIVEITEM_IDX], item)); + Shiboken::AutoDecRef args(Shiboken::makeTuple(propList->object, item)); DeclarativeListProperty* data = reinterpret_cast(propList->data); Shiboken::AutoDecRef retVal(PyObject_CallObject(data->append, args)); @@ -274,50 +268,42 @@ void propListAppender(QDeclarativeListProperty* propList, QDec int propListCount(QDeclarativeListProperty* propList) { Shiboken::GilState state; - - Shiboken::AutoDecRef args(PyTuple_New(1)); - PyTuple_SET_ITEM(args, 0, Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide_QtCoreTypes[SBK_QOBJECT_IDX], propList->object)); + Shiboken::AutoDecRef args(Shiboken::makeTuple(propList->object)); DeclarativeListProperty* data = reinterpret_cast(propList->data); Shiboken::AutoDecRef retVal(PyObject_CallObject(data->count, args)); // Check return type - int cppResult = 0; - PythonToCppFunc pythonToCpp; if (PyErr_Occurred()) PyErr_Print(); - else if ((pythonToCpp = Shiboken::Conversions::isPythonToCppConvertible(Shiboken::Conversions::PrimitiveTypeConverter(), retVal))) - pythonToCpp(retVal, &cppResult); - return cppResult; + else if (Shiboken::Converter::isConvertible(retVal)) + return Shiboken::Converter::toCpp(retVal); + + return 0; } // Implementation of QDeclarativeListProperty::AtFunction callback QDeclarativeItem* propListAt(QDeclarativeListProperty* propList, int index) { Shiboken::GilState state; - - Shiboken::AutoDecRef args(PyTuple_New(2)); - PyTuple_SET_ITEM(args, 0, Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide_QtCoreTypes[SBK_QOBJECT_IDX], propList->object)); - PyTuple_SET_ITEM(args, 1, Shiboken::Conversions::copyToPython(Shiboken::Conversions::PrimitiveTypeConverter(), &index)); + Shiboken::AutoDecRef args(Shiboken::makeTuple(propList->object, index)); DeclarativeListProperty* data = reinterpret_cast(propList->data); Shiboken::AutoDecRef retVal(PyObject_CallObject(data->at, args)); - QDeclarativeItem* result = 0; if (PyErr_Occurred()) PyErr_Print(); else if (PyType_IsSubtype(Py_TYPE(retVal), data->type)) - Shiboken::Conversions::pythonToCppPointer((SbkObjectType*)SbkPySide_QtCoreTypes[SBK_QDECLARATIVEITEM_IDX], retVal, &result); - return result; + return Shiboken::Converter::toCpp(retVal); + + return 0; } // Implementation of QDeclarativeListProperty::ClearFunction callback void propListClear(QDeclarativeListProperty* propList) { Shiboken::GilState state; - - Shiboken::AutoDecRef args(PyTuple_New(1)); - PyTuple_SET_ITEM(args, 0, Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide_QtCoreTypes[SBK_QOBJECT_IDX], propList->object)); + Shiboken::AutoDecRef args(Shiboken::makeTuple(propList->object)); DeclarativeListProperty* data = reinterpret_cast(propList->data); Shiboken::AutoDecRef retVal(PyObject_CallObject(data->clear, args)); @@ -333,9 +319,7 @@ static void propListMetaCall(PySideProperty* pp, PyObject* self, QMetaObject::Ca return; DeclarativeListProperty* data = reinterpret_cast(PySide::Property::userData(pp)); - QObject* qobj; - Shiboken::Conversions::pythonToCppPointer((SbkObjectType*)SbkPySide_QtCoreTypes[SBK_QOBJECT_IDX], self, &qobj); - QDeclarativeListProperty declProp(qobj, data, &propListAppender); + QDeclarativeListProperty declProp(Shiboken::Converter::toCpp(self), data, &propListAppender); if (data->count) declProp.count = &propListCount; diff --git a/PySide/QtDeclarative/typesystem_declarative.xml b/PySide/QtDeclarative/typesystem_declarative.xml index 1bc18ba..58bce2a 100644 --- a/PySide/QtDeclarative/typesystem_declarative.xml +++ b/PySide/QtDeclarative/typesystem_declarative.xml @@ -60,7 +60,8 @@ - PySide::initQmlSupport(module); + Shiboken::TypeResolver::createValueTypeResolver< QList<QObject*> >("QList<QObject*>"); + PySide::initQmlSupport(module); @@ -103,9 +104,7 @@ %BEGIN_ALLOW_THREADS %RETURN_TYPE ok_ = %CPPSELF.%FUNCTION_NAME(%1, %2, &errorString); %END_ALLOW_THREADS - %PYARG_0 = PyTuple_New(2); - PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](ok_)); - PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QString](errorString)); + %PYARG_0 = Shiboken::makeTuple(ok_, errorString); diff --git a/PySide/QtGui/CMakeLists.txt b/PySide/QtGui/CMakeLists.txt index 7625634..8f8ff97 100644 --- a/PySide/QtGui/CMakeLists.txt +++ b/PySide/QtGui/CMakeLists.txt @@ -15,6 +15,7 @@ if(ENABLE_X11) endif() endif() + if (${QT_VERSION_MAJOR} EQUAL 4 AND ${QT_VERSION_MINOR} LESS 6) set(QtGui_46_SRC "") else() @@ -59,14 +60,6 @@ else() ) endif () -if (${QT_VERSION_MAJOR} EQUAL 4 AND ${QT_VERSION_MINOR} LESS 7) - set(QtGui_47_SRC "") -else() - set(QtGui_47_SRC - ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtGui/qpainter_pixmapfragment_wrapper.cpp - ) -endif() - set(QtGui_OPTIONAL_SRC ) set(QtGui_DROPPED_ENTRIES ) check_qt_class(QtGui QAbstractPageSetupDialog QtGui_OPTIONAL_SRC QtGui_DROPPED_ENTRIES) @@ -405,15 +398,13 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtGui/qworkspace_wrapper.cpp ${SPECIFIC_OS_FILES} ${QPYTEXTOBJECT_MOC} ${QtGui_46_SRC} -${QtGui_47_SRC} ${QtGui_OPTIONAL_SRC} ) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/typesystem_gui.xml.in" "${CMAKE_CURRENT_BINARY_DIR}/typesystem_gui.xml" @ONLY) -set(QtGui_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}") - +set(QtGui_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}") set(QtGui_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtGui/ ${pyside_SOURCE_DIR} diff --git a/PySide/QtGui/glue/qlayout_help_functions.cpp b/PySide/QtGui/glue/qlayout_help_functions.h similarity index 70% rename from PySide/QtGui/glue/qlayout_help_functions.cpp rename to PySide/QtGui/glue/qlayout_help_functions.h index b366061..41b3153 100644 --- a/PySide/QtGui/glue/qlayout_help_functions.cpp +++ b/PySide/QtGui/glue/qlayout_help_functions.h @@ -1,3 +1,6 @@ +#ifndef QLAYOUT_HELP_FUNCTIONS +#define QLAYOUT_HELP_FUNCTIONS + void addLayoutOwnership(QLayout* layout, QLayoutItem* item); void removeLayoutOwnership(QLayout* layout, QWidget* widget); @@ -13,20 +16,21 @@ inline void addLayoutOwnership(QLayout* layout, QWidget* widget) QWidget *lw = layout->parentWidget(); QWidget *pw = widget->parentWidget(); - Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QWidget*](widget)); + Shiboken::AutoDecRef pyChild(Shiboken::Converter::toPython(widget)); - //Transfer parent to layout widget + //Transfer parent to layout widget if (pw && lw && pw != lw) Shiboken::Object::setParent(0, pyChild); if (!lw && !pw) { //keep the reference while the layout is orphan - Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](layout)); + Shiboken::AutoDecRef pyParent(Shiboken::Converter::toPython(layout)); Shiboken::Object::keepReference(reinterpret_cast(pyParent.object()), retrieveObjectName(pyParent).data(), pyChild, true); } else { if (!lw) lw = pw; - Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](lw)); + + Shiboken::AutoDecRef pyParent(Shiboken::Converter::toPython(lw)); Shiboken::Object::setParent(pyParent, pyChild); } } @@ -37,8 +41,8 @@ inline void addLayoutOwnership(QLayout* layout, QLayout* other) QWidget* parent = layout->parentWidget(); if (!parent) { //keep the reference while the layout is orphan - Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QLayout*](layout)); - Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QLayout*](other)); + Shiboken::AutoDecRef pyParent(Shiboken::Converter::toPython(layout)); + Shiboken::AutoDecRef pyChild(Shiboken::Converter::toPython(other)); Shiboken::Object::keepReference(reinterpret_cast(pyParent.object()), retrieveObjectName(pyParent).data(), pyChild, true); return; } @@ -47,19 +51,18 @@ inline void addLayoutOwnership(QLayout* layout, QLayout* other) QLayoutItem* item = other->itemAt(i); if (PyErr_Occurred() || !item) return; + addLayoutOwnership(layout, item); } - Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QLayout*](layout)); - Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QLayout*](other)); + Shiboken::AutoDecRef pyParent(Shiboken::Converter::toPython(layout)); + Shiboken::AutoDecRef pyChild(Shiboken::Converter::toPython(other)); Shiboken::Object::setParent(pyParent, pyChild); + } inline void addLayoutOwnership(QLayout* layout, QLayoutItem* item) { - if (!item) - return; - QWidget* w = item->widget(); if (w) addLayoutOwnership(layout, w); @@ -69,8 +72,8 @@ inline void addLayoutOwnership(QLayout* layout, QLayoutItem* item) addLayoutOwnership(layout, l); } - Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QLayout*](layout)); - Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QLayoutItem*](item)); + Shiboken::AutoDecRef pyParent(Shiboken::Converter::toPython(layout)); + Shiboken::AutoDecRef pyChild(Shiboken::Converter::toPython(item)); Shiboken::Object::setParent(pyParent, pyChild); } @@ -80,13 +83,13 @@ static void removeWidgetFromLayout(QLayout* layout, QWidget* widget) if (!parent) { //remove reference on layout - Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](layout)); - Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QWidget*](widget)); + Shiboken::AutoDecRef pyParent(Shiboken::Converter::toPython(layout)); + Shiboken::AutoDecRef pyChild(Shiboken::Converter::toPython(widget)); Shiboken::Object::removeReference(reinterpret_cast(pyParent.object()), retrieveObjectName(pyParent).data(), pyChild); } else { //give the ownership to parent - Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](parent)); - Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QWidget*](widget)); + Shiboken::AutoDecRef pyParent(Shiboken::Converter::toPython(parent)); + Shiboken::AutoDecRef pyChild(Shiboken::Converter::toPython(widget)); Shiboken::Object::setParent(pyParent, pyChild); } } @@ -102,7 +105,7 @@ inline void removeLayoutOwnership(QLayout* layout, QLayoutItem* item) removeLayoutOwnership(layout, l); } - Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QLayoutItem*](item)); + Shiboken::AutoDecRef pyChild(Shiboken::Converter::toPython(item)); Shiboken::Object::invalidate(pyChild); Shiboken::Object::setParent(0, pyChild); } @@ -120,3 +123,5 @@ inline void removeLayoutOwnership(QLayout* layout, QWidget* widget) removeLayoutOwnership(layout, item); } } + +#endif diff --git a/PySide/QtGui/glue/qmenu_glue.cpp b/PySide/QtGui/glue/qmenu_glue.h similarity index 88% rename from PySide/QtGui/glue/qmenu_glue.cpp rename to PySide/QtGui/glue/qmenu_glue.h index 0636dfa..94eab15 100644 --- a/PySide/QtGui/glue/qmenu_glue.cpp +++ b/PySide/QtGui/glue/qmenu_glue.h @@ -1,3 +1,4 @@ + inline PyObject* addActionWithPyObject(QMenu* self, const QIcon& icon, const QString& text, PyObject* callback, const QKeySequence& shortcut) { QAction* act = new QAction(text, self); @@ -10,7 +11,7 @@ inline PyObject* addActionWithPyObject(QMenu* self, const QIcon& icon, const QSt self->addAction(act); - PyObject* pyAct = %CONVERTTOPYTHON[QAction*](act); + PyObject* pyAct = Shiboken::Converter::toPython(act); Shiboken::AutoDecRef result(PyObject_CallMethod(pyAct, "connect", "OsO", pyAct, SIGNAL(triggered()), callback)); if (result.isNull()) { Py_DECREF(pyAct); diff --git a/PySide/QtGui/glue/qmenubar_glue.cpp b/PySide/QtGui/glue/qmenubar_glue.h similarity index 87% rename from PySide/QtGui/glue/qmenubar_glue.cpp rename to PySide/QtGui/glue/qmenubar_glue.h index 2326a76..9568fa8 100644 --- a/PySide/QtGui/glue/qmenubar_glue.cpp +++ b/PySide/QtGui/glue/qmenubar_glue.h @@ -5,7 +5,7 @@ addActionWithPyObject(QMenuBar* self, const QString& text, PyObject* callback) self->addAction(act); - PyObject* pyAct = %CONVERTTOPYTHON[QAction*](act); + PyObject* pyAct = Shiboken::Converter::toPython(act); PyObject* result = PyObject_CallMethod(pyAct, "connect", "OsO", pyAct, SIGNAL(triggered(bool)), callback); diff --git a/PySide/QtGui/glue/qtgui_qapp.cpp b/PySide/QtGui/glue/qtgui_qapp.cpp index 5148b57..4c4508b 100644 --- a/PySide/QtGui/glue/qtgui_qapp.cpp +++ b/PySide/QtGui/glue/qtgui_qapp.cpp @@ -1,6 +1,6 @@ // Init qApp macro to None. if (qApp) { - PyObject* pyApp = %CONVERTTOPYTHON[QApplication*](qApp); + PyObject* pyApp = Shiboken::Converter::toPython(qApp); Py_INCREF(pyApp); PyModule_AddObject(module, "qApp", pyApp); } else { diff --git a/PySide/QtGui/glue/qwidget_glue.cpp b/PySide/QtGui/glue/qwidget_glue.h similarity index 84% rename from PySide/QtGui/glue/qwidget_glue.cpp rename to PySide/QtGui/glue/qwidget_glue.h index cfa3f67..931a528 100644 --- a/PySide/QtGui/glue/qwidget_glue.cpp +++ b/PySide/QtGui/glue/qwidget_glue.h @@ -10,7 +10,7 @@ static QString retrieveObjectName(PyObject *obj) **/ static inline void qwidgetReparentLayout(QWidget *parent, QLayout *layout) { - Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](parent)); + Shiboken::AutoDecRef pyParent(Shiboken::Converter::toPython(parent)); for (int i=0; i < layout->count(); i++) { QLayoutItem* item = layout->itemAt(i); @@ -21,7 +21,7 @@ static inline void qwidgetReparentLayout(QWidget *parent, QLayout *layout) if (w) { QWidget* pw = w->parentWidget(); if (pw != parent) { - Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QWidget*](w)); + Shiboken::AutoDecRef pyChild(Shiboken::Converter::toPython(w)); Shiboken::Object::setParent(pyParent, pyChild); } } else { @@ -31,7 +31,7 @@ static inline void qwidgetReparentLayout(QWidget *parent, QLayout *layout) } } - Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QLayout*](layout)); + Shiboken::AutoDecRef pyChild(Shiboken::Converter::toPython(layout)); Shiboken::Object::setParent(pyParent, pyChild); //remove previous references Shiboken::Object::keepReference(reinterpret_cast(pyChild.object()), qPrintable(retrieveObjectName(pyChild)), Py_None); @@ -46,7 +46,7 @@ static inline void qwidgetSetLayout(QWidget *self, QLayout *layout) if (oldParent && oldParent != self) { if (oldParent->isWidgetType()) { // remove old parent policy - Shiboken::AutoDecRef pyLayout(%CONVERTTOPYTHON[QLayout*](layout)); + Shiboken::AutoDecRef pyLayout(Shiboken::Converter::toPython(layout)); Shiboken::Object::setParent(Py_None, pyLayout); } else { PyErr_Format(PyExc_RuntimeError, "QWidget::setLayout: Attempting to set QLayout \"%s\" on %s \"%s\", when the QLayout already has a parent", diff --git a/PySide/QtGui/glue/wid_conversions.h b/PySide/QtGui/glue/wid_conversions.h new file mode 100644 index 0000000..1abb5f2 --- /dev/null +++ b/PySide/QtGui/glue/wid_conversions.h @@ -0,0 +1,34 @@ +#ifndef Q_WS_WIN +namespace Shiboken { +template <> +struct Converter +{ + static bool checkType(PyObject* pyObj) + { + return false; + } + + static bool isConvertible(PyObject* pyobj) + { + return PyCObject_Check(pyobj); + } + + static inline PyObject* toPython(void* cppobj) + { + // not supported + Q_ASSERT(true); + return 0; + } + + static PyObject* toPython(WId cppobj) + { + return PyCObject_FromVoidPtr(cppobj, 0); + } + + static WId toCpp(PyObject* pyobj) + { + return (WId) PyCObject_AsVoidPtr(pyobj); + } +}; +} +#endif diff --git a/PySide/QtGui/qpixmap_conversion.h b/PySide/QtGui/qpixmap_conversion.h new file mode 100644 index 0000000..fc49af6 --- /dev/null +++ b/PySide/QtGui/qpixmap_conversion.h @@ -0,0 +1,49 @@ +namespace Shiboken { +inline bool Converter::checkType(PyObject* pyObj) +{ + return ValueTypeConverter::checkType(pyObj); +} + +inline bool Converter::isConvertible(PyObject* pyobj) +{ + if (ValueTypeConverter::isConvertible(pyobj)) + return true; + SbkObjectType* shiboType = reinterpret_cast(SbkType()); + bool isVariant = Shiboken::Converter::checkType(pyobj); + if (isVariant) { + QVariant var(Shiboken::Converter::toCpp(pyobj)); + return var.type() == QVariant::Pixmap; + } else if (Shiboken::Converter::checkType(pyobj) || Shiboken::Converter::checkType(pyobj)) { + return true; + } else { + return Shiboken::ObjectType::isExternalConvertible(shiboType, pyobj); + } + return false; + +} + +inline QPixmap Converter::toCpp(PyObject* pyobj) +{ + SbkObjectType* shiboType = reinterpret_cast(SbkType()); + bool isVariant = Converter::checkType(pyobj); + if (isVariant) { + QVariant var(Converter::toCpp(pyobj)); + return var.value(); + } else if (Converter::checkType(pyobj)) { + return QPixmap(Shiboken::Converter::toCpp(pyobj)); + } else if (Converter::checkType(pyobj)) { + return QPixmap(Shiboken::Converter::toCpp(pyobj)); + } else if (Shiboken::ObjectType::isExternalConvertible(shiboType, pyobj) && Shiboken::ObjectType::hasExternalCppConversions(shiboType)) { + QPixmap* cptr = reinterpret_cast(Shiboken::ObjectType::callExternalCppConversion(shiboType, pyobj)); + std::auto_ptr cptr_auto_ptr(cptr); + return *cptr; + } + + return *Converter::toCpp(pyobj); +} + +inline PyObject* Converter::toPython(const QPixmap& cppObj) +{ + return ValueTypeConverter::toPython(cppObj); +} +} diff --git a/PySide/QtGui/typesystem_gui_common.xml b/PySide/QtGui/typesystem_gui_common.xml index 552636a..4b0785b 100644 --- a/PySide/QtGui/typesystem_gui_common.xml +++ b/PySide/QtGui/typesystem_gui_common.xml @@ -225,7 +225,7 @@ - + QTransform _result; if (QTransform::quadToQuad(%1, %2, _result)) { @@ -236,7 +236,7 @@ } - + QTransform _result; if (QTransform::quadToSquare(%1, _result)) { @@ -248,7 +248,7 @@ - + QTransform _result; if (QTransform::squareToQuad(%1, _result)) { @@ -396,22 +396,22 @@ - + - - + + - - + + - - + + - + @@ -448,12 +448,10 @@ - %BEGIN_ALLOW_THREADS - %RETURN_TYPE %0 = %CPPSELF->::%TYPE::%FUNCTION_NAME(&%1, %2); - %END_ALLOW_THREADS - %PYARG_0 = PyTuple_New(2); - PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](%0)); - PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[%ARG1_TYPE](%1)); + %BEGIN_ALLOW_THREADS + %RETURN_TYPE %0 = %CPPSELF->::%TYPE::%FUNCTION_NAME(&%1, %2); + %END_ALLOW_THREADS + %PYARG_0 = Shiboken::makeTuple(%0, %1); @@ -690,7 +688,7 @@ - + // %FUNCTION_NAME() @@ -713,7 +711,7 @@ - + @@ -798,14 +796,7 @@ free(xpm); - - - - - - - - + @@ -920,11 +911,9 @@ @@ -1019,14 +1008,14 @@ - + - + @@ -1079,17 +1068,11 @@ %PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.%FUNCTION_NAME(%1), %CPPSELF.bytesPerLine()); - - - %PYARG_0 = Shiboken::Buffer::newObject(%CPPSELF.%FUNCTION_NAME(%1), %CPPSELF.bytesPerLine(), Shiboken::Buffer::ReadWrite); - - - - + @@ -2427,7 +2384,7 @@ - + @@ -2458,7 +2415,9 @@ - + + + @@ -2528,7 +2487,7 @@ - + QPixmap p; if (%CPPSELF.%FUNCTION_NAME(%1, &p)) { @@ -2563,7 +2522,7 @@ - + @@ -2726,11 +2685,6 @@ - - - - - @@ -3139,7 +3093,10 @@ - + + + + @@ -3239,7 +3196,9 @@ - + + + @@ -3249,7 +3208,9 @@ - + + + @@ -3293,7 +3254,9 @@ - + + + @@ -3366,13 +3329,9 @@ - int a, b, c, d; - %CPPSELF.%FUNCTION_NAME(%1, &a, &b, &c, &d); - %PYARG_0 = PyTuple_New(4); - PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[int](a)); - PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[int](b)); - PyTuple_SET_ITEM(%PYARG_0, 2, %CONVERTTOPYTHON[int](c)); - PyTuple_SET_ITEM(%PYARG_0, 3, %CONVERTTOPYTHON[int](d)); + int a, b, c, d; + %CPPSELF.%FUNCTION_NAME(%1, &a, &b, &c, &d); + %PYARG_0 = Shiboken::makeTuple(a, b, c, d); @@ -3451,10 +3410,9 @@ Shiboken::AutoDecRef option_object(PyList_New(0)); for (int i=0, max=numItems; i < max; i++) { - const QStyleOptionGraphicsItem* item = &%in[i]; - PyList_Append(option_object, %CONVERTTOPYTHON[QStyleOptionGraphicsItem](item)); + PyList_Append(option_object, %CONVERTTOPYTHON[QStyleOptionGraphicsItem](%in[i])); } - PyObject* %out = option_object.object(); + PyObject *%out = option_object.object(); @@ -3470,7 +3428,7 @@ - + @@ -3479,7 +3437,7 @@ - + @@ -3488,7 +3446,7 @@ - + @@ -3497,7 +3455,7 @@ - + @@ -3506,7 +3464,7 @@ - + @@ -3604,24 +3562,24 @@ - + - + - + - + @@ -3632,38 +3590,38 @@ - + - + - + - + - + - + - + @@ -3759,7 +3717,7 @@ - + @@ -3821,17 +3779,17 @@ - + - + - + @@ -3868,17 +3826,17 @@ - + - + - + @@ -3893,17 +3851,17 @@ - + - + - + @@ -3913,12 +3871,12 @@ - + - + @@ -3994,12 +3952,12 @@ - + - + @@ -4021,10 +3979,9 @@ + - - @@ -4247,7 +4204,7 @@ - + @@ -4283,7 +4240,7 @@ If a widget is non-native (alien) and winId() is invoked on it, that widget will be provided a native handle. - On X11 the type returned is long, on other platforms it's void pointer casted to a Python long long. + On X11 the type returned is long, on other platforms it's a PyCObject. This value may change at run-time. An event with type PySide.QtCore.QEvent.WinIdChange will be sent to the widget following a change in window system identifier. @@ -4529,7 +4486,7 @@ - + @@ -4540,7 +4497,7 @@ - + @@ -4555,7 +4512,7 @@ - + @@ -4731,29 +4688,29 @@ - + - + - + - + - + // Clear parent from the old child QStandardItem* _i = %CPPSELF->item(%1, %2); @@ -4766,7 +4723,7 @@ - + // Clear parent from the old child QStandardItem* _i = %CPPSELF->item(%1); @@ -4779,13 +4736,13 @@ - + - + // Clear parent from the old child QStandardItem* _i = %CPPSELF->verticalHeaderItem(%1); @@ -4817,19 +4774,19 @@ - + - + - + @@ -4869,12 +4826,8 @@ - %BEGIN_ALLOW_THREADS - %RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2); - %END_ALLOW_THREADS - %PYARG_0 = PyTuple_New(2); - PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](retval_)); - PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[%ARG1_TYPE](%1)); + %RETURN_TYPE retval_ = %CPPSELF.%FUNCTION_NAME(%1, %2); + %PYARG_0 = Shiboken::makeTuple(retval_, %1); @@ -5086,18 +5039,18 @@ - + - + - + @@ -5200,13 +5153,13 @@ - + - + @@ -5258,12 +5211,12 @@ Shiboken::AutoDecRef result(PyObject_CallMethod(%PYARG_0, "connect", "OsO", %PYARG_0, SIGNAL(triggered()), %PYARG_2)); - + - + @@ -5425,12 +5378,9 @@ - - - - + - + - + - - - - - - + + + + + + - + - + - + %BEGIN_ALLOW_THREADS @@ -5478,7 +5428,7 @@ %END_ALLOW_THREADS - + %BEGIN_ALLOW_THREADS @@ -5486,13 +5436,13 @@ %END_ALLOW_THREADS - + - + @@ -5506,32 +5456,32 @@ - + - + - + - + - + - + @@ -5685,21 +5635,21 @@ - + + + @@ -6752,18 +6702,6 @@ - - - - - - - - - - - - diff --git a/PySide/QtGui/typesystem_gui_win.xml b/PySide/QtGui/typesystem_gui_win.xml index 387964d..1249296 100644 --- a/PySide/QtGui/typesystem_gui_win.xml +++ b/PySide/QtGui/typesystem_gui_win.xml @@ -19,31 +19,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA --> + - - - #ifdef IS_PY3K - return PyCapsule_New(%in, 0, 0); - #else - return PyCObject_FromVoidPtr(%in, 0); - #endif - - - - %out = 0; - - - #ifdef IS_PY3K - %out = (%OUTTYPE)PyCapsule_GetPointer(%in, 0); - #else - %out = (%OUTTYPE)PyCObject_AsVoidPtr(%in); - #endif - - - + - - - diff --git a/PySide/QtHelp/CMakeLists.txt b/PySide/QtHelp/CMakeLists.txt index 041ef63..0ca0272 100644 --- a/PySide/QtHelp/CMakeLists.txt +++ b/PySide/QtHelp/CMakeLists.txt @@ -15,7 +15,7 @@ set(QtHelp_SRC ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtHelp/qthelp_module_wrapper.cpp ) -set(QtHelp_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtHelp_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") +set(QtHelp_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtHelp_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtHelp_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} diff --git a/PySide/QtMaemo5/CMakeLists.txt b/PySide/QtMaemo5/CMakeLists.txt index 41397f4..30bf15c 100644 --- a/PySide/QtMaemo5/CMakeLists.txt +++ b/PySide/QtMaemo5/CMakeLists.txt @@ -11,7 +11,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtMaemo5/qmaemo5valuebutton_wrapper. ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtMaemo5/qtmaemo5_module_wrapper.cpp ) -set(QtMaemo5_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtMaemo5_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") +set(QtMaemo5_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtMaemo5_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") # QT_QTMAEMO5_* variables are not defined by CMake if(NOT QT_QTMAEMO5_INCLUDE_DIR) diff --git a/PySide/QtMultimedia/CMakeLists.txt b/PySide/QtMultimedia/CMakeLists.txt index ea37c80..8823838 100644 --- a/PySide/QtMultimedia/CMakeLists.txt +++ b/PySide/QtMultimedia/CMakeLists.txt @@ -17,7 +17,7 @@ set(QtMultimedia_SRC ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtMultimedia/qvideoframe_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtMultimedia/qtmultimedia_module_wrapper.cpp ) -set(QtMultimedia_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") +set(QtMultimedia_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtMultimedia_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtMultimedia/ diff --git a/PySide/QtMultimedia/typesystem_multimedia.xml b/PySide/QtMultimedia/typesystem_multimedia.xml index b1a684f..04e064b 100644 --- a/PySide/QtMultimedia/typesystem_multimedia.xml +++ b/PySide/QtMultimedia/typesystem_multimedia.xml @@ -37,8 +37,6 @@ - - diff --git a/PySide/QtNetwork/CMakeLists.txt b/PySide/QtNetwork/CMakeLists.txt index c18d70a..9149202 100644 --- a/PySide/QtNetwork/CMakeLists.txt +++ b/PySide/QtNetwork/CMakeLists.txt @@ -56,7 +56,7 @@ ${QtNetwork_47_SRC} ${QtNetwork_OPTIONAL_SRC} ) -set(QtNetwork_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}") +set(QtNetwork_typesystem_path "${QtCore_SOURCE_DIR}") set(QtNetwork_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtNetwork/ ${QT_INCLUDE_DIR} diff --git a/PySide/QtNetwork/glue/qudpsocket_read_datagram_glue.cpp b/PySide/QtNetwork/glue/qudpsocket_read_datagram_glue.cpp new file mode 100644 index 0000000..bffc042 --- /dev/null +++ b/PySide/QtNetwork/glue/qudpsocket_read_datagram_glue.cpp @@ -0,0 +1,6 @@ + Shiboken::AutoArrayPointer data(%ARGUMENT_NAMES); + QHostAddress ha; + quint16 port; + + %RETURN_TYPE retval = %CPPSELF.%FUNCTION_NAME(data, %ARGUMENT_NAMES, &ha, &port); + %PYARG_0 = Shiboken::makeTuple(QByteArray(data, retval), ha, port); diff --git a/PySide/QtNetwork/typesystem_network.xml b/PySide/QtNetwork/typesystem_network.xml index a8327cd..250129b 100644 --- a/PySide/QtNetwork/typesystem_network.xml +++ b/PySide/QtNetwork/typesystem_network.xml @@ -136,19 +136,7 @@ - - Shiboken::AutoArrayPointer<char> data(%ARGUMENT_NAMES); - QHostAddress ha; - quint16 port; - %BEGIN_ALLOW_THREADS - %RETURN_TYPE retval = %CPPSELF.%FUNCTION_NAME(data, %ARGUMENT_NAMES, &ha, &port); - %END_ALLOW_THREADS - QByteArray ba(data, retval); - %PYARG_0 = PyTuple_New(3); - PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[QByteArray](ba)); - PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QHostAddress](ha)); - PyTuple_SET_ITEM(%PYARG_0, 2, %CONVERTTOPYTHON[quint16](port)); - + diff --git a/PySide/QtOpenGL/CMakeLists.txt b/PySide/QtOpenGL/CMakeLists.txt index 3f977db..44ba1c1 100644 --- a/PySide/QtOpenGL/CMakeLists.txt +++ b/PySide/QtOpenGL/CMakeLists.txt @@ -32,7 +32,7 @@ set(QtOpenGL_SRC ${QtOpenGL_47_SRC} ) -set(QtOpenGL_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtOpenGL_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") +set(QtOpenGL_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtOpenGL_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtOpenGL_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} diff --git a/PySide/QtOpenGL/typesystem_opengl.xml b/PySide/QtOpenGL/typesystem_opengl.xml index 60a2d18..0a1579c 100644 --- a/PySide/QtOpenGL/typesystem_opengl.xml +++ b/PySide/QtOpenGL/typesystem_opengl.xml @@ -21,21 +21,6 @@ - - - - - - - - - - - - - - - @@ -205,8 +190,9 @@ + - + @@ -222,7 +208,7 @@ - + @@ -430,7 +416,7 @@ - + @@ -446,7 +432,7 @@ - + @@ -654,20 +640,13 @@ - - - - - - - - - - - + + + + @@ -678,13 +657,15 @@ - + - int size = (%2 < 0) ? %1.size() : %2; + int size = %2; + if (size < 0) + size = %1.size(); %CPPSELF.allocate((const void*) %1.data(), size); @@ -716,21 +697,21 @@ QByteArray ret; if (result) ret.append((const char*)data, %3); - %PYARG_0 = PyTuple_New(2); - PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[bool](result)); - PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QByteArray](ret)); + %PYARG_0 = Shiboken::makeTuple(result, ret); delete[] data; - + - int size = (%3 < 0) ? %2.size() : %3; + int size = %3; + if (size < 0) + size = %2.size(); %CPPSELF.write(%1, (const void*) %2.data(), size); diff --git a/PySide/QtScript/CMakeLists.txt b/PySide/QtScript/CMakeLists.txt index 48dc85f..024d51f 100644 --- a/PySide/QtScript/CMakeLists.txt +++ b/PySide/QtScript/CMakeLists.txt @@ -25,7 +25,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript/qscriptvalueiterator_wrapper.cpp ${QtScript_47_SRC} ) -set(QtScript_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}") +set(QtScript_typesystem_path "${QtCore_SOURCE_DIR}") set(QtScript_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScript ${QT_INCLUDE_DIR} diff --git a/PySide/QtScript/typesystem_script.xml b/PySide/QtScript/typesystem_script.xml index d787b22..af2f198 100644 --- a/PySide/QtScript/typesystem_script.xml +++ b/PySide/QtScript/typesystem_script.xml @@ -98,16 +98,12 @@ - if (%CPPSELF.hasNext()) { - %CPPSELF.next(); - QString name = %CPPSELF.name(); - QVariant value = %CPPSELF.value().toVariant(); - %PYARG_0 = PyTuple_New(2); - PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[QString](name)); - PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QVariant](value)); - } else { - PyErr_SetNone(PyExc_StopIteration); - } + if (%CPPSELF.hasNext()) { + %CPPSELF.next(); + %PYARG_0 = Shiboken::makeTuple(%CPPSELF.name(), %CPPSELF.value().toVariant()); + } else { + PyErr_SetNone(PyExc_StopIteration); + } diff --git a/PySide/QtScriptTools/CMakeLists.txt b/PySide/QtScriptTools/CMakeLists.txt index 0a98042..575dcc3 100644 --- a/PySide/QtScriptTools/CMakeLists.txt +++ b/PySide/QtScriptTools/CMakeLists.txt @@ -5,7 +5,7 @@ set(QtScriptTools_SRC ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtScriptTools/qscriptenginedebugger_wrapper.cpp ) -set(QtScriptTools_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtScript_SOURCE_DIR}${PATH_SEP}${QtScriptTools_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") +set(QtScriptTools_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtScript_SOURCE_DIR}${PATH_SEP}${QtScriptTools_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtScriptTools_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${QT_QTCORE_INCLUDE_DIR} diff --git a/PySide/QtSql/CMakeLists.txt b/PySide/QtSql/CMakeLists.txt index f1dc384..7da42d4 100644 --- a/PySide/QtSql/CMakeLists.txt +++ b/PySide/QtSql/CMakeLists.txt @@ -21,7 +21,7 @@ set(QtSql_SRC ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtSql/qtsql_module_wrapper.cpp ) -set(QtSql_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtSql_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") +set(QtSql_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtSql_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtSql_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} diff --git a/PySide/QtSvg/CMakeLists.txt b/PySide/QtSvg/CMakeLists.txt index eb0f9a2..b1e5477 100644 --- a/PySide/QtSvg/CMakeLists.txt +++ b/PySide/QtSvg/CMakeLists.txt @@ -8,7 +8,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtSvg/qsvgwidget_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtSvg/qtsvg_module_wrapper.cpp ) -set(QtSvg_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") +set(QtSvg_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtSvg_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtSvg/ ${QT_INCLUDE_DIR} diff --git a/PySide/QtTest/CMakeLists.txt b/PySide/QtTest/CMakeLists.txt index bf86ad5..6ef7a42 100644 --- a/PySide/QtTest/CMakeLists.txt +++ b/PySide/QtTest/CMakeLists.txt @@ -14,7 +14,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtTest/qttest_module_wrapper.cpp ${QtTest_46_SRC} ) -set(QtTest_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") +set(QtTest_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtTest_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtTest/ ${QT_INCLUDE_DIR} diff --git a/PySide/QtUiTools/CMakeLists.txt b/PySide/QtUiTools/CMakeLists.txt index 89d2988..195cb81 100644 --- a/PySide/QtUiTools/CMakeLists.txt +++ b/PySide/QtUiTools/CMakeLists.txt @@ -5,7 +5,7 @@ set(QtUiTools_SRC ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtUiTools/quiloader_wrapper.cpp ) -set(QtUiTools_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtXml_SOURCE_DIR}${PATH_SEP}${QtUiTools_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") +set(QtUiTools_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtXml_SOURCE_DIR}${PATH_SEP}${QtUiTools_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtUiTools_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} @@ -23,10 +23,10 @@ set(QtUiTools_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} set(QtUiTools_libraries pyside uiplugin ${SHIBOKEN_PYTHON_LIBRARIES} - ${QT_QTUITOOLS_LIBRARY} - ${QT_QTDESIGNER_LIBRARY} ${QT_QTCORE_LIBRARY} - ${QT_QTGUI_LIBRARY}) + ${QT_QTGUI_LIBRARY} + ${QT_QTDESIGNER_LIBRARY} + ${QT_QTUITOOLS_LIBRARY}) set(QtUiTools_deps QtGui QtXml) create_pyside_module(QtUiTools QtUiTools_include_dirs diff --git a/PySide/QtUiTools/glue/plugins.h b/PySide/QtUiTools/glue/plugins.h index 78e5a20..09070bf 100644 --- a/PySide/QtUiTools/glue/plugins.h +++ b/PySide/QtUiTools/glue/plugins.h @@ -33,13 +33,13 @@ inline void registerCustomWidget(PyObject* obj) if (plugin == 0) { foreach(QObject* o, QPluginLoader::staticInstances()) { plugin = qobject_cast(o); - if (plugin) + if (o) break; } } if (!plugin) - qDebug() << "Failed to load uiloader plugin."; + qDebug() << "Fail to load uiloader plugin"; else plugin->registerWidgetType(obj); } diff --git a/PySide/QtUiTools/glue/uitools_loadui.cpp b/PySide/QtUiTools/glue/uitools_loadui.h similarity index 84% rename from PySide/QtUiTools/glue/uitools_loadui.cpp rename to PySide/QtUiTools/glue/uitools_loadui.h index 829adf7..654ba0a 100644 --- a/PySide/QtUiTools/glue/uitools_loadui.cpp +++ b/PySide/QtUiTools/glue/uitools_loadui.h @@ -17,7 +17,7 @@ static void createChildrenNameAttributes(PyObject* root, QObject* object) if (!name.isEmpty() && !name.startsWith("_") && !name.startsWith("qt_")) { bool hasAttr = PyObject_HasAttrString(root, name.constData()); if (!hasAttr) { - Shiboken::AutoDecRef pyChild(%CONVERTTOPYTHON[QObject*](child)); + Shiboken::AutoDecRef pyChild(Shiboken::Converter::toPython(child)); PyObject_SetAttrString(root, name.constData(), pyChild); } createChildrenNameAttributes(root, child); @@ -31,12 +31,14 @@ static PyObject* QUiLoadedLoadUiFromDevice(QUiLoader* self, QIODevice* dev, QWid QWidget* wdg = self->load(dev, parent); if (wdg) { - PyObject* pyWdg = %CONVERTTOPYTHON[QWidget*](wdg); + PyObject* pyWdg = Shiboken::Converter::toPython(wdg); + createChildrenNameAttributes(pyWdg, wdg); if (parent) { - Shiboken::AutoDecRef pyParent(%CONVERTTOPYTHON[QWidget*](parent)); + Shiboken::AutoDecRef pyParent(Shiboken::Converter::toPython(parent)); Shiboken::Object::setParent(pyParent, pyWdg); } + return pyWdg; } diff --git a/PySide/QtUiTools/typesystem_uitools.xml b/PySide/QtUiTools/typesystem_uitools.xml index 08e98bd..d7e405b 100644 --- a/PySide/QtUiTools/typesystem_uitools.xml +++ b/PySide/QtUiTools/typesystem_uitools.xml @@ -26,7 +26,6 @@ - Q_IMPORT_PLUGIN(uiplugin); @@ -70,32 +69,34 @@ %CPPSELF.addPluginPath(""); // force reload widgets - + - + - + - + - - + + + + @@ -111,6 +112,9 @@ + + + diff --git a/PySide/QtWebKit/CMakeLists.txt b/PySide/QtWebKit/CMakeLists.txt index 74d89f8..83445db 100644 --- a/PySide/QtWebKit/CMakeLists.txt +++ b/PySide/QtWebKit/CMakeLists.txt @@ -37,7 +37,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtWebKit/webcore_wrapper.cpp ${QtWebKit_46_SRC} ) -set(QtWebKit_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtNetwork_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") +set(QtWebKit_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${QtNetwork_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(QtWebkit_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtWebkit/ ${QT_INCLUDE_DIR} diff --git a/PySide/QtWebKit/typesystem_webkit.xml b/PySide/QtWebKit/typesystem_webkit.xml index 86b8431..ac57dd1 100644 --- a/PySide/QtWebKit/typesystem_webkit.xml +++ b/PySide/QtWebKit/typesystem_webkit.xml @@ -98,11 +98,11 @@ // Cast the parameters according to the extension type if (extension == QWebPage::ChooseMultipleFilesExtension) { const ChooseMultipleFilesExtension$TYPE_SUFFIX* _in = reinterpret_cast<const ChooseMultipleFilesExtension$TYPE_SUFFIX*>(%in); - %out = %CONVERTTOPYTHON[const QWebPage::ChooseMultipleFilesExtension$TYPE_SUFFIX*](_in); + %out = %CONVERTTOPYTHON[const ChooseMultipleFilesExtension$TYPE_SUFFIX*](_in); #if QT_VERSION >= 0x040600 } else if (extension == QWebPage::ErrorPageExtension) { const ErrorPageExtension$TYPE_SUFFIX* _in = reinterpret_cast<const ErrorPageExtension$TYPE_SUFFIX*>(%in); - %out = %CONVERTTOPYTHON[const QWebPage::ErrorPageExtension$TYPE_SUFFIX*](_in); + %out = %CONVERTTOPYTHON[const ErrorPageExtension$TYPE_SUFFIX*](_in); #endif } diff --git a/PySide/QtXml/CMakeLists.txt b/PySide/QtXml/CMakeLists.txt index 3e5a7c7..a06c710 100644 --- a/PySide/QtXml/CMakeLists.txt +++ b/PySide/QtXml/CMakeLists.txt @@ -35,7 +35,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtXml/qxmlreader_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtXml/qxmlsimplereader_wrapper.cpp ) -set(QtXml_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}") +set(QtXml_typesystem_path "${QtCore_SOURCE_DIR}") set(QtXml_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtXml ${CMAKE_SOURCE_DIR} diff --git a/PySide/QtXml/typesystem_xml.xml b/PySide/QtXml/typesystem_xml.xml index 19b1520..1bf07de 100644 --- a/PySide/QtXml/typesystem_xml.xml +++ b/PySide/QtXml/typesystem_xml.xml @@ -33,17 +33,14 @@ @@ -272,13 +269,13 @@ - QXmlInputSource* _qxmlinputsource_arg_ = 0; - %BEGIN_ALLOW_THREADS - %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(%1, %2, _qxmlinputsource_arg_); - %END_ALLOW_THREADS - %PYARG_0 = PyTuple_New(2); - PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](%0)); - PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QXmlInputSource*](_qxmlinputsource_arg_)); + QXmlInputSource* _qxmlinputsource_arg_ = 0; + + %BEGIN_ALLOW_THREADS + %RETURN_TYPE %0 = %CPPSELF.%FUNCTION_NAME(%1, %2, _qxmlinputsource_arg_); + %END_ALLOW_THREADS + + %PYARG_0 = Shiboken::makeTuple(%0, _qxmlinputsource_arg_); @@ -299,13 +296,11 @@ - QXmlInputSource* _qxmlinputsource_arg_ = 0; - %BEGIN_ALLOW_THREADS - %RETURN_TYPE %0 = %CPPSELF.%TYPE::%FUNCTION_NAME(%1, %2, _qxmlinputsource_arg_); - %END_ALLOW_THREADS - %PYARG_0 = PyTuple_New(2); - PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[%RETURN_TYPE](%0)); - PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QXmlInputSource*](_qxmlinputsource_arg_)); + QXmlInputSource* _qxmlinputsource_arg_ = 0; + %BEGIN_ALLOW_THREADS + %RETURN_TYPE %0 = %CPPSELF.%TYPE::%FUNCTION_NAME(%1, %2, _qxmlinputsource_arg_); + %END_ALLOW_THREADS + %PYARG_0 = Shiboken::makeTuple(%0, _qxmlinputsource_arg_); diff --git a/PySide/QtXmlPatterns/CMakeLists.txt b/PySide/QtXmlPatterns/CMakeLists.txt index 6efa4b0..0d789ff 100644 --- a/PySide/QtXmlPatterns/CMakeLists.txt +++ b/PySide/QtXmlPatterns/CMakeLists.txt @@ -26,7 +26,7 @@ set(QtXmlPatterns_SRC ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtXmlPatterns/qxmlserializer_wrapper.cpp ${QtXmlPatterns_46_SRC} ) -set(QtXmlPatterns_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}") +set(QtXmlPatterns_typesystem_path "${QtCore_SOURCE_DIR}") set(QtXmlPatterns_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTXMLPATTERNS_INCLUDE_DIR} diff --git a/PySide/QtXmlPatterns/typesystem_xmlpatterns.xml b/PySide/QtXmlPatterns/typesystem_xmlpatterns.xml index d3ae58f..98e51d3 100644 --- a/PySide/QtXmlPatterns/typesystem_xmlpatterns.xml +++ b/PySide/QtXmlPatterns/typesystem_xmlpatterns.xml @@ -87,11 +87,7 @@ - - - - diff --git a/PySide/__init__.py.in b/PySide/__init__.py.in index da6cd69..9536718 100644 --- a/PySide/__init__.py.in +++ b/PySide/__init__.py.in @@ -1,3 +1,9 @@ +import sys + __all__ = ['QtCore', 'QtGui', 'QtNetwork', 'QtOpenGL', 'QtSql', 'QtSvg', 'QtTest', 'QtWebKit', 'QtScript'] + +if sys.version_info[0] < 3: + import private + __version__ = "@BINDING_API_VERSION_FULL@" __version_info__ = (@BINDING_API_MAJOR_VERSION@, @BINDING_API_MINOR_VERSION@, @BINDING_API_MICRO_VERSION@, "@BINDING_API_RELEASE_LEVEL@", @BINDING_API_SERIAL@) diff --git a/PySide/phonon/CMakeLists.txt b/PySide/phonon/CMakeLists.txt index 0564029..c11fe43 100644 --- a/PySide/phonon/CMakeLists.txt +++ b/PySide/phonon/CMakeLists.txt @@ -49,7 +49,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/phonon/phonon_backendcapabilities_notifierwra ${phonon_OPTIONAL_SRC} ) -set(phonon_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtCore_BINARY_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${phonon_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") +set(phonon_typesystem_path "${QtCore_SOURCE_DIR}${PATH_SEP}${QtGui_SOURCE_DIR}${PATH_SEP}${phonon_SOURCE_DIR}${PATH_SEP}${QtGui_BINARY_DIR}") set(phonon_include_dirs ${CMAKE_CURRENT_SOURCE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} diff --git a/PySide/private.py b/PySide/private.py new file mode 100644 index 0000000..0fe1c13 --- /dev/null +++ b/PySide/private.py @@ -0,0 +1,4 @@ +import atexit +from QtCore import __moduleShutdown + +atexit.register(__moduleShutdown) diff --git a/PySide/typesystem_templates.xml b/PySide/typesystem_templates.xml index 2903ae4..c985fb2 100644 --- a/PySide/typesystem_templates.xml +++ b/PySide/typesystem_templates.xml @@ -30,80 +30,68 @@ - - - + -