Added a message filter to the log viewer.

Sun, 01 Feb 2015 19:52:38 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 01 Feb 2015 19:52:38 +0100
changeset 4083
4418377391bc
parent 4082
48d503f74963
child 4084
a99e36f846ae

Added a message filter to the log viewer.

Preferences/__init__.py file | annotate | diff | comparison | revisions
UI/LogView.py file | annotate | diff | comparison | revisions
UI/UserInterface.py file | annotate | diff | comparison | revisions
changelog file | annotate | diff | comparison | revisions
--- a/Preferences/__init__.py	Sun Feb 01 18:35:46 2015 +0100
+++ b/Preferences/__init__.py	Sun Feb 01 19:52:38 2015 +0100
@@ -129,6 +129,9 @@
         "BrowsersListHiddenFiles": False,
         "BrowsersFileFilters": "*.py[co];*.so;*.dll",
         "LogViewerAutoRaise": True,
+        "LogViewerStdoutFilter": [],
+        "LogViewerStderrFilter": [],
+        "LogViewerStdxxxFilter": [],
         "SingleApplicationMode": False,
         "CaptionShowsFilename": True,
         "CaptionFilenameLength": 100,
@@ -1554,6 +1557,10 @@
             return prefClass.uiDefaults[key]
         else:
             return urls
+    elif key in ["LogViewerStdoutFilter", "LogViewerStderrFilter",
+                 "LogViewerStdxxxFilter"]:
+        return toList(
+            prefClass.settings.value("UI/" + key, prefClass.uiDefaults[key]))
     else:
         return prefClass.settings.value("UI/" + key, prefClass.uiDefaults[key])
     
--- a/UI/LogView.py	Sun Feb 01 18:35:46 2015 +0100
+++ b/UI/LogView.py	Sun Feb 01 19:52:38 2015 +0100
@@ -24,16 +24,19 @@
     """
     Class implementing the containing widget for the log viewer.
     """
-    def __init__(self, parent=None):
+    def __init__(self, ui, parent=None):
         """
         Constructor
         
+        @param ui reference to the main window (UserInterface)
         @param parent reference to the parent widget (QWidget)
         """
         super(LogViewer, self).__init__(parent)
         
         self.setWindowIcon(UI.PixmapCache.getIcon("eric.png"))
         
+        self.__ui = ui
+        
         self.__logViewer = LogViewerEdit(self)
         from .SearchWidget import SearchWidget
         self.__searchWidget = SearchWidget(self.__logViewer, self)
@@ -55,7 +58,9 @@
         
         @param txt text to be appended (string)
         """
-        self.__logViewer.appendToStdout(txt)
+        added = self.__logViewer.appendToStdout(txt)
+        if added:
+            self.__ui.showLogViewer()
         
     def appendToStderr(self, txt):
         """
@@ -63,7 +68,9 @@
         
         @param txt text to be appended (string)
         """
-        self.__logViewer.appendToStderr(txt)
+        added = self.__logViewer.appendToStderr(txt)
+        if added:
+            self.__ui.showLogViewer()
         
     def preferencesChanged(self):
         """
@@ -87,6 +94,9 @@
     @signal searchStringFound(found) emitted to indicate the search result
         (boolean)
     """
+    # TODO: implement a filter for messages (separate for stdout and stderr,
+    #       maybe a combined one as well
+    # TODO: add an entry to the config dialog for the filters
     searchStringFound = pyqtSignal(bool)
     
     def __init__(self, parent=None):
@@ -122,6 +132,10 @@
         self.cErrorFormat.setForeground(
             QBrush(Preferences.getUI("LogStdErrColour")))
         
+        self.__stdoutFilter = Preferences.getUI("LogViewerStdoutFilter")
+        self.__stderrFilter = Preferences.getUI("LogViewerStderrFilter")
+        self.__stdxxxFilter = Preferences.getUI("LogViewerStdxxxFilter")
+        
     def __handleShowContextMenu(self, coord):
         """
         Private slot to show the context menu.
@@ -131,40 +145,70 @@
         coord = self.mapToGlobal(coord)
         self.__menu.popup(coord)
         
-    def __appendText(self, txt, error=False):
+    def __appendText(self, txt, isErrorMessage=False):
         """
         Private method to append text to the end.
         
         @param txt text to insert (string)
-        @param error flag indicating to insert error text (boolean)
+        @param isErrorMessage flag indicating to insert error text (boolean)
         """
         tc = self.textCursor()
         tc.movePosition(QTextCursor.End)
         self.setTextCursor(tc)
-        if error:
+        if isErrorMessage:
             self.setCurrentCharFormat(self.cErrorFormat)
         else:
             self.setCurrentCharFormat(self.cNormalFormat)
         self.insertPlainText(txt)
         self.ensureCursorVisible()
         
+    def __filterMessage(self, message, isErrorMessage=False):
+        """
+        Private method to filter messages.
+        
+        @param message message to be checked (string)
+        @param isErrorMessage flag indicating to check an error message
+            (boolean)
+        @return flag indicating that the message should be filtered out
+            (boolean)
+        """
+        if isErrorMessage:
+            filters = self.__stderrFilter + self.__stdxxxFilter
+        else:
+            filters = self.__stdoutFilter + self.__stdxxxFilter
+        for filter in filters:
+            if filter in message:
+                return True
+        
+        return False
+        
     def appendToStdout(self, txt):
         """
         Public slot to appand text to the "stdout" tab.
         
         @param txt text to be appended (string)
+        @return flag indicating text was appended (boolean)
         """
-        self.__appendText(txt, error=False)
+        if self.__filterMessage(txt, isErrorMessage=False):
+            return False
+        
+        self.__appendText(txt, isErrorMessage=False)
         QApplication.processEvents()
+        return True
         
     def appendToStderr(self, txt):
         """
         Public slot to appand text to the "stderr" tab.
         
         @param txt text to be appended (string)
+        @return flag indicating text was appended (boolean)
         """
-        self.__appendText(txt, error=True)
+        if self.__filterMessage(txt, isErrorMessage=True):
+            return False
+        
+        self.__appendText(txt, isErrorMessage=True)
         QApplication.processEvents()
+        return True
         
     def preferencesChanged(self):
         """
@@ -173,6 +217,10 @@
         self.cErrorFormat.setForeground(
             QBrush(Preferences.getUI("LogStdErrColour")))
         
+        self.__stdoutFilter = Preferences.getUI("LogViewerStdoutFilter")
+        self.__stderrFilter = Preferences.getUI("LogViewerStderrFilter")
+        self.__stdxxxFilter = Preferences.getUI("LogViewerStdxxxFilter")
+        
     def __configure(self):
         """
         Private method to open the configuration dialog.
--- a/UI/UserInterface.py	Sun Feb 01 18:35:46 2015 +0100
+++ b/UI/UserInterface.py	Sun Feb 01 19:52:38 2015 +0100
@@ -718,7 +718,7 @@
 
         # Create the log viewer part of the user interface
         from .LogView import LogViewer
-        self.logViewer = LogViewer()
+        self.logViewer = LogViewer(self)
         self.hToolbox.addItem(self.logViewer,
                               UI.PixmapCache.getIcon("logViewer.png"),
                               self.tr("Log-Viewer"))
@@ -848,7 +848,7 @@
         # Create the log viewer part of the user interface
         logging.debug("Creating Log Viewer...")
         from .LogView import LogViewer
-        self.logViewer = LogViewer()
+        self.logViewer = LogViewer(self)
         self.bottomSidebar.addTab(self.logViewer,
                                   UI.PixmapCache.getIcon("logViewer.png"),
                                   self.tr("Log-Viewer"))
@@ -981,11 +981,9 @@
                 if index != -1:
                     container.removeTab(index)
         
-    def showLogTab(self, tabname):
-        """
-        Public method to show a particular Log-Viewer tab.
-        
-        @param tabname string naming the tab to be shown (string)
+    def showLogViewer(self):
+        """
+        Public method to show the Log-Viewer.
         """
         if Preferences.getUI("LogViewerAutoRaise"):
             if self.layoutType == "Toolboxes":
@@ -5626,7 +5624,6 @@
         
         @param s output to be appended (string)
         """
-        self.showLogTab("stdout")
         self.appendStdout.emit(s)
     
     def appendToStderr(self, s):
@@ -5635,7 +5632,6 @@
         
         @param s output to be appended (string)
         """
-        self.showLogTab("stderr")
         self.appendStderr.emit(s)
     
     ##########################################################
--- a/changelog	Sun Feb 01 18:35:46 2015 +0100
+++ b/changelog	Sun Feb 01 19:52:38 2015 +0100
@@ -2,6 +2,8 @@
 ----------
 Version 6.1-snapshot-2015mmdd:
 - bug fixes
+- Log Viewer
+  -- added a message filter
 - Previewers
   -- added capability to use 'Sphinx' to preview ReST files
 - Task Viewer

eric ide

mercurial