VultureChecker/VultureCheckerDialog.py

branch
eric7
changeset 108
b6622920a278
parent 106
d3ef69537ed1
child 121
9b0f92e34a3f
--- a/VultureChecker/VultureCheckerDialog.py	Sat Dec 23 16:08:42 2023 +0100
+++ b/VultureChecker/VultureCheckerDialog.py	Mon Apr 22 16:13:31 2024 +0200
@@ -132,6 +132,8 @@
             "import": self.tr("Import"),
         }
 
+        self.__allTypesFilter = self.tr("All Types")
+
     def __createErrorItem(self, filename, message):
         """
         Private slot to create a new error item in the result list.
@@ -206,6 +208,7 @@
         self.cancelled = False
         self.__errorItem = None
         self.resultList.clear()
+        self.typeFilterComboBox.clear()
 
         self.buttonBox.button(QDialogButtonBox.StandardButton.Close).setEnabled(False)
         self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel).setEnabled(True)
@@ -645,6 +648,8 @@
         """
         Private method to populate the list with the analysis result.
         """
+        typeFilters = set()
+
         lastFileItem = None
         lastFileName = ""
         items = (
@@ -663,6 +668,18 @@
 
             self.__createResultItem(lastFileItem, item)
 
+            # add to type filters if not already present
+            try:
+                translatedType = self.__translatedTypes[item.typ]
+            except KeyError:
+                translatedType = item.typ
+            typeFilters.add(translatedType)
+
+        blocked = self.typeFilterComboBox.blockSignals(True)
+        self.typeFilterComboBox.addItem(self.__allTypesFilter)
+        self.typeFilterComboBox.addItems(sorted(typeFilters))
+        self.typeFilterComboBox.blockSignals(blocked)
+
     def __createResultItem(self, parent, item):
         """
         Private method to create a result item.
@@ -795,3 +812,32 @@
 
         if changed:
             self.__project.setData("CHECKERSPARMS", "Vulture", self.__data)
+
+    @pyqtSlot(str)
+    def on_typeFilterComboBox_currentTextChanged(self, typeFilter):
+        """
+        Private slot to handle the selection of a type filter.
+
+        @param typeFilter type of the selected filter entry
+        @type str
+        """
+        if typeFilter == self.__allTypesFilter:
+            for row in range(self.resultList.topLevelItemCount()):
+                fileItem = self.resultList.topLevelItem(row)
+                fileItem.setHidden(False)
+                for result in range(fileItem.childCount()):
+                    resultItem = fileItem.child(result)
+                    resultItem.setHidden(False)
+
+        else:
+            for row in range(self.resultList.topLevelItemCount()):
+                fileItem = self.resultList.topLevelItem(row)
+                visibleResults = 0
+                for result in range(fileItem.childCount()):
+                    resultItem = fileItem.child(result)
+                    if resultItem.text(3) == typeFilter:
+                        visibleResults += 1
+                        resultItem.setHidden(False)
+                    else:
+                        resultItem.setHidden(True)
+                fileItem.setHidden(visibleResults == 0)

eric ide

mercurial