eric6/Preferences/ProgramsDialog.py

changeset 7425
bd0eff406c6b
parent 7360
9190402e4505
child 7426
dc171b1d8261
--- a/eric6/Preferences/ProgramsDialog.py	Mon Feb 17 19:20:43 2020 +0100
+++ b/eric6/Preferences/ProgramsDialog.py	Tue Feb 18 19:38:58 2020 +0100
@@ -30,6 +30,8 @@
     """
     Class implementing the Programs page.
     """
+    ToolAvailableRole = Qt.UserRole + 1
+    
     def __init__(self, parent=None):
         """
         Constructor
@@ -334,6 +336,8 @@
                 )
         
         self.programsList.sortByColumn(0, Qt.AscendingOrder)
+        self.on_showUnavailableCheckBox_toggled(
+            self.showUnavailableCheckBox.isChecked())
         QApplication.restoreOverrideCursor()
         
         self.__hasSearched = True
@@ -374,6 +378,7 @@
         font.setBold(True)
         itm.setFont(0, font)
         rememberedExe = exe
+        available = True
         if not exe:
             itm.setText(1, self.tr("(not configured)"))
         else:
@@ -409,6 +414,7 @@
                              proc.exitCode() != 0)
                         ):
                             version = self.tr("(module not found)")
+                            available = False
                         else:
                             if versionRe is None:
                                 versionRe = "^{0}".format(
@@ -426,10 +432,13 @@
                                         break
                                     except IndexError:
                                         version = self.tr("(unknown)")
+                                        available = False
                             else:
                                 version = self.tr("(unknown)")
+                                available = False
                     else:
                         version = self.tr("(not executable)")
+                        available = False
                 if exeModule:
                     QTreeWidgetItem(itm, [
                         "{0} {1}".format(exe, " ".join(exeModule)),
@@ -444,6 +453,8 @@
                     QTreeWidgetItem(itm, [rememberedExe,
                                           self.tr("(not found)")])
                     itm.setExpanded(True)
+                available = False
+        itm.setData(0, self.ToolAvailableRole, available)
         QApplication.processEvents()
         self.programsList.header().resizeSections(QHeaderView.ResizeToContents)
         self.programsList.header().setStretchLastSection(True)
@@ -461,12 +472,39 @@
         font = itm.font(0)
         font.setBold(True)
         itm.setFont(0, font)
+        available = True
         
         if len(entryVersion):
             QTreeWidgetItem(itm, [entryText, entryVersion])
             itm.setExpanded(True)
+            if entryVersion.startswith("("):
+                # assume version starting with '(' is an unavailability
+                # indicator
+                available = False
         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):
+        """
+        Private slot show or hide entries belonging to unavailable but
+        supported tools.
+        
+        @param checked state of the check box
+        @type bool
+        """
+        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

eric ide

mercurial