eric6/Preferences/ProgramsDialog.py

changeset 7426
dc171b1d8261
parent 7425
bd0eff406c6b
child 7451
f04328aef87a
diff -r bd0eff406c6b -r dc171b1d8261 eric6/Preferences/ProgramsDialog.py
--- a/eric6/Preferences/ProgramsDialog.py	Tue Feb 18 19:38:58 2020 +0100
+++ b/eric6/Preferences/ProgramsDialog.py	Wed Feb 19 19:38:36 2020 +0100
@@ -53,6 +53,12 @@
         self.searchButton.setToolTip(
             self.tr("Press to search for programs"))
         
+        self.showComboBox.addItems([
+            self.tr("All Supported Tools"),
+            self.tr("Available Tools Only"),
+            self.tr("Unavailable Tools Only"),
+        ])
+        
     def show(self):
         """
         Public slot to show the dialog.
@@ -336,8 +342,8 @@
                 )
         
         self.programsList.sortByColumn(0, Qt.AscendingOrder)
-        self.on_showUnavailableCheckBox_toggled(
-            self.showUnavailableCheckBox.isChecked())
+        self.on_showComboBox_currentIndexChanged(
+            self.showComboBox.currentIndex())
         QApplication.restoreOverrideCursor()
         
         self.__hasSearched = True
@@ -378,7 +384,6 @@
         font.setBold(True)
         itm.setFont(0, font)
         rememberedExe = exe
-        available = True
         if not exe:
             itm.setText(1, self.tr("(not configured)"))
         else:
@@ -388,6 +393,7 @@
             else:
                 exe = Utilities.getExecutablePath(exe)
             if exe:
+                available = True
                 if (
                     versionCommand and
                     (versionStartsWith != "" or
@@ -440,21 +446,21 @@
                         version = self.tr("(not executable)")
                         available = False
                 if exeModule:
-                    QTreeWidgetItem(itm, [
+                    citm = QTreeWidgetItem(itm, [
                         "{0} {1}".format(exe, " ".join(exeModule)),
                         version])
                 else:
-                    QTreeWidgetItem(itm, [exe, version])
+                    citm = QTreeWidgetItem(itm, [exe, version])
+                citm.setData(0, self.ToolAvailableRole, available)
                 itm.setExpanded(True)
             else:
                 if itm.childCount() == 0:
                     itm.setText(1, self.tr("(not found)"))
                 else:
-                    QTreeWidgetItem(itm, [rememberedExe,
-                                          self.tr("(not found)")])
+                    citm = QTreeWidgetItem(
+                        itm, [rememberedExe, self.tr("(not found)")])
+                    citm.setData(0, self.ToolAvailableRole, False)
                     itm.setExpanded(True)
-                available = False
-        itm.setData(0, self.ToolAvailableRole, available)
         QApplication.processEvents()
         self.programsList.header().resizeSections(QHeaderView.ResizeToContents)
         self.programsList.header().setStretchLastSection(True)
@@ -472,39 +478,52 @@
         font = itm.font(0)
         font.setBold(True)
         itm.setFont(0, font)
-        available = True
         
         if len(entryVersion):
-            QTreeWidgetItem(itm, [entryText, entryVersion])
+            citm = QTreeWidgetItem(itm, [entryText, entryVersion])
             itm.setExpanded(True)
-            if entryVersion.startswith("("):
-                # assume version starting with '(' is an unavailability
-                # indicator
-                available = False
+            citm.setData(0, self.ToolAvailableRole,
+                         not entryVersion.startswith("("))
+            # assume version starting with '(' is an unavailability
         else:
             itm.setText(1, self.tr("(not found)"))
-            available =  False
-        itm.setData(0, self.ToolAvailableRole, available)
         QApplication.processEvents()
         self.programsList.header().resizeSections(QHeaderView.ResizeToContents)
         self.programsList.header().setStretchLastSection(True)
     
-    @pyqtSlot(bool)
-    def on_showUnavailableCheckBox_toggled(self, checked):
+    @pyqtSlot(int)
+    def on_showComboBox_currentIndexChanged(self, index):
         """
-        Private slot show or hide entries belonging to unavailable but
-        supported tools.
+        Private slot to apply the selected show criteria.
         
-        @param checked state of the check box
-        @type bool
+        @param index index of the show criterium
+        @type int
         """
-        for index in range(self.programsList.topLevelItemCount()):
-            itm = self.programsList.topLevelItem(index)
-            itm.setHidden(not checked and
-                          not itm.data(0, self.ToolAvailableRole))
-# TODO: change filter to a selection combo with
-#       All Supported Tools
-#       Found Tools Only
-#       Unavailable Tools Only
-# TODO: add available flag to each child item and derive parent status from
-#       them
+        if index == 0:
+            # All Supported Tools
+            for topIndex in range(self.programsList.topLevelItemCount()):
+                topItem = self.programsList.topLevelItem(topIndex)
+                for childIndex in range(topItem.childCount()):
+                    topItem.child(childIndex).setHidden(False)
+                topItem.setHidden(False)
+        else:
+            # 1 = Available Tools Only
+            # 2 = Unavailable Tools Only
+            for topIndex in range(self.programsList.topLevelItemCount()):
+                topItem = self.programsList.topLevelItem(topIndex)
+                if topItem.childCount() == 0:
+                    topItem.setHidden(index == 1)
+                else:
+                    availabilityList = []
+                    for childIndex in range(topItem.childCount()):
+                        childItem = topItem.child(childIndex)
+                        available = childItem.data(0, self.ToolAvailableRole)
+                        if index == 1:
+                            childItem.setHidden(not available)
+                        else:
+                            childItem.setHidden(available)
+                        availabilityList.append(available)
+                    if index == 1:
+                        topItem.setHidden(not any(availabilityList))
+                    else:
+                        topItem.setHidden(all(availabilityList))

eric ide

mercurial