RadonMetrics/CyclomaticComplexityDialog.py

changeset 24
edaf153da771
parent 21
fe094e33a295
child 29
2fcc4e8791c8
--- a/RadonMetrics/CyclomaticComplexityDialog.py	Sat Sep 26 12:26:32 2015 +0200
+++ b/RadonMetrics/CyclomaticComplexityDialog.py	Sat Sep 26 18:55:13 2015 +0200
@@ -60,6 +60,10 @@
         
         self.resultList.headerItem().setText(self.resultList.columnCount(), "")
         
+        self.rankComboBox.addItems(["A", "B", "C", "D", "E", "F"])
+        self.rankComboBox.setCurrentText("D")
+        self.__minimumRank = "D"
+        
         self.radonService = radonService
         self.radonService.complexityDone.connect(self.__processResult)
         self.radonService.error.connect(self.__processError)
@@ -145,10 +149,7 @@
         @rtype QTreeWidgetItem
         """
         itm = QTreeWidgetItem(
-            self.resultList,
             [self.__project.getRelativePath(filename)])
-        itm.setExpanded(True)
-        itm.setFirstColumnSpanned(True)
         itm.setData(0, self.FilePathRole, filename)
         itm.setData(0, self.LineNumberRole, 1)
         return itm
@@ -162,33 +163,32 @@
         @param values values to be displayed
         @type dict
         """
-        itm = QTreeWidgetItem(parentItem, [
-            self.__mappedType[values["type"]],
-            values["fullname"],
-            "{0:3}".format(values["complexity"]),
-            values["rank"],
-            "{0:6}".format(values["lineno"]),
-        ])
-        itm.setTextAlignment(2, Qt.Alignment(Qt.AlignRight))
-        itm.setTextAlignment(3, Qt.Alignment(Qt.AlignHCenter))
-        itm.setTextAlignment(4, Qt.Alignment(Qt.AlignRight))
-        if values["rank"] in self.__rankColors:
-            itm.setBackground(3, self.__rankColors[values["rank"]])
-        if values["type"] in self.__typeColors:
-            itm.setForeground(0, self.__typeColors[values["type"]])
-        itm.setData(0, self.FilePathRole,
-                    parentItem.data(0, self.FilePathRole))
-        itm.setData(0, self.LineNumberRole, values["lineno"])
+        if values["rank"] >= self.__minimumRank:
+            itm = QTreeWidgetItem(parentItem, [
+                self.__mappedType[values["type"]],
+                values["fullname"],
+                "{0:3}".format(values["complexity"]),
+                values["rank"],
+                "{0:6}".format(values["lineno"]),
+            ])
+            itm.setTextAlignment(2, Qt.Alignment(Qt.AlignRight))
+            itm.setTextAlignment(3, Qt.Alignment(Qt.AlignHCenter))
+            itm.setTextAlignment(4, Qt.Alignment(Qt.AlignRight))
+            if values["rank"] in self.__rankColors:
+                itm.setBackground(3, self.__rankColors[values["rank"]])
+            if values["type"] in self.__typeColors:
+                itm.setForeground(0, self.__typeColors[values["type"]])
+            itm.setData(0, self.FilePathRole,
+                        parentItem.data(0, self.FilePathRole))
+            itm.setData(0, self.LineNumberRole, values["lineno"])
         
         if "methods" in values:
-            itm.setExpanded(True)
             for method in values["methods"]:
-                self.__createResultItem(itm, method)
+                self.__createResultItem(parentItem, method)
         
         if "closures" in values and values["closures"]:
-            itm.setExpanded(True)
             for closure in values["closures"]:
-                self.__createResultItem(itm, closure)
+                self.__createResultItem(parentItem, closure)
     
     def __createErrorItem(self, filename, message):
         """
@@ -236,13 +236,15 @@
             self.__data = {"ExcludeFiles": ""}
         self.excludeFilesEdit.setText(self.__data["ExcludeFiles"])
     
-    def start(self, fn):
+    def start(self, fn, minRank="D"):
         """
         Public slot to start the cyclomatic complexity determination.
         
         @param fn file or list of files or directory to show
             the cyclomatic complexity for
         @type str or list of str
+        @param minRank minimum rank of entries to be shown
+        @type str (one character out of A - F)
         """
         self.__errorItem = None
         self.resultList.clear()
@@ -283,6 +285,8 @@
         self.__ccSum = 0
         self.__ccCount = 0
         
+        self.__minimumRank = minRank
+        
         if len(self.files) > 0:
             # disable updates of the list for speed
             self.resultList.setUpdatesEnabled(False)
@@ -419,6 +423,9 @@
         if not self.__batch and fn != self.filename:
             return
         
+        self.checkProgressLabel.setPath(self.__project.getRelativePath(fn))
+        QApplication.processEvents()
+        
         if "error" in result:
             self.__createErrorItem(fn, result["error"])
         else:
@@ -426,6 +433,10 @@
                 fitm = self.__createFileItem(fn)
                 for resultDict in result["result"]:
                     self.__createResultItem(fitm, resultDict)
+                if fitm.childCount() > 0:
+                    self.resultList.addTopLevelItem(fitm)
+                    fitm.setExpanded(True)
+                    fitm.setFirstColumnSpanned(True)
         
             self.__ccCount += result["count"]
             self.__ccSum += result["total_cc"]
@@ -435,7 +446,6 @@
         self.progress += 1
         
         self.checkProgress.setValue(self.progress)
-        self.checkProgressLabel.setPath(self.__project.getRelativePath(fn))
         QApplication.processEvents()
         
         if not self.__batch:
@@ -536,7 +546,7 @@
                 fileList = \
                     [f for f in fileList if not fnmatch.fnmatch(f, filter)]
         
-        self.start(fileList)
+        self.start(fileList, minRank=self.rankComboBox.currentText())
     
     def __showContextMenu(self, coord):
         """

eric ide

mercurial