From 9759da82e4b330c40883a2b4681fa6f1a65c497a Mon Sep 17 00:00:00 2001 From: Martin Rodriguez Reboredo Date: Mon, 6 May 2024 13:02:18 -0300 Subject: [PATCH] Fixups with Qt6 enums (#13611) * Python PySide enums to C++ converter * Python IntFlags to C++ int in getStandardButtons * Remove int conversion in mods Python sources --- src/Gui/PythonWrapper.cpp | 30 +++++++++++++++++++ src/Gui/PythonWrapper.h | 2 ++ src/Gui/TaskView/TaskDialogPython.cpp | 5 ++-- src/Mod/Arch/ArchAxis.py | 2 +- src/Mod/Arch/ArchAxisSystem.py | 2 +- src/Mod/Arch/ArchCommands.py | 2 +- src/Mod/Arch/ArchComponent.py | 4 +-- src/Mod/Arch/ArchCutPlane.py | 2 +- src/Mod/Arch/ArchRoof.py | 2 +- src/Mod/Arch/ArchSectionPlane.py | 2 +- src/Mod/Arch/ArchWindow.py | 2 +- src/Mod/CAM/Path/Dressup/Gui/Boundary.py | 6 +--- src/Mod/CAM/Path/Dressup/Gui/Tags.py | 6 +--- src/Mod/CAM/Path/Op/Gui/Base.py | 6 +--- .../CAM/PathPythonGui/simple_edit_panel.py | 6 +--- src/Mod/Draft/DraftGui.py | 6 ++-- .../Draft/drafttaskpanels/task_selectplane.py | 3 +- src/Mod/Fem/femsolver/solver_taskpanel.py | 2 +- src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py | 4 +-- .../femtaskpanels/task_result_mechanical.py | 2 +- .../Fem/femtaskpanels/task_solver_ccxtools.py | 2 +- src/Mod/OpenSCAD/OpenSCADCommands.py | 4 +-- .../AttachmentEditor/TaskAttachmentEditor.py | 2 +- src/Mod/PartDesign/InvoluteGearFeature.py | 2 +- src/Mod/PartDesign/SprocketFeature.py | 6 +--- src/Mod/PartDesign/WizardShaft/WizardShaft.py | 2 +- src/Mod/TemplatePyMod/TaskPanel.py | 2 +- 27 files changed, 64 insertions(+), 52 deletions(-) diff --git a/src/Gui/PythonWrapper.cpp b/src/Gui/PythonWrapper.cpp index d3b91bb5a9..abb418e11f 100644 --- a/src/Gui/PythonWrapper.cpp +++ b/src/Gui/PythonWrapper.cpp @@ -583,6 +583,36 @@ QObject* PythonWrapper::toQObject(const Py::Object& pyobject) return qt_getCppType(pyobject.ptr()); } +qsizetype PythonWrapper::toEnum(PyObject* pyPtr) +{ +#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE) + return Shiboken::Enum::getValue(pyPtr); +#else + return toEnum(Py::Object(pyPtr); +#endif +} + +qsizetype PythonWrapper::toEnum(const Py::Object& pyobject) +{ +#if defined (HAVE_SHIBOKEN) && defined(HAVE_PYSIDE) + return toEnum(pyobject.ptr()); +#else + try { + Py::Int ret; + if (pyobject.hasAttr(std::string("value"))) { + ret = Py::Int(pyobject.getAttr(std::string("value"))); + } else { + ret = Py::Int(pyobject); + } + return (qsizetype)ret; + } + catch (Py::Exception&) { + Base::PyException e; // extract the Python error text + e.ReportException(); + } +#endif +} + QGraphicsItem* PythonWrapper::toQGraphicsItem(PyObject* pyPtr) { return qt_getCppType(pyPtr); diff --git a/src/Gui/PythonWrapper.h b/src/Gui/PythonWrapper.h index f108d37285..94c2f7fc50 100644 --- a/src/Gui/PythonWrapper.h +++ b/src/Gui/PythonWrapper.h @@ -54,6 +54,8 @@ public: bool toCString(const Py::Object&, std::string&); QObject* toQObject(const Py::Object&); + qsizetype toEnum(PyObject* pyPtr); + qsizetype toEnum(const Py::Object& pyobject); QGraphicsItem* toQGraphicsItem(PyObject* ptr); QGraphicsItem* toQGraphicsItem(const Py::Object& pyObject); QGraphicsObject* toQGraphicsObject(PyObject* pyPtr); diff --git a/src/Gui/TaskView/TaskDialogPython.cpp b/src/Gui/TaskView/TaskDialogPython.cpp index ca3aeba901..dae98b5608 100644 --- a/src/Gui/TaskView/TaskDialogPython.cpp +++ b/src/Gui/TaskView/TaskDialogPython.cpp @@ -734,8 +734,9 @@ QDialogButtonBox::StandardButtons TaskDialogPython::getStandardButtons() const if (dlg.hasAttr(std::string("getStandardButtons"))) { Py::Callable method(dlg.getAttr(std::string("getStandardButtons"))); Py::Tuple args; - Py::Int ret(method.apply(args)); - int value = (int)ret; + Gui::PythonWrapper wrap; + wrap.loadWidgetsModule(); + int value = wrap.toEnum(method.apply(args)); return {value}; } } diff --git a/src/Mod/Arch/ArchAxis.py b/src/Mod/Arch/ArchAxis.py index 7384fef8ed..66a18cd422 100644 --- a/src/Mod/Arch/ArchAxis.py +++ b/src/Mod/Arch/ArchAxis.py @@ -725,7 +725,7 @@ class _AxisTaskPanel: def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Close) + return QtGui.QDialogButtonBox.Close def update(self): diff --git a/src/Mod/Arch/ArchAxisSystem.py b/src/Mod/Arch/ArchAxisSystem.py index a896a98a54..241dcf36b1 100644 --- a/src/Mod/Arch/ArchAxisSystem.py +++ b/src/Mod/Arch/ArchAxisSystem.py @@ -313,7 +313,7 @@ class AxisSystemTaskPanel: def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Ok) + return QtGui.QDialogButtonBox.Ok def getIcon(self,obj): diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index 7e9f972b69..a725793193 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -1018,7 +1018,7 @@ class SurveyTaskPanel: return True def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Close) + return QtGui.QDialogButtonBox.Close def reject(self): if hasattr(FreeCAD,"SurveyObserver"): diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index d372427270..2d0a959486 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -1660,7 +1660,7 @@ class SelectionTaskPanel: def getStandardButtons(self): """Adds the cancel button.""" - return int(QtGui.QDialogButtonBox.Cancel) + return QtGui.QDialogButtonBox.Cancel def reject(self): """The method run when the user selects the cancel button.""" @@ -1766,7 +1766,7 @@ class ComponentTaskPanel: def getStandardButtons(self): """Add the standard ok button.""" - return int(QtGui.QDialogButtonBox.Ok) + return QtGui.QDialogButtonBox.Ok def check(self,wid,col): """This method is run as the callback when the user selects an item in the tree. diff --git a/src/Mod/Arch/ArchCutPlane.py b/src/Mod/Arch/ArchCutPlane.py index fdf903ad19..22e6e67f37 100644 --- a/src/Mod/Arch/ArchCutPlane.py +++ b/src/Mod/Arch/ArchCutPlane.py @@ -227,7 +227,7 @@ class _CutPlaneTaskPanel: return True def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Ok|QtGui.QDialogButtonBox.Cancel) + return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel def previewCutVolume(self, i): cutVolume = ArchCommands.getCutVolume(self.cutter, self.base) diff --git a/src/Mod/Arch/ArchRoof.py b/src/Mod/Arch/ArchRoof.py index 3e35f25f49..fd477e98a9 100644 --- a/src/Mod/Arch/ArchRoof.py +++ b/src/Mod/Arch/ArchRoof.py @@ -985,7 +985,7 @@ class _RoofTaskPanel: return True def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Close) + return QtGui.QDialogButtonBox.Close def update(self): '''fills the treewidget''' diff --git a/src/Mod/Arch/ArchSectionPlane.py b/src/Mod/Arch/ArchSectionPlane.py index 8763f17f08..bc90cada7f 100644 --- a/src/Mod/Arch/ArchSectionPlane.py +++ b/src/Mod/Arch/ArchSectionPlane.py @@ -1279,7 +1279,7 @@ class SectionPlaneTaskPanel: return True def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Ok) + return QtGui.QDialogButtonBox.Ok def getIcon(self,obj): if hasattr(obj.ViewObject,"Proxy"): diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py index dc9c84f9a8..9809131ed1 100644 --- a/src/Mod/Arch/ArchWindow.py +++ b/src/Mod/Arch/ArchWindow.py @@ -1503,7 +1503,7 @@ class _ArchWindowTaskPanel: def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Close) + return QtGui.QDialogButtonBox.Close def check(self,wid,col): diff --git a/src/Mod/CAM/Path/Dressup/Gui/Boundary.py b/src/Mod/CAM/Path/Dressup/Gui/Boundary.py index e20c84f32c..542eb49c61 100644 --- a/src/Mod/CAM/Path/Dressup/Gui/Boundary.py +++ b/src/Mod/CAM/Path/Dressup/Gui/Boundary.py @@ -59,11 +59,7 @@ class TaskPanel(object): self.stockEdit = None def getStandardButtons(self): - return int( - QtGui.QDialogButtonBox.Ok - | QtGui.QDialogButtonBox.Apply - | QtGui.QDialogButtonBox.Cancel - ) + return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Cancel def modifyStandardButtons(self, buttonBox): self.buttonBox = buttonBox diff --git a/src/Mod/CAM/Path/Dressup/Gui/Tags.py b/src/Mod/CAM/Path/Dressup/Gui/Tags.py index 4041ec9cde..9e3a707e0a 100644 --- a/src/Mod/CAM/Path/Dressup/Gui/Tags.py +++ b/src/Mod/CAM/Path/Dressup/Gui/Tags.py @@ -75,11 +75,7 @@ class PathDressupTagTaskPanel: self.editItem = None def getStandardButtons(self): - return int( - QtGui.QDialogButtonBox.Ok - | QtGui.QDialogButtonBox.Apply - | QtGui.QDialogButtonBox.Cancel - ) + return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Cancel def clicked(self, button): if button == QtGui.QDialogButtonBox.Apply: diff --git a/src/Mod/CAM/Path/Op/Gui/Base.py b/src/Mod/CAM/Path/Op/Gui/Base.py index 589882f7f0..2793b6fcbe 100644 --- a/src/Mod/CAM/Path/Op/Gui/Base.py +++ b/src/Mod/CAM/Path/Op/Gui/Base.py @@ -1274,11 +1274,7 @@ class TaskPanel(object): def getStandardButtons(self): """getStandardButtons() ... returns the Buttons for the task panel.""" - return int( - QtGui.QDialogButtonBox.Ok - | QtGui.QDialogButtonBox.Apply - | QtGui.QDialogButtonBox.Cancel - ) + return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Cancel def setupUi(self): """setupUi() ... internal function to initialise all pages.""" diff --git a/src/Mod/CAM/PathPythonGui/simple_edit_panel.py b/src/Mod/CAM/PathPythonGui/simple_edit_panel.py index b9a726851f..738e040c9a 100644 --- a/src/Mod/CAM/PathPythonGui/simple_edit_panel.py +++ b/src/Mod/CAM/PathPythonGui/simple_edit_panel.py @@ -88,11 +88,7 @@ class SimpleEditPanel: ) def getStandardButtons(self): - return int( - QtGui.QDialogButtonBox.Ok - | QtGui.QDialogButtonBox.Apply - | QtGui.QDialogButtonBox.Cancel - ) + return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Cancel def clicked(self, button): # callback for standard buttons diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 2471bb66c6..c5fc3c2d33 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -131,7 +131,7 @@ class DraftTaskPanel: else: self.form = widget def getStandardButtons(self): - return int(QtWidgets.QDialogButtonBox.Close) + return QtWidgets.QDialogButtonBox.Close def accept(self): if hasattr(FreeCADGui,"draftToolBar"): return FreeCADGui.draftToolBar.validatePoint() @@ -919,7 +919,7 @@ class DraftToolBar: self.form = [extra] self.callback = callback def getStandardButtons(self): - return int(QtWidgets.QDialogButtonBox.Close) + return QtWidgets.QDialogButtonBox.Close def reject(self): if self.callback: self.callback() @@ -1687,7 +1687,7 @@ class FacebinderTaskPanel: return True def getStandardButtons(self): - return int(QtWidgets.QDialogButtonBox.Ok) + return QtWidgets.QDialogButtonBox.Ok def update(self): """fills the treewidget""" diff --git a/src/Mod/Draft/drafttaskpanels/task_selectplane.py b/src/Mod/Draft/drafttaskpanels/task_selectplane.py index 550ea80670..a841572cb4 100644 --- a/src/Mod/Draft/drafttaskpanels/task_selectplane.py +++ b/src/Mod/Draft/drafttaskpanels/task_selectplane.py @@ -40,6 +40,7 @@ to be more similar to OrthoArray and the new tools. ## \addtogroup drafttaskpanels # @{ import FreeCADGui as Gui +from PySide import QtWidgets class SelectPlaneTaskPanel: @@ -50,6 +51,6 @@ class SelectPlaneTaskPanel: def getStandardButtons(self): """Execute to set the standard buttons.""" - return 2097152 # int(QtWidgets.QDialogButtonBox.Close) + return QtWidgets.QDialogButtonBox.Close ## @} diff --git a/src/Mod/Fem/femsolver/solver_taskpanel.py b/src/Mod/Fem/femsolver/solver_taskpanel.py index 90c622ad7a..5d3817bef8 100644 --- a/src/Mod/Fem/femsolver/solver_taskpanel.py +++ b/src/Mod/Fem/femsolver/solver_taskpanel.py @@ -156,7 +156,7 @@ class ControlTaskPanel(QtCore.QObject): femsolver.report.display(machine.report, _REPORT_TITLE, text) def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Close) + return QtGui.QDialogButtonBox.Close def reject(self): Gui.ActiveDocument.resetEdit() diff --git a/src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py b/src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py index 540f112fac..856b8fc7ae 100644 --- a/src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py +++ b/src/Mod/Fem/femtaskpanels/task_mesh_gmsh.py @@ -107,9 +107,7 @@ class _TaskPanel: self.update() def getStandardButtons(self): - button_value = int( - QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Cancel - ) + button_value = QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Cancel return button_value # show a OK, a apply and a Cancel button # def reject() is called on Cancel button diff --git a/src/Mod/Fem/femtaskpanels/task_result_mechanical.py b/src/Mod/Fem/femtaskpanels/task_result_mechanical.py index 266670a547..f0ec4e9d77 100644 --- a/src/Mod/Fem/femtaskpanels/task_result_mechanical.py +++ b/src/Mod/Fem/femtaskpanels/task_result_mechanical.py @@ -265,7 +265,7 @@ class _TaskPanel: self.result_widget.sb_displacement_factor_max.setValue(100.) # init non standard values def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Close) + return QtGui.QDialogButtonBox.Close def get_result_stats(self, type_name): return resulttools.get_stats(self.result_obj, type_name) diff --git a/src/Mod/Fem/femtaskpanels/task_solver_ccxtools.py b/src/Mod/Fem/femtaskpanels/task_solver_ccxtools.py index a467676459..c2c93edab0 100644 --- a/src/Mod/Fem/femtaskpanels/task_solver_ccxtools.py +++ b/src/Mod/Fem/femtaskpanels/task_solver_ccxtools.py @@ -167,7 +167,7 @@ class _TaskPanel: def getStandardButtons(self): # only show a close button # def accept() in no longer needed, since there is no OK button - return int(QtGui.QDialogButtonBox.Close) + return QtGui.QDialogButtonBox.Close def reject(self): FreeCADGui.ActiveDocument.resetEdit() diff --git a/src/Mod/OpenSCAD/OpenSCADCommands.py b/src/Mod/OpenSCAD/OpenSCADCommands.py index 3ee3737b58..10b45d5f04 100644 --- a/src/Mod/OpenSCAD/OpenSCADCommands.py +++ b/src/Mod/OpenSCAD/OpenSCADCommands.py @@ -379,7 +379,7 @@ class AddSCADTask: self.form.buttonrefresh.clicked.connect(self.refreshelement) def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Close) + return QtGui.QDialogButtonBox.Close def isAllowedAlterSelection(self): return True @@ -492,7 +492,7 @@ class OpenSCADMeshBooleanTask: self.form.buttonadd.clicked.connect(self.doboolean) def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Close) + return QtGui.QDialogButtonBox.Close def isAllowedAlterSelection(self): return False diff --git a/src/Mod/Part/AttachmentEditor/TaskAttachmentEditor.py b/src/Mod/Part/AttachmentEditor/TaskAttachmentEditor.py index a572a02bcc..5c2f4e8ab5 100644 --- a/src/Mod/Part/AttachmentEditor/TaskAttachmentEditor.py +++ b/src/Mod/Part/AttachmentEditor/TaskAttachmentEditor.py @@ -306,7 +306,7 @@ class AttachmentEditorTaskPanel(FrozenClass): # task dialog handling def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Ok) | int(QtGui.QDialogButtonBox.Cancel)| int(QtGui.QDialogButtonBox.Apply) + return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel | QtGui.QDialogButtonBox.Apply def clicked(self,button): if button == QtGui.QDialogButtonBox.Apply: diff --git a/src/Mod/PartDesign/InvoluteGearFeature.py b/src/Mod/PartDesign/InvoluteGearFeature.py index 28a7ddf455..68041d39e6 100644 --- a/src/Mod/PartDesign/InvoluteGearFeature.py +++ b/src/Mod/PartDesign/InvoluteGearFeature.py @@ -258,7 +258,7 @@ class _InvoluteGearTaskPanel: self.form.doubleSpinBox_ProfileShift.setValue(self.obj.ProfileShiftCoefficient) def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Ok) | int(QtGui.QDialogButtonBox.Cancel)| int(QtGui.QDialogButtonBox.Apply) + return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel | QtGui.QDialogButtonBox.Apply def clicked(self,button): if button == QtGui.QDialogButtonBox.Apply: diff --git a/src/Mod/PartDesign/SprocketFeature.py b/src/Mod/PartDesign/SprocketFeature.py index 1a38d90375..609d6c4218 100644 --- a/src/Mod/PartDesign/SprocketFeature.py +++ b/src/Mod/PartDesign/SprocketFeature.py @@ -312,11 +312,7 @@ class SprocketTaskPanel: self.obj.Proxy.execute(self.obj) def getStandardButtons(self): - return ( - int(QtGui.QDialogButtonBox.Ok) - | int(QtGui.QDialogButtonBox.Cancel) - | int(QtGui.QDialogButtonBox.Apply) - ) + return QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel | QtGui.QDialogButtonBox.Apply def clicked(self, button): if button == QtGui.QDialogButtonBox.Apply: diff --git a/src/Mod/PartDesign/WizardShaft/WizardShaft.py b/src/Mod/PartDesign/WizardShaft/WizardShaft.py index b5e26c4d23..412afe4d2c 100644 --- a/src/Mod/PartDesign/WizardShaft/WizardShaft.py +++ b/src/Mod/PartDesign/WizardShaft/WizardShaft.py @@ -155,7 +155,7 @@ class TaskWizardShaft: self.updateButton(row, col, flag) def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Ok) + return QtGui.QDialogButtonBox.Ok def accept(self): if self.table: diff --git a/src/Mod/TemplatePyMod/TaskPanel.py b/src/Mod/TemplatePyMod/TaskPanel.py index ef07e9b249..cc8e301aaa 100644 --- a/src/Mod/TemplatePyMod/TaskPanel.py +++ b/src/Mod/TemplatePyMod/TaskPanel.py @@ -61,7 +61,7 @@ class TaskPanel: return True def getStandardButtons(self): - return int(QtGui.QDialogButtonBox.Ok) + return QtGui.QDialogButtonBox.Ok def helpRequested(self): pass