Sun, 01 Feb 2015 19:52:38 +0100
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) ##########################################################