switch to PySide2 for Qt5
This commit is contained in:
parent
80e8ae63e8
commit
0c3f52303d
|
@ -369,7 +369,11 @@ if(FREECAD_LIBPACK_USE)
|
||||||
|
|
||||||
# -------------------------------- Shiboken/PySide ------------------------
|
# -------------------------------- Shiboken/PySide ------------------------
|
||||||
|
|
||||||
find_package(PySideTools REQUIRED) # Pyside utilities (pyside-uic & pyside-rcc)
|
if(BUILD_QT5)
|
||||||
|
find_package(PySide2Tools REQUIRED) # PySide2 utilities (pyside2-uic & pyside2-rcc)
|
||||||
|
else()
|
||||||
|
find_package(PySideTools REQUIRED) # Pyside utilities (pyside-uic & pyside-rcc)
|
||||||
|
endif()
|
||||||
|
|
||||||
# -------------------------------- Salome SMESH --------------------------
|
# -------------------------------- Salome SMESH --------------------------
|
||||||
|
|
||||||
|
@ -828,6 +832,32 @@ endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||||
|
|
||||||
# -------------------------------- Shiboken/PySide ------------------------
|
# -------------------------------- Shiboken/PySide ------------------------
|
||||||
|
|
||||||
|
if(BUILD_QT5)
|
||||||
|
# set(PYTHON_SUFFIX -python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR})
|
||||||
|
SET(PYTHON_SUFFIX -python2.7) # for shiboken
|
||||||
|
SET(PYTHON_BASENAME -python2.7) # for PySide
|
||||||
|
|
||||||
|
if(DEFINED MACPORTS_PREFIX)
|
||||||
|
find_package(Shiboken REQUIRED HINTS "${PYTHON_LIBRARY_DIR}/cmake")
|
||||||
|
find_package(PySide REQUIRED HINTS "${PYTHON_LIBRARY_DIR}/cmake")
|
||||||
|
endif(DEFINED MACPORTS_PREFIX)
|
||||||
|
|
||||||
|
find_package(Shiboken2)# REQUIRED
|
||||||
|
if(NOT SHIBOKEN_INCLUDE_DIR)
|
||||||
|
MESSAGE(FATAL_ERROR "====================\n"
|
||||||
|
"shiboken2 not found.\n"
|
||||||
|
"====================\n")
|
||||||
|
endif(NOT SHIBOKEN_INCLUDE_DIR)
|
||||||
|
|
||||||
|
find_package(PySide2)# REQUIRED
|
||||||
|
if(NOT PYSIDE_INCLUDE_DIR)
|
||||||
|
MESSAGE(FATAL_ERROR "==================\n"
|
||||||
|
"PySide2 not found.\n"
|
||||||
|
"==================\n")
|
||||||
|
endif(NOT PYSIDE_INCLUDE_DIR)
|
||||||
|
|
||||||
|
find_package(PySideTools REQUIRED) # PySide2 utilities (pyside-uic & pyside-rcc)
|
||||||
|
else()
|
||||||
# set(PYTHON_SUFFIX -python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR})
|
# set(PYTHON_SUFFIX -python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR})
|
||||||
SET(PYTHON_SUFFIX -python2.7) # for shiboken
|
SET(PYTHON_SUFFIX -python2.7) # for shiboken
|
||||||
SET(PYTHON_BASENAME -python2.7) # for PySide
|
SET(PYTHON_BASENAME -python2.7) # for PySide
|
||||||
|
@ -852,6 +882,7 @@ endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
||||||
endif(NOT PYSIDE_INCLUDE_DIR)
|
endif(NOT PYSIDE_INCLUDE_DIR)
|
||||||
|
|
||||||
find_package(PySideTools REQUIRED) # PySide utilities (pyside-uic & pyside-rcc)
|
find_package(PySideTools REQUIRED) # PySide utilities (pyside-uic & pyside-rcc)
|
||||||
|
endif()
|
||||||
|
|
||||||
# ------------------------------ Matplotlib ------------------------------
|
# ------------------------------ Matplotlib ------------------------------
|
||||||
|
|
||||||
|
|
|
@ -579,6 +579,7 @@ PyObject* Application::sGetMainWindow(PyObject * /*self*/, PyObject *args,PyObje
|
||||||
PythonWrapper wrap;
|
PythonWrapper wrap;
|
||||||
wrap.loadCoreModule();
|
wrap.loadCoreModule();
|
||||||
wrap.loadGuiModule();
|
wrap.loadGuiModule();
|
||||||
|
wrap.loadWidgetsModule();
|
||||||
try {
|
try {
|
||||||
return Py::new_reference_to(wrap.fromQWidget(Gui::getMainWindow(), "QMainWindow"));
|
return Py::new_reference_to(wrap.fromQWidget(Gui::getMainWindow(), "QMainWindow"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,6 +116,7 @@ ENDIF(OCULUS_FOUND)
|
||||||
|
|
||||||
if(SHIBOKEN_INCLUDE_DIR)
|
if(SHIBOKEN_INCLUDE_DIR)
|
||||||
if (BUILD_QT5)
|
if (BUILD_QT5)
|
||||||
|
add_definitions(-DHAVE_SHIBOKEN2)
|
||||||
else()
|
else()
|
||||||
add_definitions(-DHAVE_SHIBOKEN)
|
add_definitions(-DHAVE_SHIBOKEN)
|
||||||
endif()
|
endif()
|
||||||
|
@ -128,10 +129,6 @@ if(SHIBOKEN_INCLUDE_DIR)
|
||||||
endif(SHIBOKEN_INCLUDE_DIR)
|
endif(SHIBOKEN_INCLUDE_DIR)
|
||||||
|
|
||||||
if(PYSIDE_INCLUDE_DIR)
|
if(PYSIDE_INCLUDE_DIR)
|
||||||
if (BUILD_QT5)
|
|
||||||
else()
|
|
||||||
add_definitions(-DHAVE_PYSIDE)
|
|
||||||
endif()
|
|
||||||
include_directories(
|
include_directories(
|
||||||
${PYSIDE_INCLUDE_DIR}
|
${PYSIDE_INCLUDE_DIR}
|
||||||
${PYSIDE_INCLUDE_DIR}/QtCore
|
${PYSIDE_INCLUDE_DIR}/QtCore
|
||||||
|
@ -140,6 +137,14 @@ if(PYSIDE_INCLUDE_DIR)
|
||||||
list(APPEND FreeCADGui_LIBS
|
list(APPEND FreeCADGui_LIBS
|
||||||
${PYSIDE_LIBRARY}
|
${PYSIDE_LIBRARY}
|
||||||
)
|
)
|
||||||
|
if (BUILD_QT5)
|
||||||
|
include_directories(
|
||||||
|
${PYSIDE_INCLUDE_DIR}/QtWidgets
|
||||||
|
)
|
||||||
|
add_definitions(-DHAVE_PYSIDE2)
|
||||||
|
else()
|
||||||
|
add_definitions(-DHAVE_PYSIDE)
|
||||||
|
endif()
|
||||||
endif(PYSIDE_INCLUDE_DIR)
|
endif(PYSIDE_INCLUDE_DIR)
|
||||||
|
|
||||||
generate_from_xml(DocumentPy)
|
generate_from_xml(DocumentPy)
|
||||||
|
|
|
@ -356,6 +356,7 @@ Py::Object ViewProviderPy::getIcon(void) const
|
||||||
#else
|
#else
|
||||||
PythonWrapper wrap;
|
PythonWrapper wrap;
|
||||||
wrap.loadGuiModule();
|
wrap.loadGuiModule();
|
||||||
|
wrap.loadWidgetsModule();
|
||||||
QIcon icon = getViewProviderPtr()->getIcon();
|
QIcon icon = getViewProviderPtr()->getIcon();
|
||||||
return wrap.fromQIcon(new QIcon(icon));
|
return wrap.fromQIcon(new QIcon(icon));
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -527,6 +527,7 @@ void ViewProviderPythonFeatureImp::setupContextMenu(QMenu* menu)
|
||||||
if (vp.hasAttr("__object__")) {
|
if (vp.hasAttr("__object__")) {
|
||||||
PythonWrapper wrap;
|
PythonWrapper wrap;
|
||||||
wrap.loadGuiModule();
|
wrap.loadGuiModule();
|
||||||
|
wrap.loadWidgetsModule();
|
||||||
Py::Callable method(vp.getAttr(std::string("setupContextMenu")));
|
Py::Callable method(vp.getAttr(std::string("setupContextMenu")));
|
||||||
Py::Tuple args(1);
|
Py::Tuple args(1);
|
||||||
args.setItem(0, wrap.fromQWidget(menu, "QMenu"));
|
args.setItem(0, wrap.fromQWidget(menu, "QMenu"));
|
||||||
|
@ -535,6 +536,7 @@ void ViewProviderPythonFeatureImp::setupContextMenu(QMenu* menu)
|
||||||
else {
|
else {
|
||||||
PythonWrapper wrap;
|
PythonWrapper wrap;
|
||||||
wrap.loadGuiModule();
|
wrap.loadGuiModule();
|
||||||
|
wrap.loadWidgetsModule();
|
||||||
Py::Callable method(vp.getAttr(std::string("setupContextMenu")));
|
Py::Callable method(vp.getAttr(std::string("setupContextMenu")));
|
||||||
Py::Tuple args(2);
|
Py::Tuple args(2);
|
||||||
args.setItem(0, Py::Object(object->getPyObject(), true));
|
args.setItem(0, Py::Object(object->getPyObject(), true));
|
||||||
|
|
|
@ -61,6 +61,26 @@ PyTypeObject** SbkPySide_QtGuiTypes=NULL;
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_SHIBOKEN2
|
||||||
|
# define HAVE_SHIBOKEN
|
||||||
|
# undef _POSIX_C_SOURCE
|
||||||
|
# undef _XOPEN_SOURCE
|
||||||
|
# include <basewrapper.h>
|
||||||
|
# include <conversions.h>
|
||||||
|
# include <sbkmodule.h>
|
||||||
|
# include <typeresolver.h>
|
||||||
|
# include <shiboken.h>
|
||||||
|
# ifdef HAVE_PYSIDE2
|
||||||
|
# define HAVE_PYSIDE
|
||||||
|
# include <pyside2_qtcore_python.h>
|
||||||
|
# include <pyside2_qtgui_python.h>
|
||||||
|
# include <pyside2_qtwidgets_python.h>
|
||||||
|
PyTypeObject** SbkPySide2_QtCoreTypes=NULL;
|
||||||
|
PyTypeObject** SbkPySide2_QtGuiTypes=NULL;
|
||||||
|
PyTypeObject** SbkPySide2_QtWidgetsTypes=NULL;
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
# pragma GCC diagnostic pop
|
# pragma GCC diagnostic pop
|
||||||
#endif
|
#endif
|
||||||
|
@ -255,7 +275,15 @@ Py::Object PythonWrapper::fromQWidget(QWidget* widget, const char* className)
|
||||||
|
|
||||||
bool PythonWrapper::loadCoreModule()
|
bool PythonWrapper::loadCoreModule()
|
||||||
{
|
{
|
||||||
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
#if defined (HAVE_SHIBOKEN2) && (HAVE_PYSIDE2)
|
||||||
|
// QtCore
|
||||||
|
if (!SbkPySide2_QtCoreTypes) {
|
||||||
|
Shiboken::AutoDecRef requiredModule(Shiboken::Module::import("PySide2.QtCore"));
|
||||||
|
if (requiredModule.isNull())
|
||||||
|
return false;
|
||||||
|
SbkPySide2_QtCoreTypes = Shiboken::Module::getTypes(requiredModule);
|
||||||
|
}
|
||||||
|
#elif defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
||||||
// QtCore
|
// QtCore
|
||||||
if (!SbkPySide_QtCoreTypes) {
|
if (!SbkPySide_QtCoreTypes) {
|
||||||
Shiboken::AutoDecRef requiredModule(Shiboken::Module::import("PySide.QtCore"));
|
Shiboken::AutoDecRef requiredModule(Shiboken::Module::import("PySide.QtCore"));
|
||||||
|
@ -269,7 +297,15 @@ bool PythonWrapper::loadCoreModule()
|
||||||
|
|
||||||
bool PythonWrapper::loadGuiModule()
|
bool PythonWrapper::loadGuiModule()
|
||||||
{
|
{
|
||||||
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
#if defined (HAVE_SHIBOKEN2) && defined(HAVE_PYSIDE2)
|
||||||
|
// QtGui
|
||||||
|
if (!SbkPySide2_QtGuiTypes) {
|
||||||
|
Shiboken::AutoDecRef requiredModule(Shiboken::Module::import("PySide2.QtGui"));
|
||||||
|
if (requiredModule.isNull())
|
||||||
|
return false;
|
||||||
|
SbkPySide2_QtGuiTypes = Shiboken::Module::getTypes(requiredModule);
|
||||||
|
}
|
||||||
|
#elif defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
||||||
// QtGui
|
// QtGui
|
||||||
if (!SbkPySide_QtGuiTypes) {
|
if (!SbkPySide_QtGuiTypes) {
|
||||||
Shiboken::AutoDecRef requiredModule(Shiboken::Module::import("PySide.QtGui"));
|
Shiboken::AutoDecRef requiredModule(Shiboken::Module::import("PySide.QtGui"));
|
||||||
|
@ -281,6 +317,20 @@ bool PythonWrapper::loadGuiModule()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PythonWrapper::loadWidgetsModule()
|
||||||
|
{
|
||||||
|
#if defined (HAVE_SHIBOKEN2) && defined(HAVE_PYSIDE2)
|
||||||
|
// QtWidgets
|
||||||
|
if (!SbkPySide2_QtWidgetsTypes) {
|
||||||
|
Shiboken::AutoDecRef requiredModule(Shiboken::Module::import("PySide2.QtWidgets"));
|
||||||
|
if (requiredModule.isNull())
|
||||||
|
return false;
|
||||||
|
SbkPySide2_QtWidgetsTypes = Shiboken::Module::getTypes(requiredModule);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void PythonWrapper::createChildrenNameAttributes(PyObject* root, QObject* object)
|
void PythonWrapper::createChildrenNameAttributes(PyObject* root, QObject* object)
|
||||||
{
|
{
|
||||||
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
||||||
|
@ -290,7 +340,11 @@ void PythonWrapper::createChildrenNameAttributes(PyObject* root, QObject* object
|
||||||
if (!name.isEmpty() && !name.startsWith("_") && !name.startsWith("qt_")) {
|
if (!name.isEmpty() && !name.startsWith("_") && !name.startsWith("qt_")) {
|
||||||
bool hasAttr = PyObject_HasAttrString(root, name.constData());
|
bool hasAttr = PyObject_HasAttrString(root, name.constData());
|
||||||
if (!hasAttr) {
|
if (!hasAttr) {
|
||||||
|
#if defined (HAVE_SHIBOKEN2) && defined(HAVE_PYSIDE2)
|
||||||
|
Shiboken::AutoDecRef pyChild(Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide2_QtCoreTypes[SBK_QOBJECT_IDX], child));
|
||||||
|
#else
|
||||||
Shiboken::AutoDecRef pyChild(Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide_QtCoreTypes[SBK_QOBJECT_IDX], child));
|
Shiboken::AutoDecRef pyChild(Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide_QtCoreTypes[SBK_QOBJECT_IDX], child));
|
||||||
|
#endif
|
||||||
PyObject_SetAttrString(root, name.constData(), pyChild);
|
PyObject_SetAttrString(root, name.constData(), pyChild);
|
||||||
}
|
}
|
||||||
createChildrenNameAttributes(root, child);
|
createChildrenNameAttributes(root, child);
|
||||||
|
@ -307,7 +361,11 @@ void PythonWrapper::setParent(PyObject* pyWdg, QObject* parent)
|
||||||
{
|
{
|
||||||
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE)
|
||||||
if (parent) {
|
if (parent) {
|
||||||
|
#if defined (HAVE_SHIBOKEN2) && defined(HAVE_PYSIDE2)
|
||||||
|
Shiboken::AutoDecRef pyParent(Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide2_QtGuiTypes[SBK_QWIDGET_IDX], parent));
|
||||||
|
#else
|
||||||
Shiboken::AutoDecRef pyParent(Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide_QtGuiTypes[SBK_QWIDGET_IDX], parent));
|
Shiboken::AutoDecRef pyParent(Shiboken::Conversions::pointerToPython((SbkObjectType*)SbkPySide_QtGuiTypes[SBK_QWIDGET_IDX], parent));
|
||||||
|
#endif
|
||||||
Shiboken::Object::setParent(pyParent, pyWdg);
|
Shiboken::Object::setParent(pyParent, pyWdg);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -675,6 +733,7 @@ Py::Object UiLoaderPy::load(const Py::Tuple& args)
|
||||||
QWidget* widget = loader.load(device, parent);
|
QWidget* widget = loader.load(device, parent);
|
||||||
if (widget) {
|
if (widget) {
|
||||||
wrap.loadGuiModule();
|
wrap.loadGuiModule();
|
||||||
|
wrap.loadWidgetsModule();
|
||||||
|
|
||||||
Py::Object pyWdg = wrap.fromQWidget(widget);
|
Py::Object pyWdg = wrap.fromQWidget(widget);
|
||||||
wrap.createChildrenNameAttributes(*pyWdg, widget);
|
wrap.createChildrenNameAttributes(*pyWdg, widget);
|
||||||
|
@ -731,6 +790,7 @@ Py::Object UiLoaderPy::createWidget(const Py::Tuple& args)
|
||||||
throw Py::RuntimeError(err);
|
throw Py::RuntimeError(err);
|
||||||
}
|
}
|
||||||
wrap.loadGuiModule();
|
wrap.loadGuiModule();
|
||||||
|
wrap.loadWidgetsModule();
|
||||||
return wrap.fromQWidget(widget);
|
return wrap.fromQWidget(widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,7 @@ public:
|
||||||
PythonWrapper();
|
PythonWrapper();
|
||||||
bool loadCoreModule();
|
bool loadCoreModule();
|
||||||
bool loadGuiModule();
|
bool loadGuiModule();
|
||||||
|
bool loadWidgetsModule();
|
||||||
|
|
||||||
bool toCString(const Py::Object&, std::string&);
|
bool toCString(const Py::Object&, std::string&);
|
||||||
QObject* toQObject(const Py::Object&);
|
QObject* toQObject(const Py::Object&);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user