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