7 Module implementing a specialized error message dialog. |
7 Module implementing a specialized error message dialog. |
8 """ |
8 """ |
9 |
9 |
10 from __future__ import unicode_literals |
10 from __future__ import unicode_literals |
11 |
11 |
12 from PyQt4.QtCore import qInstallMsgHandler, QCoreApplication, QtDebugMsg, \ |
12 from PyQt5.QtCore import qInstallMessageHandler, QCoreApplication, \ |
13 QtWarningMsg, QtCriticalMsg, QtFatalMsg, QThread, QMetaObject, Qt, Q_ARG, \ |
13 QtDebugMsg, QtWarningMsg, QtCriticalMsg, QtFatalMsg, QThread, \ |
14 QSettings |
14 QMetaObject, Qt, Q_ARG, QSettings |
15 from PyQt4.QtGui import QErrorMessage, qApp, QDialog |
15 from PyQt5.QtWidgets import QErrorMessage, qApp, QDialog |
16 |
16 |
17 import Globals |
17 import Globals |
18 import Utilities |
18 import Utilities |
19 |
19 |
20 |
20 |
85 if dlg.exec_() == QDialog.Accepted: |
85 if dlg.exec_() == QDialog.Accepted: |
86 filters = dlg.getFilters() |
86 filters = dlg.getFilters() |
87 self.settings.setValue("MessageFilters", filters) |
87 self.settings.setValue("MessageFilters", filters) |
88 |
88 |
89 |
89 |
90 def messageHandler(msgType, message): |
90 def messageHandler(msgType, context, message): |
91 """ |
91 """ |
92 Module function handling messages. |
92 Module function handling messages. |
93 |
93 |
94 @param msgType type of the message (integer, QtMsgType) |
94 @param msgType type of the message (integer, QtMsgType) |
95 @param message message to be shown (bytes) |
95 @param message message to be shown (bytes) |
111 if isinstance(message, bytes): |
111 if isinstance(message, bytes): |
112 message = message.decode() |
112 message = message.decode() |
113 message = message.replace("\r\n", "<br/>")\ |
113 message = message.replace("\r\n", "<br/>")\ |
114 .replace("\n", "<br/>")\ |
114 .replace("\n", "<br/>")\ |
115 .replace("\r", "<br/>") |
115 .replace("\r", "<br/>") |
116 msg = "<p><b>{0}</b></p><p>{1}</p>".format( |
116 msg = "<p><b>{0}</b></p><p>{1}</p><p>File: {2}</p>" \ |
117 messageType, Utilities.html_uencode(message)) |
117 "<p>Line: {3}</p><p>Function: {4}</p>".format( |
|
118 messageType, Utilities.html_uencode(message), |
|
119 context.file, context.line, context.function) |
118 if QThread.currentThread() == qApp.thread(): |
120 if QThread.currentThread() == qApp.thread(): |
119 __msgHandlerDialog.showMessage(msg) |
121 __msgHandlerDialog.showMessage(msg) |
120 else: |
122 else: |
121 QMetaObject.invokeMethod( |
123 QMetaObject.invokeMethod( |
122 __msgHandlerDialog, |
124 __msgHandlerDialog, |
142 elif msgType == QtFatalMsg: |
144 elif msgType == QtFatalMsg: |
143 messageType = QCoreApplication.translate( |
145 messageType = QCoreApplication.translate( |
144 "E5ErrorMessage", "Fatal Error") |
146 "E5ErrorMessage", "Fatal Error") |
145 if isinstance(message, bytes): |
147 if isinstance(message, bytes): |
146 message = message.decode() |
148 message = message.decode() |
147 print("{0}: {1}".format(messageType, message)) |
149 print("{0}: {1} in {2} at line {3} ({4})".format( |
|
150 messageType, message, context.file, context.line, context.function)) |
148 |
151 |
149 |
152 |
150 def qtHandler(): |
153 def qtHandler(): |
151 """ |
154 """ |
152 Module function to install an E5ErrorMessage dialog as the global |
155 Module function to install an E5ErrorMessage dialog as the global |
157 global __msgHandlerDialog, __origMsgHandler |
160 global __msgHandlerDialog, __origMsgHandler |
158 |
161 |
159 if __msgHandlerDialog is None: |
162 if __msgHandlerDialog is None: |
160 # Install an E5ErrorMessage dialog as the global message handler. |
163 # Install an E5ErrorMessage dialog as the global message handler. |
161 __msgHandlerDialog = E5ErrorMessage() |
164 __msgHandlerDialog = E5ErrorMessage() |
162 __origMsgHandler = qInstallMsgHandler(messageHandler) |
165 __origMsgHandler = qInstallMessageHandler(messageHandler) |
163 |
166 |
164 return __msgHandlerDialog |
167 return __msgHandlerDialog |
165 |
168 |
166 |
169 |
167 def editMessageFilters(): |
170 def editMessageFilters(): |