src/eric7/Testing/TestResultsTree.py

branch
eric7
changeset 10404
f7d9c31f0c38
parent 10069
435cc5875135
child 10405
df7e1694d0eb
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)

eric ide

mercurial