Proper taskk panel cleanup on escape.

This commit is contained in:
Markus Lampert
2017-06-18 14:53:24 -07:00
parent a689ebd5d7
commit 03c5168d89
3 changed files with 41 additions and 22 deletions

View File

@@ -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);

View File

@@ -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)

View File

@@ -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: