Skip to content

Commit

Permalink
Basic ToolBitSelector dialog
Browse files Browse the repository at this point in the history
  • Loading branch information
mlampert committed Nov 29, 2019
1 parent 2670895 commit a6ce76c
Show file tree
Hide file tree
Showing 5 changed files with 186 additions and 7 deletions.
1 change: 1 addition & 0 deletions src/Mod/Path/Gui/Resources/Path.qrc
Expand Up @@ -109,6 +109,7 @@
<file>panels/SetupGlobal.ui</file>
<file>panels/SetupOp.ui</file>
<file>panels/ToolBitEditor.ui</file>
<file>panels/ToolBitSelector.ui</file>
<file>panels/ToolEditor.ui</file>
<file>panels/ToolLibraryEditor.ui</file>
<file>panels/TaskPathSimulator.ui</file>
Expand Down
110 changes: 110 additions & 0 deletions src/Mod/Path/Gui/Resources/panels/ToolBitSelector.ui
@@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>588</width>
<height>396</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QWidget" name="widget_2" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QListWidget" name="tools">
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="toolLoad">
<property name="text">
<string>Load...</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="toolCreate">
<property name="text">
<string>New</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>Dialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>Dialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>
2 changes: 1 addition & 1 deletion src/Mod/Path/InitGui.py
Expand Up @@ -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(
Expand Down
58 changes: 58 additions & 0 deletions src/Mod/Path/PathScripts/PathToolBitGui.py
Expand Up @@ -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.'''
Expand Down
22 changes: 16 additions & 6 deletions src/Mod/Path/PathScripts/PathToolControllerGui.py
Expand Up @@ -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

Expand Down Expand Up @@ -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):

Expand Down

0 comments on commit a6ce76c

Please sign in to comment.