From 9a505c36c4e8ae6930e041da9e210f078ff30fea Mon Sep 17 00:00:00 2001 From: Roy-043 <70520633+Roy-043@users.noreply.github.com> Date: Fri, 23 May 2025 11:49:55 +0200 Subject: [PATCH] BIM: Revise close panel on doc close solution (#21302) * BIM: Revise close panel on doc close solution Use built-in feature to close the task panels. See #21253. * Keep self.doc --- src/Mod/BIM/InitGui.py | 6 +----- src/Mod/Draft/DraftGui.py | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/Mod/BIM/InitGui.py b/src/Mod/BIM/InitGui.py index f071da780e..ab66fc9525 100644 --- a/src/Mod/BIM/InitGui.py +++ b/src/Mod/BIM/InitGui.py @@ -288,7 +288,7 @@ class BIMWorkbench(Workbench): FreeCADGui.addCommand("BIM_Create2DViews", BIM_Create2DViews(self.create_2dviews)) insert_at_index = self.annotationtools.index("BIM_TDPage") self.annotationtools.insert(insert_at_index, "BIM_Create2DViews") - + # load rebar tools (Reinforcement addon) try: @@ -507,7 +507,6 @@ class BIMWorkbench(Workbench): import BimStatus from nativeifc import ifc_observer from draftutils import grid_observer - from draftutils import doc_observer PARAMS = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/BIM") @@ -517,7 +516,6 @@ class BIMWorkbench(Workbench): FreeCADGui.Snapper.show() WorkingPlane._view_observer_start() grid_observer._view_observer_setup() - doc_observer._doc_observer_start() if PARAMS.GetBool("FirstTime", True) and (not hasattr(FreeCAD, "TestEnvironment")): todo.ToDo.delay(FreeCADGui.runCommand, "BIM_Welcome") @@ -588,7 +586,6 @@ class BIMWorkbench(Workbench): import WorkingPlane from nativeifc import ifc_observer from draftutils import grid_observer - from draftutils import doc_observer PARAMS = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/BIM") @@ -602,7 +599,6 @@ class BIMWorkbench(Workbench): FreeCADGui.Snapper.hide() WorkingPlane._view_observer_stop() grid_observer._view_observer_setup() - doc_observer._doc_observer_stop() # print("Deactivating status icon") todo.ToDo.delay(BimStatus.setStatusIcons, False) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 942bb8b621..9afe2cd512 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -615,18 +615,23 @@ class DraftToolBar: # Interface modes #--------------------------------------------------------------------------- - def taskUi(self,title="Draft",extra=None,icon="Draft_Draft"): + def _show_dialog(self, panel): + task = FreeCADGui.Control.showDialog(panel) + task.setDocumentName(FreeCADGui.ActiveDocument.Document.Name) + task.setAutoCloseOnDeletedDocument(True) + + def taskUi(self,title="Draft", extra=None, icon="Draft_Draft"): # reset InputField values self.reset_ui_values() self.isTaskOn = True - todo.delay(FreeCADGui.Control.closeDialog,None) + todo.delay(FreeCADGui.Control.closeDialog, None) self.baseWidget = DraftBaseWidget() self.layout = QtWidgets.QVBoxLayout(self.baseWidget) self.setupToolBar(task=True) self.retranslateUi(self.baseWidget) - self.panel = DraftTaskPanel(self.baseWidget,extra) - todo.delay(FreeCADGui.Control.showDialog,self.panel) - self.setTitle(title,icon) + self.panel = DraftTaskPanel(self.baseWidget, extra) + todo.delay(self._show_dialog, self.panel) + self.setTitle(title, icon) def redraw(self): """utility function that is performed after each clicked point""" @@ -922,9 +927,9 @@ class DraftToolBar: if self.callback: self.callback() return True - todo.delay(FreeCADGui.Control.closeDialog,None) + todo.delay(FreeCADGui.Control.closeDialog, None) panel = TaskPanel(extra, on_close_call) - todo.delay(FreeCADGui.Control.showDialog,panel) + todo.delay(self._show_dialog, panel) #---------------------------------------------------------------------------