From 2a96a7d796f76a748254433866a56bdbc0d81b6b Mon Sep 17 00:00:00 2001 From: Markus Lampert Date: Sun, 17 Nov 2019 13:43:24 -0800 Subject: [PATCH] Moved usage of ToolBit into the experimental features. --- src/Mod/Path/InitGui.py | 12 ++++++++-- src/Mod/Path/PathScripts/PathPreferences.py | 3 +++ src/Mod/Path/PathScripts/PathToolBit.py | 15 ++++++++---- src/Mod/Path/PathScripts/PathToolBitGui.py | 4 ++++ .../Path/PathScripts/PathToolController.py | 23 +++++++++++-------- .../Path/PathScripts/PathToolLibraryEditor.py | 2 +- 6 files changed, 43 insertions(+), 16 deletions(-) diff --git a/src/Mod/Path/InitGui.py b/src/Mod/Path/InitGui.py index 25494fbf87..0657fac577 100644 --- a/src/Mod/Path/InitGui.py +++ b/src/Mod/Path/InitGui.py @@ -71,8 +71,16 @@ class PathWorkbench (Workbench): FreeCADGui.addIconPath(":/icons") from PathScripts import PathGuiInit from PathScripts import PathJobCmd + from PathScripts import PathToolBitCmd from PathScripts import PathToolBitLibraryCmd + if PathPreferences.experimentalFeaturesEnabled(): + toolbitcmdlist = PathToolBitCmd.CommandList + ["Separator"] + PathToolBitLibraryCmd.CommandList + ["Path_ToolController", "Separator"] + self.toolbitctxmenu = ["Path_ToolBitLibraryLoad", "Path_ToolController"] + else: + toolbitcmdlist = [] + self.toolbitctxmenu = [] + import PathCommands PathGuiInit.Startup() @@ -114,7 +122,7 @@ class PathWorkbench (Workbench): if extracmdlist: self.appendToolbar(QtCore.QT_TRANSLATE_NOOP("Path", "Helpful Tools"), extracmdlist) - self.appendMenu([QtCore.QT_TRANSLATE_NOOP("Path", "&Path")], projcmdlist +["Path_ExportTemplate", "Separator"] + PathToolBitCmd.CommandList + ["Separator"] + PathToolBitLibraryCmd.CommandList + ["Path_ToolController", "Separator"] + toolcmdlist +["Separator"] + twodopcmdlist + engravecmdlist +["Separator"] +threedopcmdlist +["Separator"]) + self.appendMenu([QtCore.QT_TRANSLATE_NOOP("Path", "&Path")], projcmdlist +["Path_ExportTemplate", "Separator"] + toolbitcmdlist + toolcmdlist +["Separator"] + twodopcmdlist + engravecmdlist +["Separator"] +threedopcmdlist +["Separator"]) self.appendMenu([QtCore.QT_TRANSLATE_NOOP("Path", "&Path"), QtCore.QT_TRANSLATE_NOOP( "Path", "Path Dressup")], dressupcmdlist) self.appendMenu([QtCore.QT_TRANSLATE_NOOP("Path", "&Path"), QtCore.QT_TRANSLATE_NOOP( @@ -155,7 +163,7 @@ class PathWorkbench (Workbench): if "Remote" in selectedName: self.appendContextMenu("", ["Refresh_Path"]) if "Job" in selectedName: - self.appendContextMenu("", ["Path_ExportTemplate", "Path_ToolBitLibraryLoad", "Path_ToolController"]) + self.appendContextMenu("", ["Path_ExportTemplate"] + self.toolbitctxmenu) menuAppended = True if isinstance(obj.Proxy, PathScripts.PathOp.ObjectOp): self.appendContextMenu("", ["Path_OperationCopy", "Path_OpActiveToggle"]) diff --git a/src/Mod/Path/PathScripts/PathPreferences.py b/src/Mod/Path/PathScripts/PathPreferences.py index 2fc5bf261b..0525a3b3f5 100644 --- a/src/Mod/Path/PathScripts/PathPreferences.py +++ b/src/Mod/Path/PathScripts/PathPreferences.py @@ -152,6 +152,9 @@ def searchPathsTool(sub='Bit'): def toolsUseLegacyTools(): return preferences().GetBool(UseLegacyTools, True) +def toolsReallyUseLegacyTools(): + return toolsUseLegacyTools() or not experimentalFeaturesEnabled() + def toolsStoreAbsolutePaths(): return preferences().GetBool(UseAbsoluteToolPaths, False) diff --git a/src/Mod/Path/PathScripts/PathToolBit.py b/src/Mod/Path/PathScripts/PathToolBit.py index a78443d63b..e9e9de4fdd 100644 --- a/src/Mod/Path/PathScripts/PathToolBit.py +++ b/src/Mod/Path/PathScripts/PathToolBit.py @@ -149,9 +149,12 @@ class ToolBit(object): obj.addProperty('App::PropertyLink', 'BitBody', 'Base', translate('PathToolBit', 'The parametrized body representing the tool bit')) obj.addProperty('App::PropertyFile', 'File', 'Base', translate('PathToolBit', 'The file of the tool')) if shapeFile is None: - shapeFile = 'endmill.fcstd' - obj.BitShape = shapeFile - self._setupBitShape(obj) + obj.BitShape = 'endmill.fcstd' + self._setupBitShape(obj) + self.unloadBitBody(obj) + else: + obj.BitShape = shapeFile + self._setupBitShape(obj) self.onDocumentRestored(obj) def __getstate__(self): @@ -189,6 +192,10 @@ class ToolBit(object): #elif obj.getGroupOfProperty(prop) == PropertyGroupBit: # self._updateBitShape(obj, [prop]) + def onDelete(self, obj, arg2=None): + PathLog.track(obj.Label) + self.unloadBitBody(obj) + def _updateBitShape(self, obj, properties=None): if not obj.BitBody is None: if not properties: @@ -237,9 +244,9 @@ class ToolBit(object): def loadBitBody(self, obj, force=False): if force or not obj.BitBody: + activeDoc = FreeCAD.ActiveDocument if force: self._removeBitBody(obj) - activeDoc = FreeCAD.ActiveDocument (doc, opened) = self._loadBitBody(obj) obj.BitBody = obj.Document.copyObject(doc.RootObjects[0], True) if opened: diff --git a/src/Mod/Path/PathScripts/PathToolBitGui.py b/src/Mod/Path/PathScripts/PathToolBitGui.py index 5dc7ba98cd..ae21e05172 100644 --- a/src/Mod/Path/PathScripts/PathToolBitGui.py +++ b/src/Mod/Path/PathScripts/PathToolBitGui.py @@ -77,6 +77,10 @@ class ViewProvider(object): # pylint: disable=unused-argument return None + def onDelete(self, vobj, arg2=None): + PathLog.track(vobj.Object.Label) + vobj.Object.Proxy.onDelete(vobj.Object) + def getDisplayMode(self, mode): # pylint: disable=unused-argument return 'Default' diff --git a/src/Mod/Path/PathScripts/PathToolController.py b/src/Mod/Path/PathScripts/PathToolController.py index 5cf6eead07..9ff19b9668 100644 --- a/src/Mod/Path/PathScripts/PathToolController.py +++ b/src/Mod/Path/PathScripts/PathToolController.py @@ -31,13 +31,8 @@ import PathScripts.PathToolBit as PathToolBit from PySide import QtCore -LOGLEVEL = False - -if LOGLEVEL: - PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule()) - PathLog.trackModule(PathLog.thisModule()) -else: - PathLog.setLevel(PathLog.Level.INFO, PathLog.thisModule()) +#PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule()) +#PathLog.trackModule(PathLog.thisModule()) # Qt translation handling def translate(context, text, disambig=None): @@ -86,6 +81,8 @@ class ToolController: # pylint: disable=unused-argument if not self.usesLegacyTool(obj): if len(obj.Tool.InList) == 1: + if hasattr(obj.Tool.Proxy, 'onDelete'): + obj.Tool.Proxy.onDelete(obj.Tool) obj.Document.removeObject(obj.Tool.Name) def setFromTemplate(self, obj, template): @@ -186,17 +183,23 @@ class ToolController: def ensureUseLegacyTool(self, obj, legacy): if not hasattr(obj, 'Tool') or (legacy != self.usesLegacyTool(obj)): + if legacy and hasattr(obj, 'Tool') and len(obj.Tool.InList) == 1: + if hasattr(obj.Tool.Proxy, 'onDelete'): + obj.Tool.Proxy.onDelete(obj.Tool) + obj.Document.removeObject(obj.Tool.Name) + if hasattr(obj, 'Tool'): obj.removeProperty('Tool') + if legacy: obj.addProperty("Path::PropertyTool", "Tool", "Base", QtCore.QT_TRANSLATE_NOOP("PathToolController", "The tool used by this controller")) else: obj.addProperty("App::PropertyLink", "Tool", "Base", QtCore.QT_TRANSLATE_NOOP("PathToolController", "The tool used by this controller")) def Create(name = 'Default Tool', tool=None, toolNumber=1, assignViewProvider=True): - PathLog.track(tool, toolNumber) + legacyTool = PathPreferences.toolsReallyUseLegacyTools() if tool is None else isinstance(tool, Path.Tool) - legacyTool = PathPreferences.toolsUseLegacyTools() if tool is None else isinstance(tool, Path.Tool) + PathLog.track(tool, toolNumber, legacyTool) obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name) obj.Label = name @@ -215,6 +218,8 @@ def Create(name = 'Default Tool', tool=None, toolNumber=1, assignViewProvider=Tr tool.Material = "HighSpeedSteel" else: tool = PathToolBit.Factory.Create() + if tool.ViewObject: + tool.ViewObject.Visibility = False obj.Tool = tool obj.ToolNumber = toolNumber diff --git a/src/Mod/Path/PathScripts/PathToolLibraryEditor.py b/src/Mod/Path/PathScripts/PathToolLibraryEditor.py index 367955a288..bc51839658 100644 --- a/src/Mod/Path/PathScripts/PathToolLibraryEditor.py +++ b/src/Mod/Path/PathScripts/PathToolLibraryEditor.py @@ -441,7 +441,7 @@ class CommandToolLibraryEdit(): pass def edit(self, job=None, cb=None): - if PathPreferences.toolsUseLegacyTools(): + if PathPreferences.toolsReallyUseLegacyTools(): editor = EditorPanel(job, cb) editor.setupUi() editor.form.exec_()