--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SelectionEncloser/ConfigurationPage/SelectionEncloserPage.py Fri Apr 18 19:45:32 2014 +0200 @@ -0,0 +1,167 @@ +# -*- coding: utf-8 -*- + +""" +Module implementing Selection Encloser configuration page. +""" + +from __future__ import unicode_literals # __IGNORE_WARNING__ + +import os + +from PyQt4.QtCore import pyqtSlot, Qt +from PyQt4.QtGui import QTreeWidgetItem, QInputDialog, QLineEdit + +from Preferences.ConfigurationPages.ConfigurationPageBase import \ + ConfigurationPageBase +from .Ui_SelectionEncloserPage import Ui_SelectionEncloserPage + +import UI.PixmapCache + + +class SelectionEncloserPage(ConfigurationPageBase, Ui_SelectionEncloserPage): + """ + Class implementing Selection Encloser configuration page. + """ + def __init__(self, plugin): + """ + Constructor + + @param plugin reference to the plugin object + """ + super(SelectionEncloserPage, self).__init__() + self.setupUi(self) + self.setObjectName("SelectionEncloserPage") + + self.addButton.setIcon(UI.PixmapCache.getIcon("plus.png")) + self.deleteButton.setIcon(UI.PixmapCache.getIcon("minus.png")) + self.upButton.setIcon(UI.PixmapCache.getIcon("1uparrow.png")) + self.downButton.setIcon(UI.PixmapCache.getIcon("1downarrow.png")) + self.addMenuButton.setIcon(UI.PixmapCache.getIcon( + os.path.join("SelectionEncloser", "icons", "topAdd.png"))) + + self.addButton.setEnabled(False) + self.deleteButton.setEnabled(False) + self.upButton.setEnabled(False) + self.downButton.setEnabled(False) + + self.__plugin = plugin + + # set initial values + hierarchy = self.__plugin.getPreferences("MenuHierarchy") + for menuTitle, entries in hierarchy: + top = QTreeWidgetItem(self.menuTree, [menuTitle]) + top.setFlags(top.flags() | Qt.ItemIsEditable) + for entry in entries: + itm = QTreeWidgetItem(top, [entry]) + itm.setFlags(itm.flags() | Qt.ItemIsEditable) + top.setExpanded(True) + + def save(self): + """ + Public slot to save the Selection Encloser configuration. + """ + hierarchy = [] + for topIndex in range(self.menuTree.topLevelItemCount()): + topItem = self.menuTree.topLevelItem(topIndex) + topEntry = [topItem.text(0), []] + for index in range(topItem.childCount()): + itm = topItem.child(index) + topEntry[1].append(itm.text(0)) + hierarchy.append(topEntry) + self.__plugin.setPreferences("MenuHierarchy", hierarchy) + + @pyqtSlot() + def on_addMenuButton_clicked(self): + """ + Private slot to add a top level menu item. + """ + menuTitle, ok = QInputDialog.getText( + self, + self.tr("Menu Title"), + self.tr("Enter menu title:"), + QLineEdit.Normal) + if ok and menuTitle: + top = QTreeWidgetItem(self.menuTree, [menuTitle]) + top.setFlags(top.flags() | Qt.ItemIsEditable) + top.setExpanded(True) + + @pyqtSlot() + def on_addButton_clicked(self): + """ + Private slot to add a menu entry. + """ + entry, ok = QInputDialog.getText( + self, + self.tr("Menu Entry"), + self.tr("Enter menu entry text:"), + QLineEdit.Normal) + if ok and entry: + itm = QTreeWidgetItem(self.menuTree.selectedItems()[0], [entry]) + itm.setFlags(itm.flags() | Qt.ItemIsEditable) + + @pyqtSlot() + def on_deleteButton_clicked(self): + """ + Private slot to delete the selected entry. + """ + itm = self.menuTree.selectedItems()[0] + parent = itm.parent() + if parent is None: + index = self.menuTree.indexOfTopLevelItem(itm) + self.menuTree.takeTopLevelItem(index) + else: + index = parent.indexOfChild(itm) + parent.takeChild(index) + del itm + + @pyqtSlot() + def on_upButton_clicked(self): + """ + Slot documentation goes here. + """ + # TODO: not implemented yet + raise NotImplementedError + + @pyqtSlot() + def on_downButton_clicked(self): + """ + Slot documentation goes here. + """ + # TODO: not implemented yet + raise NotImplementedError + + @pyqtSlot() + def on_menuTree_itemSelectionChanged(self): + """ + Private slot handling the selection of an item. + """ + if len(self.menuTree.selectedItems()) == 0: + self.addButton.setEnabled(False) + self.deleteButton.setEnabled(False) + self.upButton.setEnabled(False) + self.downButton.setEnabled(False) + else: + addEnable = True + upEnable = True + downEnable = True + itm = self.menuTree.selectedItems()[0] + parent = itm.parent() + if parent is None: + # top level item + if self.menuTree.indexOfTopLevelItem(itm) == 0: + upEnable = False + if self.menuTree.indexOfTopLevelItem(itm) == \ + self.menuTree.topLevelItemCount() - 1: + downEnable = False + else: + # sub item + if parent.indexOfChild(itm) == 0: + upEnable = False + if parent.indexOfChild(itm) == \ + parent.childCount() - 1: + downEnable = False + addEnable = False + self.addButton.setEnabled(addEnable) + self.deleteButton.setEnabled(True) + self.upButton.setEnabled(upEnable) + self.downButton.setEnabled(downEnable)