src/eric7/WebBrowser/WebBrowserJavaScriptConsole.py

branch
eric7
changeset 9209
b99e7fd55fd3
parent 8881
54e42bc2437a
child 9221
bf71ee032bb4
equal deleted inserted replaced
9208:3fc8dfeb6ebe 9209:b99e7fd55fd3
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2016 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a JavaScript console widget.
8 """
9
10 from PyQt6.QtCore import Qt
11 from PyQt6.QtGui import QTextCursor
12 from PyQt6.QtWidgets import QTextEdit, QMenu
13 from PyQt6.QtWebEngineCore import QWebEnginePage
14
15
16 class WebBrowserJavaScriptConsole(QTextEdit):
17 """
18 Class implementing a JavaScript console widget.
19 """
20 def __init__(self, parent=None):
21 """
22 Constructor
23
24 @param parent reference to the parent widget (QWidget)
25 """
26 super().__init__(parent)
27 self.setAcceptRichText(False)
28 self.setLineWrapMode(QTextEdit.LineWrapMode.NoWrap)
29 self.setReadOnly(True)
30
31 # create the context menu
32 self.__menu = QMenu(self)
33 self.__menu.addAction(self.tr('Clear'), self.clear)
34 self.__menu.addAction(self.tr('Copy'), self.copy)
35 self.__menu.addSeparator()
36 self.__menu.addAction(self.tr('Select All'), self.selectAll)
37
38 self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
39 self.customContextMenuRequested.connect(self.__handleShowContextMenu)
40
41 self.__levelStrings = {
42 QWebEnginePage.JavaScriptConsoleMessageLevel.InfoMessageLevel:
43 self.tr("Info"),
44 QWebEnginePage.JavaScriptConsoleMessageLevel.WarningMessageLevel:
45 self.tr("Warning"),
46 QWebEnginePage.JavaScriptConsoleMessageLevel.ErrorMessageLevel:
47 self.tr("Error"),
48 }
49
50 def __handleShowContextMenu(self, coord):
51 """
52 Private slot to show the context menu.
53
54 @param coord the position of the mouse pointer (QPoint)
55 """
56 coord = self.mapToGlobal(coord)
57 self.__menu.popup(coord)
58
59 def __appendText(self, txt):
60 """
61 Private method to append text to the end.
62
63 @param txt text to insert (string)
64 """
65 tc = self.textCursor()
66 tc.movePosition(QTextCursor.MoveOperation.End)
67 self.setTextCursor(tc)
68 self.insertPlainText(txt)
69 self.ensureCursorVisible()
70
71 def keyPressEvent(self, evt):
72 """
73 Protected method handling key press events.
74
75 @param evt key press event (QKeyEvent)
76 """
77 if evt.modifiers() == Qt.KeyboardModifier.ControlModifier:
78 if evt.key() == Qt.Key.Key_C:
79 self.copy()
80 evt.accept()
81 return
82 elif evt.key() == Qt.Key.Key_A:
83 self.selectAll()
84 evt.accept()
85 return
86
87 def javaScriptConsoleMessage(self, level, message, lineNumber, sourceId):
88 """
89 Public method to show a console message.
90
91 @param level severity
92 @type QWebEnginePage.JavaScriptConsoleMessageLevel
93 @param message message to be shown
94 @type str
95 @param lineNumber line number of an error
96 @type int
97 @param sourceId source URL causing the error
98 @type str
99 """
100 txt = self.tr("[{0}] {1}").format(
101 self.__levelStrings[level], message)
102 self.__appendText(txt)
103
104 if lineNumber:
105 self.__appendText(self.tr(" at line {0}\n").format(lineNumber))
106 else:
107 self.__appendText("\n")
108
109 if sourceId:
110 self.__appendText(self.tr("URL: {0}\n").format(sourceId))

eric ide

mercurial