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