From a6ce76c586a98715367f7ce4c1b78585bd282b7f Mon Sep 17 00:00:00 2001 From: Markus Lampert Date: Mon, 21 Oct 2019 20:32:42 -0700 Subject: [PATCH] Basic ToolBitSelector dialog --- src/Mod/Path/Gui/Resources/Path.qrc | 1 + .../Gui/Resources/panels/ToolBitSelector.ui | 110 ++++++++++++++++++ src/Mod/Path/InitGui.py | 2 +- src/Mod/Path/PathScripts/PathToolBitGui.py | 58 +++++++++ .../Path/PathScripts/PathToolControllerGui.py | 22 +++- 5 files changed, 186 insertions(+), 7 deletions(-) create mode 100644 src/Mod/Path/Gui/Resources/panels/ToolBitSelector.ui diff --git a/src/Mod/Path/Gui/Resources/Path.qrc b/src/Mod/Path/Gui/Resources/Path.qrc index 26f744bec884..cb19bd7a154a 100644 --- a/src/Mod/Path/Gui/Resources/Path.qrc +++ b/src/Mod/Path/Gui/Resources/Path.qrc @@ -109,6 +109,7 @@ panels/SetupGlobal.ui panels/SetupOp.ui panels/ToolBitEditor.ui + panels/ToolBitSelector.ui panels/ToolEditor.ui panels/ToolLibraryEditor.ui panels/TaskPathSimulator.ui diff --git a/src/Mod/Path/Gui/Resources/panels/ToolBitSelector.ui b/src/Mod/Path/Gui/Resources/panels/ToolBitSelector.ui new file mode 100644 index 000000000000..7013e8bf2faa --- /dev/null +++ b/src/Mod/Path/Gui/Resources/panels/ToolBitSelector.ui @@ -0,0 +1,110 @@ + + + Dialog + + + + 0 + 0 + 588 + 396 + + + + Dialog + + + + + + + + + QAbstractItemView::NoEditTriggers + + + + + + + + + + Load... + + + + + + + New + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/Mod/Path/InitGui.py b/src/Mod/Path/InitGui.py index 10e1669aff6a..192cd1830095 100644 --- a/src/Mod/Path/InitGui.py +++ b/src/Mod/Path/InitGui.py @@ -113,7 +113,7 @@ def Initialize(self): 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"] + toolcmdlist +["Separator"] + twodopcmdlist + engravecmdlist +["Separator"] +threedopcmdlist +["Separator"]) + self.appendMenu([QtCore.QT_TRANSLATE_NOOP("Path", "&Path")], projcmdlist +["Path_ExportTemplate", "Separator"] + PathToolBitCmd.CommandList + ["Path_ToolController", "Separator"] + 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( diff --git a/src/Mod/Path/PathScripts/PathToolBitGui.py b/src/Mod/Path/PathScripts/PathToolBitGui.py index ac8c51536f2e..af128ea83a27 100644 --- a/src/Mod/Path/PathScripts/PathToolBitGui.py +++ b/src/Mod/Path/PathScripts/PathToolBitGui.py @@ -157,6 +157,64 @@ def setFields(self): def setupUi(self): self.editor.setupUI() + +class ToolBitSelector(object): + ToolRole = QtCore.Qt.UserRole + 1 + + def __init__(self): + self.form = FreeCADGui.PySideUic.loadUi(":/panels/ToolBitSelector.ui") + self.setupUI() + + def getTool(self): + selected = None + selItem = None + self.form.tools.setUpdatesEnabled(False) + if self.form.tools.currentItem(): + selected = self.form.tools.currentItem().text() + self.form.tools.clear() + for tool in sorted(self.loadedTools(), key=lambda t: t.Label): + icon = None + if tool.ViewObject and tool.ViewObject.Proxy: + icon = tool.ViewObject.Proxy.getIcon() + if icon: + item = QtGui.QListWidgetItem(icon, tool.Label) + else: + item = QtGui.QListWidgetItem(tool.Label) + item.setData(self.ToolRole, tool) + if selected == tool.Label: + selItem = item + self.form.tools.addItem(item) + if selItem: + self.form.tools.setCurrentItem(selItem) + self.updateSelection() + self.form.tools.setUpdatesEnabled(True) + res = self.form.exec_() + if 1 == res and self.form.tools.currentItem(): + return self.form.tools.currentItem().data(self.ToolRole) + return None + + def loadedTools(self): + if FreeCAD.ActiveDocument: + return [o for o in FreeCAD.ActiveDocument.Objects if hasattr(o, 'Proxy') and isinstance(o.Proxy, PathToolBit.ToolBit)] + return [] + + def loadTool(self): + pass + + def createTool(self): + pass + + def updateSelection(self): + if self.form.tools.selectedItems(): + self.form.buttonBox.button(QtGui.QDialogButtonBox.Ok).setEnabled(True) + else: + self.form.buttonBox.button(QtGui.QDialogButtonBox.Ok).setEnabled(False) + + def setupUI(self): + self.form.toolCreate.clicked.connect(self.createTool) + self.form.toolLoad.clicked.connect(self.loadTool) + self.form.tools.itemSelectionChanged.connect(self.updateSelection) + def Create(name = 'ToolBit'): '''Create(name = 'ToolBit') ... creates a new tool bit. It is assumed the tool will be edited immediately so the internal bit body is still attached.''' diff --git a/src/Mod/Path/PathScripts/PathToolControllerGui.py b/src/Mod/Path/PathScripts/PathToolControllerGui.py index bfc87c64954f..a18cd423c9a1 100644 --- a/src/Mod/Path/PathScripts/PathToolControllerGui.py +++ b/src/Mod/Path/PathScripts/PathToolControllerGui.py @@ -28,6 +28,8 @@ import PathScripts import PathScripts.PathGui as PathGui import PathScripts.PathLog as PathLog +import PathScripts.PathToolBit as PathToolBit +import PathScripts.PathToolBitGui as PathToolBitGui import PathScripts.PathToolEdit as PathToolEdit import PathScripts.PathUtil as PathUtil @@ -135,16 +137,24 @@ def GetResources(self): 'MenuText': QtCore.QT_TRANSLATE_NOOP("Path_ToolController", "Add Tool Controller to the Job"), 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Path_ToolController", "Add Tool Controller")} + def selectedJob(self): + if FreeCAD.ActiveDocument: + sel = FreeCADGui.Selection.getSelectionEx() + if sel and sel[0].Object.Name[:3] == 'Job': + return sel[0].Object + return None + def IsActive(self): - if FreeCAD.ActiveDocument is not None: - for o in FreeCAD.ActiveDocument.Objects: - if o.Name[:3] == "Job": - return True - return False + return self.selectedJob() is not None def Activated(self): PathLog.track() - Create() + job = self.selectedJob() + if job: + tool = PathToolBitGui.ToolBitSelector().getTool() + if tool: + tc = Create(tool) + job.addToolController(tc) class ToolControllerEditor(object):