@@ -45,9 +45,9 @@ macro(SetupShibokenAndPyside)
|
||||
if(NOT SHIBOKEN_INCLUDE_DIR)
|
||||
find_pip_package(Shiboken${SHIBOKEN_MAJOR_VERSION})
|
||||
if (Shiboken${SHIBOKEN_MAJOR_VERSION}_FOUND)
|
||||
set(Shiboken_INCLUDE_DIR ${Shiboken${SHIBOKEN_MAJOR_VERSION}_INCLUDE_DIRS})
|
||||
set(Shiboken_LIBRARY ${Shiboken${SHIBOKEN_MAJOR_VERSION}_LIBRARIES})
|
||||
set(Shiboken_FOUND TRUE)
|
||||
set(SHIBOKEN_INCLUDE_DIR ${Shiboken${SHIBOKEN_MAJOR_VERSION}_INCLUDE_DIRS})
|
||||
set(SHIBOKEN_LIBRARY ${Shiboken${SHIBOKEN_MAJOR_VERSION}_LIBRARIES})
|
||||
set(SHIBOKEN_FOUND TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -60,9 +60,9 @@ macro(SetupShibokenAndPyside)
|
||||
if(NOT PYSIDE_INCLUDE_DIR)
|
||||
find_pip_package(PySide${PYSIDE_MAJOR_VERSION})
|
||||
if (PySide${PYSIDE_MAJOR_VERSION}_FOUND)
|
||||
set(PySide_INCLUDE_DIR ${PySide${PYSIDE_MAJOR_VERSION}_INCLUDE_DIRS})
|
||||
set(PySide_LIBRARY ${PySide${PYSIDE_MAJOR_VERSION}_LIBRARIES})
|
||||
set(PySide_FOUND TRUE)
|
||||
set(PYSIDE_INCLUDE_DIR ${PySide${PYSIDE_MAJOR_VERSION}_INCLUDE_DIRS})
|
||||
set(PYSIDE_LIBRARY ${PySide${PYSIDE_MAJOR_VERSION}_LIBRARIES})
|
||||
set(PYSIDE_FOUND TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -192,9 +192,9 @@ macro(find_pip_package PACKAGE)
|
||||
endforeach()
|
||||
file(TO_NATIVE_PATH "${PIP_PACKAGE_LOCATION}/${PIP_PACKAGE_NAME}/include" INCLUDE_DIR)
|
||||
file(TO_NATIVE_PATH "${PIP_PACKAGE_LOCATION}/${PIP_PACKAGE_NAME}/lib" LIBRARY)
|
||||
set(${PACKAGE}_INCLUDE_DIRS ${INCLUDE_DIR} PARENT_SCOPE)
|
||||
set(${PACKAGE}_LIBRARIES ${LIBRARY} PARENT_SCOPE)
|
||||
set(${PACKAGE}_FOUND ${LIBRARY} TRUE)
|
||||
set(${PACKAGE}_INCLUDE_DIRS ${INCLUDE_DIR})
|
||||
set(${PACKAGE}_LIBRARIES ${LIBRARY})
|
||||
set(${PACKAGE}_FOUND TRUE)
|
||||
message(STATUS "Found pip-installed ${PACKAGE} in ${PIP_PACKAGE_LOCATION}/${PIP_PACKAGE_NAME}")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
@@ -354,6 +354,13 @@ private:
|
||||
~WrapperManager() override = default;
|
||||
};
|
||||
|
||||
static std::string formatModuleError(std::string name)
|
||||
{
|
||||
std::string error = "Cannot load " + name + " module";
|
||||
PyErr_Print();
|
||||
return error;
|
||||
}
|
||||
|
||||
template<typename qttype>
|
||||
Py::Object qt_wrapInstance(qttype object,
|
||||
const std::string& className,
|
||||
@@ -363,10 +370,7 @@ Py::Object qt_wrapInstance(qttype object,
|
||||
{
|
||||
PyObject* module = PyImport_ImportModule(shiboken.c_str());
|
||||
if (!module) {
|
||||
std::string error = "Cannot load ";
|
||||
error += shiboken;
|
||||
error += " module";
|
||||
throw Py::Exception(PyExc_ImportError, error);
|
||||
throw Py::Exception(PyExc_ImportError, formatModuleError(shiboken));
|
||||
}
|
||||
|
||||
Py::Module mainmod(module, true);
|
||||
@@ -377,10 +381,7 @@ Py::Object qt_wrapInstance(qttype object,
|
||||
|
||||
module = PyImport_ImportModule(pyside.c_str());
|
||||
if (!module) {
|
||||
std::string error = "Cannot load ";
|
||||
error += pyside;
|
||||
error += " module";
|
||||
throw Py::Exception(PyExc_ImportError, error);
|
||||
throw Py::Exception(PyExc_ImportError, formatModuleError(pyside));
|
||||
}
|
||||
|
||||
Py::Module qtmod(module);
|
||||
@@ -392,10 +393,7 @@ const char* qt_identifyType(QObject* ptr, const std::string& pyside)
|
||||
{
|
||||
PyObject* module = PyImport_ImportModule(pyside.c_str());
|
||||
if (!module) {
|
||||
std::string error = "Cannot load ";
|
||||
error += pyside;
|
||||
error += " module";
|
||||
throw Py::Exception(PyExc_ImportError, error);
|
||||
throw Py::Exception(PyExc_ImportError, formatModuleError(pyside));
|
||||
}
|
||||
|
||||
Py::Module qtmod(module);
|
||||
@@ -415,10 +413,7 @@ void* qt_getCppPointer(const Py::Object& pyobject, const std::string& shiboken,
|
||||
// https://github.com/PySide/Shiboken/blob/master/shibokenmodule/typesystem_shiboken.xml
|
||||
PyObject* module = PyImport_ImportModule(shiboken.c_str());
|
||||
if (!module) {
|
||||
std::string error = "Cannot load ";
|
||||
error += shiboken;
|
||||
error += " module";
|
||||
throw Py::Exception(PyExc_ImportError, error);
|
||||
throw Py::Exception(PyExc_ImportError, formatModuleError(shiboken));
|
||||
}
|
||||
|
||||
Py::Module mainmod(module, true);
|
||||
@@ -452,9 +447,10 @@ PyTypeObject *getPyTypeObjectForTypeName()
|
||||
}
|
||||
|
||||
template<typename qttype>
|
||||
qttype* qt_getCppType(PyObject* pyobj)
|
||||
qttype* qt_getCppType(PyObject* pyobj, const std::string& shiboken)
|
||||
{
|
||||
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
||||
Q_UNUSED(shiboken)
|
||||
PyTypeObject * type = getPyTypeObjectForTypeName<qttype>();
|
||||
if (type) {
|
||||
if (Shiboken::Object::checkType(pyobj)) {
|
||||
@@ -464,7 +460,9 @@ qttype* qt_getCppType(PyObject* pyobj)
|
||||
}
|
||||
}
|
||||
#else
|
||||
Q_UNUSED(pyobj)
|
||||
void* ptr = qt_getCppPointer(Py::asObject(pyobj), shiboken, "getCppPointer");
|
||||
if (ptr)
|
||||
return reinterpret_cast<qttype*>(ptr);
|
||||
#endif
|
||||
|
||||
return nullptr;
|
||||
@@ -536,30 +534,12 @@ bool PythonWrapper::toCString(const Py::Object& pyobject, std::string& str)
|
||||
|
||||
QObject* PythonWrapper::toQObject(const Py::Object& pyobject)
|
||||
{
|
||||
// http://pastebin.com/JByDAF5Z
|
||||
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
||||
return qt_getCppType<QObject>(pyobject.ptr());
|
||||
#else
|
||||
// Access shiboken/PySide via Python
|
||||
//
|
||||
void* ptr = qt_getCppPointer(pyobject, shiboken, "getCppPointer");
|
||||
return static_cast<QObject*>(ptr);
|
||||
#endif
|
||||
|
||||
return nullptr;
|
||||
return qt_getCppType<QObject>(pyobject.ptr(), shiboken);
|
||||
}
|
||||
|
||||
QGraphicsItem* PythonWrapper::toQGraphicsItem(PyObject* pyPtr)
|
||||
{
|
||||
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
||||
return qt_getCppType<QGraphicsItem>(pyPtr);
|
||||
#else
|
||||
// Access shiboken/PySide via Python
|
||||
//
|
||||
void* ptr = qt_getCppPointer(Py::asObject(pyPtr), shiboken, "getCppPointer");
|
||||
return static_cast<QGraphicsItem*>(ptr);
|
||||
#endif
|
||||
return nullptr;
|
||||
return qt_getCppType<QGraphicsItem>(pyPtr, shiboken);
|
||||
}
|
||||
|
||||
QGraphicsItem* PythonWrapper::toQGraphicsItem(const Py::Object& pyobject)
|
||||
@@ -569,15 +549,7 @@ QGraphicsItem* PythonWrapper::toQGraphicsItem(const Py::Object& pyobject)
|
||||
|
||||
QGraphicsObject* PythonWrapper::toQGraphicsObject(PyObject* pyPtr)
|
||||
{
|
||||
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
||||
return qt_getCppType<QGraphicsObject>(pyPtr);
|
||||
#else
|
||||
// Access shiboken/PySide via Python
|
||||
//
|
||||
void* ptr = qt_getCppPointer(Py::asObject(pyPtr), shiboken, "getCppPointer");
|
||||
return reinterpret_cast<QGraphicsObject*>(ptr);
|
||||
#endif
|
||||
return nullptr;
|
||||
return qt_getCppType<QGraphicsObject>(pyPtr, shiboken);
|
||||
}
|
||||
|
||||
QGraphicsObject* PythonWrapper::toQGraphicsObject(const Py::Object& pyobject)
|
||||
@@ -608,12 +580,7 @@ Py::Object PythonWrapper::fromQImage(const QImage& img)
|
||||
|
||||
QImage *PythonWrapper::toQImage(PyObject *pyobj)
|
||||
{
|
||||
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
||||
return qt_getCppType<QImage>(pyobj);
|
||||
#else
|
||||
Q_UNUSED(pyobj);
|
||||
#endif
|
||||
return nullptr;
|
||||
return qt_getCppType<QImage>(pyobj, shiboken);
|
||||
}
|
||||
|
||||
Py::Object PythonWrapper::fromQIcon(const QIcon* icon)
|
||||
@@ -639,12 +606,7 @@ Py::Object PythonWrapper::fromQIcon(const QIcon* icon)
|
||||
|
||||
QIcon *PythonWrapper::toQIcon(PyObject *pyobj)
|
||||
{
|
||||
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
||||
return qt_getCppType<QIcon>(pyobj);
|
||||
#else
|
||||
Q_UNUSED(pyobj);
|
||||
#endif
|
||||
return nullptr;
|
||||
return qt_getCppType<QIcon>(pyobj, shiboken);
|
||||
}
|
||||
|
||||
Py::Object PythonWrapper::fromQDir(const QDir& dir)
|
||||
@@ -668,12 +630,7 @@ Py::Object PythonWrapper::fromQDir(const QDir& dir)
|
||||
|
||||
QDir* PythonWrapper::toQDir(PyObject* pyobj)
|
||||
{
|
||||
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
||||
return qt_getCppType<QDir>(pyobj);
|
||||
#else
|
||||
Q_UNUSED(pyobj);
|
||||
#endif
|
||||
return nullptr;
|
||||
return qt_getCppType<QDir>(pyobj, shiboken);
|
||||
}
|
||||
|
||||
Py::Object PythonWrapper::fromQPrinter(QPrinter* printer)
|
||||
|
||||
Reference in New Issue
Block a user