From f329584eb5dd43ea0ed0aaa2183b098b71c71697 Mon Sep 17 00:00:00 2001 From: Furgo <148809153+furgo16@users.noreply.github.com> Date: Thu, 19 Feb 2026 20:44:53 +0100 Subject: [PATCH] BIM: _Structure uses generic options task box on edit --- src/Mod/BIM/ArchStructure.py | 48 ++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/src/Mod/BIM/ArchStructure.py b/src/Mod/BIM/ArchStructure.py index c898e9e4fa..502fd39142 100644 --- a/src/Mod/BIM/ArchStructure.py +++ b/src/Mod/BIM/ArchStructure.py @@ -1685,17 +1685,30 @@ class _ViewProviderStructure(ArchComponent.ViewProviderComponent): return None taskd = StructureTaskPanel(vobj.Object) - taskd.obj = self.Object - taskd.update() FreeCADGui.Control.showDialog(taskd) return True -class StructureTaskPanel(ArchComponent.ComponentTaskPanel): +class StructureTaskPanel(ArchComponent.ComponentOptionsTaskPanel): + """A task panel for Arch Structures that combines generic dimensions with node tools""" def __init__(self, obj): + # Define properties based on the IfcType + if getattr(obj, "IfcType", "Beam") == "Slab": + property_definitions = [ + {"prop": "Height", "label": translate("Arch", "Thickness")}, + ] + else: + # For Beams and Columns + property_definitions = [ + {"prop": "Length", "label": translate("Arch", "Length")}, + {"prop": "Width", "label": translate("Arch", "Width")}, + {"prop": "Height", "label": translate("Arch", "Height")}, + ] + + # Initialize generic parent (creates self.options_widget and self.baseform) + super().__init__(obj, property_definitions) - ArchComponent.ComponentTaskPanel.__init__(self) self.nodes_widget = QtGui.QWidget() self.nodes_widget.setWindowTitle(QtGui.QApplication.translate("Arch", "Node Tools", None)) lay = QtGui.QVBoxLayout(self.nodes_widget) @@ -1703,15 +1716,14 @@ class StructureTaskPanel(ArchComponent.ComponentTaskPanel): self.resetButton = QtGui.QPushButton(self.nodes_widget) self.resetButton.setIcon(QtGui.QIcon(":/icons/edit-undo.svg")) self.resetButton.setText(QtGui.QApplication.translate("Arch", "Reset Nodes", None)) - lay.addWidget(self.resetButton) - QtCore.QObject.connect(self.resetButton, QtCore.SIGNAL("clicked()"), self.resetNodes) + self.resetButton.clicked.connect(self.resetNodes) self.editButton = QtGui.QPushButton(self.nodes_widget) self.editButton.setIcon(QtGui.QIcon(":/icons/Draft_Edit.svg")) self.editButton.setText(QtGui.QApplication.translate("Arch", "Edit Nodes", None)) lay.addWidget(self.editButton) - QtCore.QObject.connect(self.editButton, QtCore.SIGNAL("clicked()"), self.editNodes) + self.editButton.clicked.connect(self.editNodes) self.extendButton = QtGui.QPushButton(self.nodes_widget) self.extendButton.setIcon(QtGui.QIcon(":/icons/Snap_Perpendicular.svg")) @@ -1724,7 +1736,7 @@ class StructureTaskPanel(ArchComponent.ComponentTaskPanel): ) ) lay.addWidget(self.extendButton) - QtCore.QObject.connect(self.extendButton, QtCore.SIGNAL("clicked()"), self.extendNodes) + self.extendButton.clicked.connect(self.extendNodes) self.connectButton = QtGui.QPushButton(self.nodes_widget) self.connectButton.setIcon(QtGui.QIcon(":/icons/Snap_Intersection.svg")) @@ -1735,7 +1747,7 @@ class StructureTaskPanel(ArchComponent.ComponentTaskPanel): ) ) lay.addWidget(self.connectButton) - QtCore.QObject.connect(self.connectButton, QtCore.SIGNAL("clicked()"), self.connectNodes) + self.connectButton.clicked.connect(self.connectNodes) self.toggleButton = QtGui.QPushButton(self.nodes_widget) self.toggleButton.setIcon(QtGui.QIcon(":/icons/dagViewVisible.svg")) @@ -1746,7 +1758,7 @@ class StructureTaskPanel(ArchComponent.ComponentTaskPanel): ) ) lay.addWidget(self.toggleButton) - QtCore.QObject.connect(self.toggleButton, QtCore.SIGNAL("clicked()"), self.toggleNodes) + self.toggleButton.clicked.connect(self.toggleNodes) self.extrusion_widget = QtGui.QWidget() self.extrusion_widget.setWindowTitle( @@ -1763,12 +1775,11 @@ class StructureTaskPanel(ArchComponent.ComponentTaskPanel): ) ) lay.addWidget(self.selectToolButton) - QtCore.QObject.connect( - self.selectToolButton, QtCore.SIGNAL("clicked()"), self.setSelectionFromTool - ) + self.selectToolButton.clicked.connect(self.setSelectionFromTool) + + # Build the final form list: Options box, Node Tools box, Extrusion box, Components box + self.form = [self.options_widget, self.nodes_widget, self.extrusion_widget, self.baseform] - self.form = [self.form, self.nodes_widget, self.extrusion_widget] - self.Object = obj self.observer = None self.nodevis = None @@ -1961,14 +1972,13 @@ class StructureTaskPanel(ArchComponent.ComponentTaskPanel): self.selectToolButton.setText(QtGui.QApplication.translate("Arch", "Select Tool", None)) def accept(self): - if self.observer: FreeCADGui.Selection.removeObserver(self.observer) if self.nodevis: self.toggleNodes() - FreeCAD.ActiveDocument.recompute() - FreeCADGui.ActiveDocument.resetEdit() - return True + + # Trigger the generic property-saving logic in ComponentOptionsTaskPanel + return super().accept() class StructSelectionObserver: