eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCodeSelectionDialog.py

changeset 6942
2602857055c5
parent 6645
ad476851d7e0
child 7229
53054eb5b15a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCodeSelectionDialog.py	Sun Apr 14 15:09:21 2019 +0200
@@ -0,0 +1,88 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2011 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to select code style message codes.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtWidgets import QDialog, QTreeWidgetItem
+
+from .Ui_CodeStyleCodeSelectionDialog import Ui_CodeStyleCodeSelectionDialog
+
+import UI.PixmapCache
+
+
+class CodeStyleCodeSelectionDialog(QDialog, Ui_CodeStyleCodeSelectionDialog):
+    """
+    Class implementing a dialog to select code style message codes.
+    """
+    def __init__(self, codes, showFixCodes, parent=None):
+        """
+        Constructor
+        
+        @param codes comma separated list of selected codes (string)
+        @param showFixCodes flag indicating to show a list of fixable
+            issues (boolean)
+        @param parent reference to the parent widget (QWidget)
+        """
+        super(CodeStyleCodeSelectionDialog, self).__init__(parent)
+        self.setupUi(self)
+        
+        self.codeTable.headerItem().setText(self.codeTable.columnCount(), "")
+        codeList = [code.strip() for code in codes.split(",") if code.strip()]
+        
+        from .translations import _messages, _messages_sample_args
+        
+        if showFixCodes:
+            from .CodeStyleFixer import FixableCodeStyleIssues
+            selectableCodes = FixableCodeStyleIssues
+        else:
+            selectableCodes = [x for x in list(_messages.keys())
+                               if not x.startswith('F')]
+        for code in sorted(selectableCodes):
+            if code in _messages_sample_args:
+                message = _messages[code].format(*_messages_sample_args[code])
+            elif code in _messages:
+                message = _messages[code]
+            else:
+                continue
+            itm = QTreeWidgetItem(self.codeTable, [code, message])
+            if code.startswith(("W", "C", "M")):
+                itm.setIcon(0, UI.PixmapCache.getIcon("warning.png"))
+            elif code.startswith("E"):
+                itm.setIcon(0, UI.PixmapCache.getIcon("syntaxError.png"))
+            elif code.startswith("N"):
+                itm.setIcon(0, UI.PixmapCache.getIcon("namingError.png"))
+            elif code.startswith("D"):
+                itm.setIcon(0, UI.PixmapCache.getIcon("docstringError.png"))
+            itm.setFlags(itm.flags() | Qt.ItemIsUserCheckable)
+            if code in codeList:
+                itm.setCheckState(0, Qt.Checked)
+                codeList.remove(code)
+            else:
+                itm.setCheckState(0, Qt.Unchecked)
+        self.codeTable.resizeColumnToContents(0)
+        self.codeTable.resizeColumnToContents(1)
+        self.codeTable.header().setStretchLastSection(True)
+        
+        self.__extraCodes = codeList[:]
+    
+    def getSelectedCodes(self):
+        """
+        Public method to get a comma separated list of codes selected.
+        
+        @return comma separated list of selected codes (string)
+        """
+        selectedCodes = []
+        
+        for index in range(self.codeTable.topLevelItemCount()):
+            itm = self.codeTable.topLevelItem(index)
+            if itm.checkState(0) == Qt.Checked:
+                selectedCodes.append(itm.text(0))
+        
+        return ", ".join(self.__extraCodes + selectedCodes)

eric ide

mercurial