PyLint/PyLintExecDialog.py

changeset 11
a8e908641c20
parent 10
398979610d9b
child 15
0fc414663bd9
--- a/PyLint/PyLintExecDialog.py	Wed Nov 07 16:46:31 2012 +0100
+++ b/PyLint/PyLintExecDialog.py	Wed Nov 07 17:41:54 2012 +0100
@@ -29,6 +29,8 @@
     This class starts a QProcess and displays a dialog that
     shows the results of the PyLint command process.
     """
+    filenameRole = Qt.UserRole + 1
+    
     def __init__(self, parent=None):
         """
         Constructor
@@ -131,6 +133,7 @@
         self.noResults = True
         
         self.buf = ""
+        self.__lastFileItem = None
         
         self.process.start(program, args)
         procStarted = self.process.waitForStarted()
@@ -239,10 +242,25 @@
         @param type_ type of message (string)
         @param message message text (string)
         """
-        itm = QTreeWidgetItem(self.messageList, [
-            file, str(line), type_, message])
-        itm.setTextAlignment(1, Qt.AlignRight)
-        itm.setTextAlignment(2, Qt.AlignHCenter)
+        if self.__lastFileItem is None or self.__lastFileItem.text(0) != file:
+            matchFlags = Qt.MatchFixedString
+            if not Utilities.isWindowsPlatform():
+                matchFlags |= Qt.MatchCaseSensitive
+            
+            itmList = self.messageList.findItems(file, matchFlags)
+            if itmList:
+                self.__lastFileItem = itmList[0]
+            else:
+                # It's a new file
+                self.__lastFileItem = QTreeWidgetItem(self.messageList, [file])
+                self.__lastFileItem.setFirstColumnSpanned(True)
+                self.__lastFileItem.setExpanded(True)
+                self.__lastFileItem.setData(0, self.filenameRole, file)
+        
+        itm = QTreeWidgetItem(self.__lastFileItem, [str(line), type_, message])
+        itm.setTextAlignment(0, Qt.AlignRight)
+        itm.setTextAlignment(1, Qt.AlignHCenter)
+        itm.setData(0, self.filenameRole, file)
     
     def __readParseStdout(self):
         """
@@ -304,11 +322,25 @@
         if self.noResults:
             return
         
-        fn = os.path.join(self.pathname, itm.text(0))
-        lineno = int(itm.text(1))
-        
-        e5App().getObject("ViewManager").openSourceFile(fn, lineno)
-        # TODO: set warning markers
+        if itm.parent():
+            fn = os.path.join(self.pathname, itm.data(0, self.filenameRole))
+            lineno = int(itm.text(0))
+            
+            vm = e5App().getObject("ViewManager")
+            vm.openSourceFile(fn, lineno)
+            editor = vm.getOpenEditor(fn)
+            editor.toggleFlakesWarning(lineno, True,
+                "{0} | {1}".format(itm.text(1), itm.text(2)))
+        else:
+            fn = os.path.join(self.pathname, itm.data(0, self.filenameRole))
+            vm = e5App().getObject("ViewManager")
+            vm.openSourceFile(fn)
+            editor = vm.getOpenEditor(fn)
+            for index in range(itm.childCount()):
+                citm = itm.child(index)
+                lineno = int(citm.text(0))
+                editor.toggleFlakesWarning(lineno, True,
+                    "{0} | {1}".format(citm.text(1), citm.text(2)))
         
     def __writeReport(self):
         """

eric ide

mercurial