diff -r ea3320d5e8e9 -r f7d9c31f0c38 src/eric7/Testing/TestResultsTree.py --- a/src/eric7/Testing/TestResultsTree.py Tue Dec 12 09:35:39 2023 +0100 +++ b/src/eric7/Testing/TestResultsTree.py Tue Dec 12 16:43:51 2023 +0100 @@ -20,6 +20,7 @@ QCoreApplication, QModelIndex, QPoint, + QSortFilterProxyModel, Qt, pyqtSignal, pyqtSlot, @@ -422,6 +423,60 @@ counts[TestResultCategory.PENDING], ) + def getStatusFilterList(self): + """ + Public method to get a list of the unique test result status. + + @return test result status + @rtype set of str + """ + return {t.status for t in self.__testResults} + + +class TestResultsFilterModel(QSortFilterProxyModel): + """ + Class implementing a filter model to filter the test results by status. + """ + + def __init__(self, parent=None): + """ + Constructor + + @param parent reference to the parent object (QObject) + """ + super().__init__(parent) + + self.__statusFilterString = "" + + def filterAcceptsRow(self, sourceRow, sourceParent): + """ + Public method to determine, if the row is acceptable. + + @param sourceRow row number in the source model + @type int + @param sourceParent index of the source item + @type QModelIndex + @return flag indicating acceptance + @rtype bool + """ + sm = self.sourceModel() + idx = sm.index(sourceRow, 0, sourceParent) + status = sm.data(idx, Qt.ItemDataRole.DisplayRole) + return ( + sourceParent.isValid() + or self.__statusFilterString == "" + or status == self.__statusFilterString + ) + + def setStatusFilterString(self, filterString): + """ + Public method to set the status filter string. + + @param filterString status filter string + @type str + """ + self.__statusFilterString = filterString + self.invalidateRowsFilter() class TestResultsTreeView(QTreeView): """ @@ -452,7 +507,7 @@ self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) # connect signals and slots - self.doubleClicked.connect(self.__gotoTestDefinition) + self.activated.connect(self.__gotoTestDefinition) self.customContextMenuRequested.connect(self.__showContextMenu) self.header().sortIndicatorChanged.connect(self.sortByColumn) @@ -559,7 +614,7 @@ """ cindex = self.__canonicalIndex(index) filename, lineno = self.model().data(cindex, Qt.ItemDataRole.UserRole) - if filename is not None: + if filename: if lineno is None: lineno = 1 self.goto.emit(filename, lineno)