diff -r 000000000000 -r de9c2efb9d02 Preferences/ToolGroupConfigurationDialog.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Preferences/ToolGroupConfigurationDialog.py Mon Dec 28 16:03:33 2009 +0000 @@ -0,0 +1,211 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2002 - 2009 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a configuration dialog for the tools menu. +""" + +import sys +import os +import copy + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +from Ui_ToolGroupConfigurationDialog import Ui_ToolGroupConfigurationDialog +import Utilities + +class ToolGroupConfigurationDialog(QDialog, Ui_ToolGroupConfigurationDialog): + """ + Class implementing a configuration dialog for the tool groups. + """ + def __init__(self, toolGroups, currentGroup, parent = None): + """ + Constructor + + @param toolGroups list of configured tool groups + @param currentGroup number of the active group (integer) + @param parent parent widget (QWidget) + """ + QDialog.__init__(self, parent) + self.setupUi(self) + + self.currentGroup = currentGroup + self.toolGroups = copy.deepcopy(toolGroups) + for group in toolGroups: + self.groupsList.addItem(group[0]) + + if len(toolGroups): + self.groupsList.setCurrentRow(0) + self.on_groupsList_currentRowChanged(0) + + @pyqtSlot() + def on_newButton_clicked(self): + """ + Private slot to clear all entry fields. + """ + self.nameEdit.clear() + + @pyqtSlot() + def on_addButton_clicked(self): + """ + Private slot to add a new entry. + """ + groupName = self.nameEdit.text() + + if not groupName: + QMessageBox.critical(self, + self.trUtf8("Add tool group entry"), + self.trUtf8("You have to give a name for the group to add.")) + return + + if len(self.groupsList.findItems(groupName, Qt.MatchFlags(Qt.MatchExactly))): + QMessageBox.critical(self, + self.trUtf8("Add tool group entry"), + self.trUtf8("An entry for the group name {0} already exists.")\ + .format(groupName)) + return + + self.groupsList.addItem(groupName) + self.toolGroups.append([groupName, []]) + + @pyqtSlot() + def on_changeButton_clicked(self): + """ + Private slot to change an entry. + """ + row = self.groupsList.currentRow() + if row < 0: + return + + groupName = self.nameEdit.text() + + if not groupName: + QMessageBox.critical(self, + self.trUtf8("Add tool group entry"), + self.trUtf8("You have to give a name for the group to add.")) + return + + if len(self.groupsList.findItems(groupName, Qt.MatchFlags(Qt.MatchExactly))): + QMessageBox.critical(self, + self.trUtf8("Add tool group entry"), + self.trUtf8("An entry for the group name {0} already exists.")\ + .format(groupName)) + return + + self.toolGroups[row][0] = groupName + self.groupsList.currentItem().setText(groupName) + + @pyqtSlot() + def on_deleteButton_clicked(self): + """ + Private slot to delete the selected entry. + """ + row = self.groupsList.currentRow() + if row < 0: + return + + res = QMessageBox.warning(None, + self.trUtf8("Delete tool group entry"), + self.trUtf8("""<p>Do you really want to delete the tool group""" + """ <b>"{0}"</b>?</p>""")\ + .format(self.groupsList.currentItem().text()), + QMessageBox.StandardButtons(\ + QMessageBox.No | \ + QMessageBox.Yes), + QMessageBox.No) + if res != QMessageBox.Yes: + return + + if row == self.currentGroup: + # set to default group if current group gets deleted + self.currentGroup = -1 + + del self.toolGroups[row] + itm = self.groupsList.takeItem(row) + del itm + if row >= len(self.toolGroups): + row -= 1 + self.groupsList.setCurrentRow(row) + self.on_groupsList_currentRowChanged(row) + + @pyqtSlot() + def on_downButton_clicked(self): + """ + Private slot to move an entry down in the list. + """ + curr = self.groupsList.currentRow() + self.__swap(curr, curr + 1) + self.groupsList.clear() + for group in self.toolGroups: + self.groupsList.addItem(group[0]) + self.groupsList.setCurrentRow(curr + 1) + if curr + 1 == len(self.toolGroups): + self.downButton.setEnabled(False) + self.upButton.setEnabled(True) + + @pyqtSlot() + def on_upButton_clicked(self): + """ + Private slot to move an entry up in the list. + """ + curr = self.groupsList.currentRow() + self.__swap(curr - 1, curr) + self.groupsList.clear() + for group in self.toolGroups: + self.groupsList.addItem(group[0]) + self.groupsList.setCurrentRow(curr - 1) + if curr - 1 == 0: + self.upButton.setEnabled(False) + self.downButton.setEnabled(True) + + def on_groupsList_currentRowChanged(self, row): + """ + Private slot to set the lineedits depending on the selected entry. + + @param row the row of the selected entry (integer) + """ + if row >= 0 and row < len(self.toolGroups): + group = self.toolGroups[row] + self.nameEdit.setText(group[0]) + + self.deleteButton.setEnabled(True) + self.changeButton.setEnabled(True) + + if row != 0: + self.upButton.setEnabled(True) + else: + self.upButton.setEnabled(False) + + if row + 1 != len(self.toolGroups): + self.downButton.setEnabled(True) + else: + self.downButton.setEnabled(False) + else: + self.nameEdit.clear() + self.downButton.setEnabled(False) + self.upButton.setEnabled(False) + self.deleteButton.setEnabled(False) + self.changeButton.setEnabled(False) + + def getToolGroups(self): + """ + Public method to retrieve the tool groups. + + @return a list of lists containing the group name and the + tool group entries + """ + return self.toolGroups[:], self.currentGroup + + def __swap(self, itm1, itm2): + """ + Private method used two swap two list entries given by their index. + + @param itm1 index of first entry (int) + @param itm2 index of second entry (int) + """ + tmp = self.toolGroups[itm1] + self.toolGroups[itm1] = self.toolGroups[itm2] + self.toolGroups[itm2] = tmp