From a0d3d020ebb13730892f8d477f7b780f7d8df43c Mon Sep 17 00:00:00 2001 From: Markus Lampert Date: Sun, 18 Jun 2017 14:53:24 -0700 Subject: [PATCH] Proper taskk panel cleanup on escape. --- src/Base/Observer.h | 4 +-- .../PathScripts/PathDressupHoldingTags.py | 33 +++++++++++-------- src/Mod/Path/PathScripts/PathJob.py | 26 +++++++++++---- 3 files changed, 41 insertions(+), 22 deletions(-) diff --git a/src/Base/Observer.h b/src/Base/Observer.h index ac0b8c667c..545e8f78af 100644 --- a/src/Base/Observer.h +++ b/src/Base/Observer.h @@ -135,7 +135,7 @@ public: { #ifdef FC_DEBUG size_t count = _ObserverSet.size(); - printf("Attach observer %p\n", ToObserv); + //printf("Attach observer %p\n", ToObserv); _ObserverSet.insert(ToObserv); if ( _ObserverSet.size() == count ) printf("Observer %p already attached\n", ToObserv); @@ -154,7 +154,7 @@ public: { #ifdef FC_DEBUG size_t count = _ObserverSet.size(); - printf("Detach observer %p\n", ToObserv); + //printf("Detach observer %p\n", ToObserv); _ObserverSet.erase(ToObserv); if ( _ObserverSet.size() == count ) printf("Observer %p already detached\n", ToObserv); diff --git a/src/Mod/Path/PathScripts/PathDressupHoldingTags.py b/src/Mod/Path/PathScripts/PathDressupHoldingTags.py index c70525585c..c78bb70a99 100644 --- a/src/Mod/Path/PathScripts/PathDressupHoldingTags.py +++ b/src/Mod/Path/PathScripts/PathDressupHoldingTags.py @@ -1044,27 +1044,29 @@ class TaskPanel: def modifyStandardButtons(self, buttonBox): self.buttonBox = buttonBox - def reject(self): - PathLog.info("reject") + def abort(self): FreeCAD.ActiveDocument.abortTransaction() - self.cleanup() + self.cleanup(False) + + def reject(self): + FreeCAD.ActiveDocument.abortTransaction() + self.cleanup(True) def accept(self): - PathLog.info("accept") self.getFields() FreeCAD.ActiveDocument.commitTransaction() - self.cleanup() + self.cleanup(True) FreeCAD.ActiveDocument.recompute() - def cleanup(self): - PathLog.info("cleanup") + def cleanup(self, gui): self.removeGlobalCallbacks() self.viewProvider.clearTaskPanel() - FreeCADGui.ActiveDocument.resetEdit() - FreeCADGui.Control.closeDialog() - FreeCAD.ActiveDocument.recompute() - if self.jvoVisible: - self.jvo.show() + if gui: + FreeCADGui.ActiveDocument.resetEdit() + FreeCADGui.Control.closeDialog() + FreeCAD.ActiveDocument.recompute() + if self.jvoVisible: + self.jvo.show() def getTags(self, includeCurrent): tags = [] @@ -1357,6 +1359,7 @@ class ViewProviderDressup: def __init__(self, vobj): vobj.Proxy = self + self.panel = None def setupColors(self): def colorForColorValue(val): @@ -1401,8 +1404,11 @@ class ViewProviderDressup: self.setupTaskPanel(panel) return True + def unsetEdit(self, vobj, mode): + if hasattr(self, 'panel') and self.panel: + self.panel.abort() + def setupTaskPanel(self, panel): - PathLog.info("setupTaskPanel") self.panel = panel FreeCADGui.Control.closeDialog() FreeCADGui.Control.showDialog(panel) @@ -1411,7 +1417,6 @@ class ViewProviderDressup: FreeCADGui.Selection.addObserver(self) def clearTaskPanel(self): - PathLog.info("clearTaskPanel") self.panel = None FreeCADGui.Selection.removeSelectionGate() FreeCADGui.Selection.removeObserver(self) diff --git a/src/Mod/Path/PathScripts/PathJob.py b/src/Mod/Path/PathScripts/PathJob.py index 3aab5de075..29c25bdb5e 100644 --- a/src/Mod/Path/PathScripts/PathJob.py +++ b/src/Mod/Path/PathScripts/PathJob.py @@ -182,6 +182,7 @@ class ViewProviderJob: vobj.setEditorMode('Selectable', mode) vobj.setEditorMode('ShapeColor', mode) vobj.setEditorMode('Transparency', mode) + self.taskPanel = None def __getstate__(self): # mandatory return None @@ -194,12 +195,19 @@ class ViewProviderJob: def setEdit(self, vobj, mode=0): FreeCADGui.Control.closeDialog() - taskd = TaskPanel(vobj.Object, self.deleteObjectsOnReject()) - FreeCADGui.Control.showDialog(taskd) - taskd.setupUi() + self.taskPanel = TaskPanel(vobj, self.deleteObjectsOnReject()) + FreeCADGui.Control.showDialog(self.taskPanel) + self.taskPanel.setupUi() self.deleteOnReject = False return True + def unsetEdit(self, vobj, mode): + if self.taskPanel: + self.taskPanel.reject() + + def resetTaskPanel(self): + self.taskPanel = None + def getIcon(self): return ":/icons/Path-Job.svg" @@ -213,14 +221,15 @@ class ViewProviderJob: class TaskPanel: - def __init__(self, obj, deleteOnReject): + def __init__(self, vobj, deleteOnReject): FreeCAD.ActiveDocument.openTransaction(translate("Path_Job", "Edit Job")) - self.obj = obj + self.vobj = vobj + self.obj = vobj.Object self.deleteOnReject = deleteOnReject self.form = FreeCADGui.PySideUic.loadUi(":/panels/JobEdit.ui") #self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Path/JobEdit.ui") - currentPostProcessor = obj.PostProcessor + currentPostProcessor = self.obj.PostProcessor postProcessors = PathPreferences.allEnabledPostProcessors(['', currentPostProcessor]) for post in postProcessors: self.form.cboPostProcessor.addItem(post) @@ -236,13 +245,16 @@ class TaskPanel: self.postProcessorArgsDefaultTooltip = self.form.cboPostProcessorArgs.toolTip() def accept(self): + PathLog.error('accept') self.getFields() FreeCADGui.ActiveDocument.resetEdit() FreeCADGui.Control.closeDialog() FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() + self.vobj.Proxy.resetTaskPanel() def reject(self): + PathLog.error('reject') FreeCADGui.Control.closeDialog() FreeCAD.ActiveDocument.abortTransaction() if self.deleteOnReject: @@ -253,6 +265,8 @@ class TaskPanel: FreeCAD.ActiveDocument.removeObject(self.obj.Name) FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() + self.vobj.Proxy.resetTaskPanel() + return True def updateTooltips(self): if hasattr(self.obj, "Proxy") and hasattr(self.obj.Proxy, "tooltip") and self.obj.Proxy.tooltip: