--- 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)