Preferences/ConfigurationDialog.py

changeset 1964
6a6a53f2d086
parent 1791
3e946bfda98a
child 2100
fb16f4650860
--- a/Preferences/ConfigurationDialog.py	Sun Jul 29 15:41:58 2012 +0200
+++ b/Preferences/ConfigurationDialog.py	Sun Jul 29 17:26:28 2012 +0200
@@ -16,6 +16,8 @@
     QFrame, QMainWindow, QVBoxLayout, QTreeWidgetItem, QLabel
 
 from E5Gui.E5Application import e5App
+from E5Gui.E5LineEdit import E5LineEdit
+from E5Gui.E5LineEditButton import E5LineEditButton
 from E5Gui import E5MessageBox
 
 import QScintilla.Lexers
@@ -393,8 +395,24 @@
         self.configSplitter.setOrientation(Qt.Horizontal)
         self.configSplitter.setObjectName("configSplitter")
         
-        self.configList = QTreeWidget(self.configSplitter)
+        self.configListWidget = QWidget(self.configSplitter)
+        self.leftVBoxLayout = QVBoxLayout(self.configListWidget)
+        self.leftVBoxLayout.setMargin(0)
+        self.leftVBoxLayout.setSpacing(0)
+        self.leftVBoxLayout.setObjectName("leftVBoxLayout")
+        self.configListFilter = E5LineEdit(self, self.trUtf8("Enter filter text..."))
+        self.configListFilter.setObjectName("configListFilter")
+        self.leftVBoxLayout.addWidget(self.configListFilter)
+        self.configList = QTreeWidget()
         self.configList.setObjectName("configList")
+        self.leftVBoxLayout.addWidget(self.configList)
+        
+        self.__clearButton = E5LineEditButton(self)
+        self.__clearButton.setIcon(UI.PixmapCache.getIcon("clearLeft.png"))
+        self.configListFilter.addWidget(self.__clearButton, E5LineEdit.RightSide)
+        self.__clearButton.setVisible(False)
+        self.__clearButton.clicked[()].connect(self.configListFilter.clear)
+        self.configListFilter.textChanged.connect(self.__filterTextChanged)
         
         self.scrollArea = QScrollArea(self.configSplitter)
         self.scrollArea.setFrameShape(QFrame.NoFrame)
@@ -458,6 +476,40 @@
         self.setTabOrder(self.configList, self.configStack)
         
         self.configStack.setCurrentWidget(self.emptyPage)
+        
+        self.configList.setFocus()
+    
+    def __filterTextChanged(self, filter):
+        """
+        Private slot to handle a change of the filter.
+        
+        @param filter text of the filter line edit (string)
+        """
+        self.__clearButton.setVisible(filter != "")
+        
+        self.__filterChildItems(self.configList.invisibleRootItem(), filter)
+    
+    def __filterChildItems(self, parent, filter):
+        """
+        Private method to filter child items based on a filter string.
+        
+        @param parent reference to the parent item (QTreeWidgetItem)
+        @param filter filter string (string)
+        @return flag indicating a visible child item (boolean)
+        """
+        childVisible = False
+        filter = filter.lower()
+        for index in range(parent.childCount()):
+            itm = parent.child(index)
+            if itm.childCount() > 0:
+                visible = self.__filterChildItems(itm, filter)
+            else:
+                visible = filter == "" or filter in itm.text(0).lower()
+            if visible:
+                childVisible = True
+            itm.setHidden(not visible)
+        
+        return childVisible
     
     def __initLexers(self):
         """

eric ide

mercurial