WebBrowser/WebBrowserJavaScriptConsole.py

branch
QtWebEngine
changeset 4822
f1b9899847dc
child 4823
cd467825a12d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebBrowser/WebBrowserJavaScriptConsole.py	Mon Mar 07 20:08:06 2016 +0100
@@ -0,0 +1,107 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2016 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a JavaScript console widget.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtCore import Qt
+from PyQt5.QtGui import QTextCursor
+from PyQt5.QtWidgets import QTextEdit, QMenu
+from PyQt5.QtWebEngineWidgets import QWebEnginePage
+
+
+class WebBrowserJavaScriptConsole(QTextEdit):
+    """
+    Class implementing a JavaScript console widget.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super(WebBrowserJavaScriptConsole, self).__init__(parent)
+        self.setAcceptRichText(False)
+        self.setLineWrapMode(QTextEdit.NoWrap)
+        self.setReadOnly(True)
+        
+        # create the context menu
+        self.__menu = QMenu(self)
+        self.__menu.addAction(self.tr('Clear'), self.clear)
+        self.__menu.addAction(self.tr('Copy'), self.copy)
+        self.__menu.addSeparator()
+        self.__menu.addAction(self.tr('Select All'), self.selectAll)
+        
+        self.setContextMenuPolicy(Qt.CustomContextMenu)
+        self.customContextMenuRequested.connect(self.__handleShowContextMenu)
+        
+        self.__levelStrings = {
+            QWebEnginePage.InfoMessageLevel: self.tr("Info"),
+            QWebEnginePage.WarningMessageLevel: self.tr("Warning"),
+            QWebEnginePage.ErrorMessageLevel: self.tr("Error"),
+        }
+    
+    def __handleShowContextMenu(self, coord):
+        """
+        Private slot to show the context menu.
+        
+        @param coord the position of the mouse pointer (QPoint)
+        """
+        coord = self.mapToGlobal(coord)
+        self.__menu.popup(coord)
+    
+    def __appendText(self, txt):
+        """
+        Private method to append text to the end.
+        
+        @param txt text to insert (string)
+        """
+        tc = self.textCursor()
+        tc.movePosition(QTextCursor.End)
+        self.setTextCursor(tc)
+        self.insertPlainText(txt)
+        self.ensureCursorVisible()
+    
+    def keyPressEvent(self, evt):
+        """
+        Protected method handling key press events.
+        
+        @param evt key press event (QKeyEvent)
+        """
+        if evt.modifiers() == Qt.ControlModifier:
+            if evt.key() == Qt.Key_C:
+                self.copy()
+                evt.accept()
+                return
+            elif evt.key() == Qt.Key_A:
+                self.selectAll()
+                evt.accept()
+                return
+    
+    def javaScriptConsoleMessage(self, level, message, lineNumber,  sourceId):
+        """
+        Public method to show a console message.
+        
+        @param level severity
+        @type QWebEnginePage.JavaScriptConsoleMessageLevel
+        @param message message to be shown
+        @type str
+        @param lineNumber line number of an error
+        @type int
+        @param sourceId source URL causing the error
+        @type str
+        """
+        txt = self.tr("[{0}] {1}\n").format(
+            self.__levelStrings[level], message)
+        self.__appendText(txt)
+        
+        if lineNumber:
+            self.__appendText(self.tr("at line {0}\n").format(lineNumber))
+        
+        if sourceId:
+            self.__appendText(self.tr("URL: {0}\n").format(sourceId))

eric ide

mercurial