RadonMetrics/RawMetricsDialog.py

changeset 4
9ac53bf21182
parent 3
7150ed890fd5
child 5
db25d1d5cc3a
diff -r 7150ed890fd5 -r 9ac53bf21182 RadonMetrics/RawMetricsDialog.py
--- a/RadonMetrics/RawMetricsDialog.py	Mon Sep 14 20:18:39 2015 +0200
+++ b/RadonMetrics/RawMetricsDialog.py	Tue Sep 15 19:22:38 2015 +0200
@@ -20,10 +20,13 @@
 
 from .Ui_RawMetricsDialog import Ui_RawMetricsDialog
 
+from E5Gui.E5Application import e5App
+
 import Preferences
 import Utilities
 
-
+# TODO: add summary table
+# TODO: add column explanations
 class RawMetricsDialog(QDialog, Ui_RawMetricsDialog):
     """
     Class implementing a dialog to show raw code metrics.
@@ -53,6 +56,8 @@
         
         self.cancelled = False
         
+        self.__project = e5App().getObject("Project")
+        
         self.__menu = QMenu(self)
         self.__menu.addAction(self.tr("Collapse all"),
                               self.__resultCollapse)
@@ -62,7 +67,6 @@
             self.__showContextMenu)
         
         self.__fileList = []
-        self.__project = None
         self.filterFrame.setVisible(False)
     
     def __resizeResultColumns(self):
@@ -76,23 +80,40 @@
         """
         Private slot to create a new item in the result list.
         
-        @param parent parent of the new item
-        @type QTreeWidget or QTreeWidgetItem
+        @param filename name of the file
+        @type str
         @param values values to be displayed
-        @type list
-        @return the generated item
-        @rtype QTreeWidgetItem
+        @type dict
         """
-        data = [filename]
-        for value in values:
+        data = [self.__project.getRelativePath(filename)]
+        for key in ['loc', 'sloc', 'lloc', 'comments', 'multi', 'blank']:
             try:
-                data.append("{0:5}".format(int(value)))
+                data.append("{0:5}".format(int(values[key])))
             except ValueError:
-                data.append(value)
+                data.append(values[key])
+            except KeyError:
+                data.append("")
+        data.append("{0:3.0%}".format(
+            values["comments"] / (float(values["loc"]) or 1)))
+        data.append("{0:3.0%}".format(
+            values["comments"] / (float(values["sloc"]) or 1)))
+        data.append("{0:3.0%}".format(
+            (values["comments"] + values["multi"]) / 
+            (float(values["loc"]) or 1)))
         itm = QTreeWidgetItem(self.resultList, data)
-        for col in range(1, 6):
+        for col in range(1, 10):
             itm.setTextAlignment(col, Qt.Alignment(Qt.AlignRight))
-        return itm
+    
+    def __createErrorItem(self, filename, message):
+        """
+        Private slot to create a new error item in the result list.
+        
+        @param filename name of the file
+        @type str
+        @param message error message
+        @type str
+        """
+        # TODO: implement this
     
     def prepare(self, fileList, project):
         """
@@ -149,6 +170,10 @@
                 self.files.remove(f)
         
         if len(self.files) > 0:
+            # disable updates of the list for speed
+            self.resultList.setUpdatesEnabled(False)
+            self.resultList.setSortingEnabled(False)
+            
             self.checkProgress.setMaximum(len(self.files))
             self.checkProgress.setVisible(len(self.files) > 1)
             self.checkProgressLabel.setVisible(len(self.files) > 1)
@@ -157,7 +182,7 @@
             # now go through all the files
             self.progress = 0
             self.files.sort()
-            if len(self.files) == 1:
+            if len(self.files) == 1 or not self.radonService.hasBatch:
                 self.__batch = False
                 self.rawMetrics()
             else:
@@ -261,8 +286,8 @@
         
         @param fn filename of the file
         @type str
-        @param result result list
-        @type list
+        @param result result dict
+        @type dict
         """
         if self.__finished:
             return
@@ -272,7 +297,10 @@
         if not self.__batch and fn != self.filename:
             return
         
-        self.__createResultItem(fn, result)
+        if "error" in result:
+            self.__createErrorItem(fn, result["error"])
+        else:
+            self.__createResultItem(fn, result)
         
         self.progress += 1
         
@@ -290,6 +318,10 @@
         if not self.__finished:
             self.__finished = True
             
+            # reenable updates of the list
+            self.resultList.setSortingEnabled(True)
+            self.resultList.setUpdatesEnabled(True)
+            
             self.cancelled = True
             self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True)
             self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False)

eric ide

mercurial