diff --git a/src/Mod/Path/Gui/Resources/panels/ToolLibraryEditor.ui b/src/Mod/Path/Gui/Resources/panels/ToolLibraryEditor.ui index 7f9d7bc2a6..22a5c6d953 100644 --- a/src/Mod/Path/Gui/Resources/panels/ToolLibraryEditor.ui +++ b/src/Mod/Path/Gui/Resources/panels/ToolLibraryEditor.ui @@ -164,6 +164,15 @@ 0 + + false + + + QAbstractItemView::NoDragDrop + + + Qt::IgnoreAction + true @@ -187,7 +196,7 @@ false - QAbstractItemView::NoDragDrop + QAbstractItemView::DragOnly Qt::IgnoreAction diff --git a/src/Mod/Path/PathScripts/PathToolLibraryManager.py b/src/Mod/Path/PathScripts/PathToolLibraryManager.py index 4d31968b18..05839997dc 100644 --- a/src/Mod/Path/PathScripts/PathToolLibraryManager.py +++ b/src/Mod/Path/PathScripts/PathToolLibraryManager.py @@ -509,6 +509,13 @@ class ToolLibraryManager(): self.saveMainLibrary() return True, newID + def moveToTable(self, number, listname): + ''' Moves the tool to selected tool table ''' + fromTable = self.getTableFromName(self.getCurrentTableName()) + toTable = self.getTableFromName(listname) + tool = fromTable.getTool(number).copy() + toTable.addTools(tool) + fromTable.deleteTool(number) def delete(self, number, listname): '''deletes a tool from the current list''' @@ -598,6 +605,7 @@ class EditorPanel(): t = model.index(i, 1) self.TLM.delete(int(t.data()) ,listname) self.loadTable(listname) + self.toolSelectionChanged() def editTool(self, currItem): '''load the tool edit dialog''' @@ -675,9 +683,10 @@ class EditorPanel(): listname = self.TLM.getCurrentTableName() self.TLM.write(filename, listname) - def toolSelected(self, index): + def toolSelectionChanged(self, index=None): ''' updates the ui when tools are selected''' - self.form.ToolsList.selectRow(index.row()) + if index: + self.form.ToolsList.selectRow(index.row()) self.form.btnCopyTools.setEnabled(False) self.form.ButtonDelete.setEnabled(False) @@ -761,7 +770,7 @@ class EditorPanel(): def tableSelected(self, index): ''' loads the tools for the selected tool table ''' - name = self.form.TableList.itemFromIndex(index).text() + name = self.form.TableList.itemWidget(self.form.TableList.itemFromIndex(index)).getTableName() self.loadTable(name) def loadTable(self, name): @@ -773,7 +782,6 @@ class EditorPanel(): self.form.ToolsList.horizontalHeader().setResizeMode(self.form.ToolsList.model().columnCount() - 1, QtGui.QHeaderView.Stretch) self.setCurrentToolTableByName(name) - def addNewToolTable(self): ''' adds new tool to selected tool table ''' name = self.TLM.addNewToolTable() @@ -788,36 +796,51 @@ class EditorPanel(): model.clear() if len(self.TLM.getToolTables()) > 0: for table in self.TLM.getToolTables(): - listItem = QtGui.QListWidgetItem(table.Name) - listItem.setIcon(QtGui.QIcon(':/icons/Path-ToolTable.svg')) - listItem.setFlags(listItem.flags() | QtCore.Qt.ItemIsEditable) - listItem.setSizeHint(QtCore.QSize(0,40)) - self.form.TableList.addItem(listItem) - self.loadTable(self.TLM.getToolTables()[0].Name) + listWidgetItem = QtGui.QListWidgetItem() + listItem = ToolTableListWidgetItem(self.TLM) + listItem.setTableName(table.Name) + listItem.setIcon(QtGui.QPixmap(':/icons/Path-ToolTable.svg')) + listItem.toolMoved.connect(self.reloadReset) + listWidgetItem.setSizeHint(QtCore.QSize(0,40)) + self.form.TableList.addItem(listWidgetItem) + self.form.TableList.setItemWidget(listWidgetItem, listItem) + #Load the first tooltable + self.loadTable(self.TLM.getCurrentTableName()) + + def reloadReset(self): + ''' reloads the current tooltable''' + name = self.TLM.getCurrentTableName() + self.loadTable(name) def setCurrentToolTableByName(self, name): ''' get the current tool table ''' - item = self.form.TableList.findItems(name, QtCore.Qt.MatchExactly)[0] - self.form.TableList.setCurrentItem(item) + item = self.getToolTableByName(name) + if item: + self.form.TableList.setCurrentItem(item) + + def getToolTableByName(self, name): + ''' returns the listWidgetItem for the selected name''' + for i in range(self.form.TableList.count()): + tableName = self.form.TableList.itemWidget(self.form.TableList.item(i)).getTableName() + if tableName == name: + return self.form.TableList.item(i) + return False def removeToolTable(self): ''' delete the selected tool table ''' self.TLM.deleteToolTable() self.loadToolTables() - def initTableRename(self): - ''' update the tool table list entry to allow renaming ''' + def renameTable(self): + ''' provides dialog for new tablename and renames teh selected tool table''' name = self.TLM.getCurrentTableName() - item = self.form.TableList.findItems(name, QtCore.Qt.MatchExactly)[0] - self.form.TableList.editItem(item) - - def renameTable(self, listItem): - ''' rename the selected too table ''' - newName = listItem.text() - index = self.form.TableList.indexFromItem(listItem).row() - reloadTables = self.TLM.renameToolTable(newName, index) - if reloadTables: - self.loadToolTables() + newName, ok = QtGui.QInputDialog.getText(None, translate("TooltableEditor","Rename Tooltable"),translate("TooltableEditor","Enter Name:"),QtGui.QLineEdit.Normal,name) + if ok and newName: + index = self.form.TableList.indexFromItem(self.getToolTableByName(name)).row() + reloadTables = self.TLM.renameToolTable(newName, index) + if reloadTables: + self.loadToolTables() + self.loadTable(newName) def getStandardButtons(self): return int(QtGui.QDialogButtonBox.Ok) @@ -850,7 +873,7 @@ class EditorPanel(): self.form.ButtonDuplicate.clicked.connect(self.duplicate) self.form.ToolsList.doubleClicked.connect(self.editTool) - self.form.ToolsList.clicked.connect(self.toolSelected) + self.form.ToolsList.clicked.connect(self.toolSelectionChanged) self.form.btnCopyTools.clicked.connect(self.copyTools) @@ -858,16 +881,63 @@ class EditorPanel(): self.form.TableList.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) #self.form.TableList.customContextMenuRequested.connect(self.openMenu) self.form.TableList.itemChanged.connect(self.renameTable) + self.form.ButtonAddToolTable.clicked.connect(self.addNewToolTable) self.form.ButtonAddToolTable.setToolTip(translate("TooltableEditor","Add New Tool Table")) self.form.ButtonRemoveToolTable.clicked.connect(self.removeToolTable) self.form.ButtonRemoveToolTable.setToolTip(translate("TooltableEditor","Delete Selected Tool Table")) - self.form.ButtonRenameToolTable.clicked.connect(self.initTableRename) + self.form.ButtonRenameToolTable.clicked.connect(self.renameTable) self.form.ButtonRenameToolTable.setToolTip(translate("TooltableEditor","Rename Selected Tool Table")) self.setFields() +class ToolTableListWidgetItem(QtGui.QWidget): + + toolMoved = QtCore.Signal() + + def __init__(self, TLM): + super(ToolTableListWidgetItem, self).__init__() + + self.tlm = TLM + self.setAcceptDrops(True) + + self.mainLayout = QtGui.QHBoxLayout() + self.iconQLabel = QtGui.QLabel() + self.tableNameLabel = QtGui.QLabel() + self.mainLayout.addWidget(self.iconQLabel, 0) + self.mainLayout.addWidget(self.tableNameLabel, 1) + self.setLayout(self.mainLayout) + + def setTableName (self, text): + self.tableNameLabel.setText(text) + + def getTableName(self): + return self.tableNameLabel.text() + + def setIcon (self, icon): + icon = icon.scaled(24, 24) + self.iconQLabel.setPixmap(icon) + + def dragEnterEvent(self, e): + currentToolTable = self.tlm.getCurrentTableName() + thisToolTable = self.getTableName() + + if not currentToolTable == thisToolTable: + e.accept() + else: + e.ignore() + + def dropEvent(self, e): + selectedTools = e.source().selectedIndexes() + if selectedTools: + toolData = selectedTools[1].data() + + if toolData: + self.tlm.moveToTable(int(toolData), self.getTableName()) + self.toolMoved.emit() + + class CommandToolLibraryEdit(): def __init__(self): pass