From f565fa2f7a43dfa5ef22d6c96531302c22c424e1 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 1 Jan 2023 17:42:25 +0100 Subject: [PATCH] Gui: refactor PythonWrapper --- src/Gui/PythonWrapper.cpp | 62 ++++++++++++++------------------------- 1 file changed, 22 insertions(+), 40 deletions(-) diff --git a/src/Gui/PythonWrapper.cpp b/src/Gui/PythonWrapper.cpp index db97075e6c..e90fe067fd 100644 --- a/src/Gui/PythonWrapper.cpp +++ b/src/Gui/PythonWrapper.cpp @@ -422,6 +422,23 @@ PyTypeObject *getPyTypeObjectForTypeName() return nullptr; } +template +qttype* qt_getCppType(PyObject* pyobj) +{ +#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE) + PyTypeObject * type = getPyTypeObjectForTypeName(); + if (type) { + if (Shiboken::Object::checkType(pyobj)) { + auto sbkobject = reinterpret_cast(pyobj); + void* cppobject = Shiboken::Object::cppPointer(sbkobject, type); + return static_cast(cppobject); + } + } +#endif + + return nullptr; +} + bool loadPySideModule(const std::string& moduleName, PyTypeObject**& types) { #if defined (HAVE_SHIBOKEN2) && defined(HAVE_PYSIDE2) @@ -482,14 +499,7 @@ QObject* PythonWrapper::toQObject(const Py::Object& pyobject) { // http://pastebin.com/JByDAF5Z #if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE) - PyTypeObject * type = getPyTypeObjectForTypeName(); - if (type) { - if (Shiboken::Object::checkType(pyobject.ptr())) { - auto sbkobject = reinterpret_cast(pyobject.ptr()); - void* cppobject = Shiboken::Object::cppPointer(sbkobject, type); - return static_cast(cppobject); - } - } + return qt_getCppType(pyobject.ptr()); #else // Access shiboken/PySide via Python // @@ -508,14 +518,7 @@ QObject* PythonWrapper::toQObject(const Py::Object& pyobject) QGraphicsItem* PythonWrapper::toQGraphicsItem(PyObject* pyPtr) { #if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE) - PyTypeObject* type = getPyTypeObjectForTypeName(); - if (type) { - if (Shiboken::Object::checkType(pyPtr)) { - auto sbkobject = reinterpret_cast(pyPtr); - void* cppobject = Shiboken::Object::cppPointer(sbkobject, type); - return static_cast(cppobject); - } - } + return qt_getCppType(pyPtr); #else // Access shiboken/PySide via Python // @@ -528,14 +531,7 @@ QGraphicsItem* PythonWrapper::toQGraphicsItem(PyObject* pyPtr) QGraphicsObject* PythonWrapper::toQGraphicsObject(PyObject* pyPtr) { #if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE) - PyTypeObject* type = getPyTypeObjectForTypeName(); - if (type) { - if (Shiboken::Object::checkType(pyPtr)) { - auto sbkobject = reinterpret_cast(pyPtr); - void* cppobject = Shiboken::Object::cppPointer(sbkobject, type); - return reinterpret_cast(cppobject); - } - } + return qt_getCppType(pyPtr); #else // Access shiboken/PySide via Python // @@ -564,14 +560,7 @@ Py::Object PythonWrapper::fromQIcon(const QIcon* icon) QIcon *PythonWrapper::toQIcon(PyObject *pyobj) { #if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE) - PyTypeObject * type = getPyTypeObjectForTypeName(); - if(type) { - if (Shiboken::Object::checkType(pyobj)) { - auto sbkobject = reinterpret_cast(pyobj); - void* cppobject = Shiboken::Object::cppPointer(sbkobject, type); - return static_cast(cppobject); - } - } + return qt_getCppType(pyobj); #else Q_UNUSED(pyobj); #endif @@ -595,14 +584,7 @@ Py::Object PythonWrapper::fromQDir(const QDir& dir) QDir* PythonWrapper::toQDir(PyObject* pyobj) { #if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE) - PyTypeObject* type = getPyTypeObjectForTypeName(); - if (type) { - if (Shiboken::Object::checkType(pyobj)) { - auto sbkobject = reinterpret_cast(pyobj); - void* cppobject = Shiboken::Object::cppPointer(sbkobject, type); - return static_cast(cppobject); - } - } + return qt_getCppType(pyobj); #else Q_UNUSED(pyobj); #endif