eric6/WebBrowser/WebBrowserView.py

changeset 8143
2c730d5fd177
parent 7960
e8fc383322f7
child 8176
31965986ecd1
child 8218
7c09585bd960
equal deleted inserted replaced
8141:27f636beebad 8143:2c730d5fd177
135 self.__restoreData = None 135 self.__restoreData = None
136 136
137 if self.parentWidget() is not None: 137 if self.parentWidget() is not None:
138 self.parentWidget().installEventFilter(self) 138 self.parentWidget().installEventFilter(self)
139 139
140 self.grabGesture(Qt.PinchGesture) 140 self.grabGesture(Qt.GestureType.PinchGesture)
141 141
142 def __createNewPage(self): 142 def __createNewPage(self):
143 """ 143 """
144 Private method to create a new page object. 144 Private method to create a new page object.
145 """ 145 """
174 174
175 def __setRwhvqt(self): 175 def __setRwhvqt(self):
176 """ 176 """
177 Private slot to set widget that receives input events. 177 Private slot to set widget that receives input events.
178 """ 178 """
179 self.grabGesture(Qt.PinchGesture) 179 self.grabGesture(Qt.GestureType.PinchGesture)
180 self.__rwhvqt = self.focusProxy() 180 self.__rwhvqt = self.focusProxy()
181 if self.__rwhvqt: 181 if self.__rwhvqt:
182 self.__rwhvqt.grabGesture(Qt.PinchGesture) 182 self.__rwhvqt.grabGesture(Qt.GestureType.PinchGesture)
183 self.__rwhvqt.installEventFilter(self) 183 self.__rwhvqt.installEventFilter(self)
184 else: 184 else:
185 print("Focus proxy is null!") # __IGNORE_WARNING_M801__ 185 print("Focus proxy is null!") # __IGNORE_WARNING_M801__
186 186
187 def __currentEngineChanged(self): 187 def __currentEngineChanged(self):
218 @type QUrl 218 @type QUrl
219 """ 219 """
220 if ( 220 if (
221 self.__page is not None and 221 self.__page is not None and
222 not self.__page.acceptNavigationRequest( 222 not self.__page.acceptNavigationRequest(
223 url, QWebEnginePage.NavigationTypeTyped, True) 223 url, QWebEnginePage.NavigationType.NavigationTypeTyped, True)
224 ): 224 ):
225 return 225 return
226 226
227 super(WebBrowserView, self).load(url) 227 super(WebBrowserView, self).load(url)
228 228
328 328
329 def backward(self): 329 def backward(self):
330 """ 330 """
331 Public slot to move backwards in history. 331 Public slot to move backwards in history.
332 """ 332 """
333 self.triggerPageAction(QWebEnginePage.Back) 333 self.triggerPageAction(QWebEnginePage.WebAction.Back)
334 self.__urlChanged(self.history().currentItem().url()) 334 self.__urlChanged(self.history().currentItem().url())
335 335
336 def forward(self): 336 def forward(self):
337 """ 337 """
338 Public slot to move forward in history. 338 Public slot to move forward in history.
339 """ 339 """
340 self.triggerPageAction(QWebEnginePage.Forward) 340 self.triggerPageAction(QWebEnginePage.WebAction.Forward)
341 self.__urlChanged(self.history().currentItem().url()) 341 self.__urlChanged(self.history().currentItem().url())
342 342
343 def home(self): 343 def home(self):
344 """ 344 """
345 Public slot to move to the first page loaded. 345 Public slot to move to the first page loaded.
350 350
351 def reload(self): 351 def reload(self):
352 """ 352 """
353 Public slot to reload the current page. 353 Public slot to reload the current page.
354 """ 354 """
355 self.triggerPageAction(QWebEnginePage.Reload) 355 self.triggerPageAction(QWebEnginePage.WebAction.Reload)
356 356
357 def reloadBypassingCache(self): 357 def reloadBypassingCache(self):
358 """ 358 """
359 Public slot to reload the current page bypassing the cache. 359 Public slot to reload the current page bypassing the cache.
360 """ 360 """
361 self.triggerPageAction(QWebEnginePage.ReloadAndBypassCache) 361 self.triggerPageAction(QWebEnginePage.WebAction.ReloadAndBypassCache)
362 362
363 def copy(self): 363 def copy(self):
364 """ 364 """
365 Public slot to copy the selected text. 365 Public slot to copy the selected text.
366 """ 366 """
367 self.triggerPageAction(QWebEnginePage.Copy) 367 self.triggerPageAction(QWebEnginePage.WebAction.Copy)
368 368
369 def cut(self): 369 def cut(self):
370 """ 370 """
371 Public slot to cut the selected text. 371 Public slot to cut the selected text.
372 """ 372 """
373 self.triggerPageAction(QWebEnginePage.Cut) 373 self.triggerPageAction(QWebEnginePage.WebAction.Cut)
374 374
375 def paste(self): 375 def paste(self):
376 """ 376 """
377 Public slot to paste text from the clipboard. 377 Public slot to paste text from the clipboard.
378 """ 378 """
379 self.triggerPageAction(QWebEnginePage.Paste) 379 self.triggerPageAction(QWebEnginePage.WebAction.Paste)
380 380
381 def undo(self): 381 def undo(self):
382 """ 382 """
383 Public slot to undo the last edit action. 383 Public slot to undo the last edit action.
384 """ 384 """
385 self.triggerPageAction(QWebEnginePage.Undo) 385 self.triggerPageAction(QWebEnginePage.WebAction.Undo)
386 386
387 def redo(self): 387 def redo(self):
388 """ 388 """
389 Public slot to redo the last edit action. 389 Public slot to redo the last edit action.
390 """ 390 """
391 self.triggerPageAction(QWebEnginePage.Redo) 391 self.triggerPageAction(QWebEnginePage.WebAction.Redo)
392 392
393 def selectAll(self): 393 def selectAll(self):
394 """ 394 """
395 Public slot to select all text. 395 Public slot to select all text.
396 """ 396 """
397 self.triggerPageAction(QWebEnginePage.SelectAll) 397 self.triggerPageAction(QWebEnginePage.WebAction.SelectAll)
398 398
399 def unselect(self): 399 def unselect(self):
400 """ 400 """
401 Public slot to clear the current selection. 401 Public slot to clear the current selection.
402 """ 402 """
403 try: 403 try:
404 self.triggerPageAction(QWebEnginePage.Unselect) 404 self.triggerPageAction(QWebEnginePage.WebAction.Unselect)
405 except AttributeError: 405 except AttributeError:
406 # prior to 5.7.0 406 # prior to 5.7.0
407 self.page().runJavaScript( 407 self.page().runJavaScript(
408 "window.getSelection().empty()", 408 "window.getSelection().empty()",
409 WebBrowserPage.SafeJsWorld) 409 WebBrowserPage.SafeJsWorld)
517 @param callback reference to a function with a bool parameter 517 @param callback reference to a function with a bool parameter
518 @type function(bool) or None 518 @type function(bool) or None
519 """ 519 """
520 findFlags = QWebEnginePage.FindFlags() 520 findFlags = QWebEnginePage.FindFlags()
521 if case: 521 if case:
522 findFlags |= QWebEnginePage.FindCaseSensitively 522 findFlags |= QWebEnginePage.FindFlag.FindCaseSensitively
523 if backwards: 523 if backwards:
524 findFlags |= QWebEnginePage.FindBackward 524 findFlags |= QWebEnginePage.FindFlag.FindBackward
525 525
526 if callback is None: 526 if callback is None:
527 self.findText(txt, findFlags) 527 self.findText(txt, findFlags)
528 else: 528 else:
529 self.findText(txt, findFlags, callback) 529 self.findText(txt, findFlags, callback)
1174 1174
1175 def __downloadLink(self): 1175 def __downloadLink(self):
1176 """ 1176 """
1177 Private slot to download a link and save it to disk. 1177 Private slot to download a link and save it to disk.
1178 """ 1178 """
1179 self.triggerPageAction(QWebEnginePage.DownloadLinkToDisk) 1179 self.triggerPageAction(QWebEnginePage.WebAction.DownloadLinkToDisk)
1180 1180
1181 def __downloadImage(self): 1181 def __downloadImage(self):
1182 """ 1182 """
1183 Private slot to download an image and save it to disk. 1183 Private slot to download an image and save it to disk.
1184 """ 1184 """
1185 self.triggerPageAction(QWebEnginePage.DownloadImageToDisk) 1185 self.triggerPageAction(QWebEnginePage.WebAction.DownloadImageToDisk)
1186 1186
1187 def __copyImage(self): 1187 def __copyImage(self):
1188 """ 1188 """
1189 Private slot to copy an image to the clipboard. 1189 Private slot to copy an image to the clipboard.
1190 """ 1190 """
1191 self.triggerPageAction(QWebEnginePage.CopyImageToClipboard) 1191 self.triggerPageAction(QWebEnginePage.WebAction.CopyImageToClipboard)
1192 1192
1193 def __blockImage(self, act): 1193 def __blockImage(self, act):
1194 """ 1194 """
1195 Private slot to add a block rule for an image URL. 1195 Private slot to add a block rule for an image URL.
1196 1196
1213 1213
1214 def __downloadMedia(self): 1214 def __downloadMedia(self):
1215 """ 1215 """
1216 Private slot to download a media and save it to disk. 1216 Private slot to download a media and save it to disk.
1217 """ 1217 """
1218 self.triggerPageAction(QWebEnginePage.DownloadMediaToDisk) 1218 self.triggerPageAction(QWebEnginePage.WebAction.DownloadMediaToDisk)
1219 1219
1220 def __pauseMedia(self): 1220 def __pauseMedia(self):
1221 """ 1221 """
1222 Private slot to pause or play the selected media. 1222 Private slot to pause or play the selected media.
1223 """ 1223 """
1224 self.triggerPageAction(QWebEnginePage.ToggleMediaPlayPause) 1224 self.triggerPageAction(QWebEnginePage.WebAction.ToggleMediaPlayPause)
1225 1225
1226 def __muteMedia(self): 1226 def __muteMedia(self):
1227 """ 1227 """
1228 Private slot to (un)mute the selected media. 1228 Private slot to (un)mute the selected media.
1229 """ 1229 """
1230 self.triggerPageAction(QWebEnginePage.ToggleMediaMute) 1230 self.triggerPageAction(QWebEnginePage.WebAction.ToggleMediaMute)
1231 1231
1232 def __virusTotal(self, act): 1232 def __virusTotal(self, act):
1233 """ 1233 """
1234 Private slot to scan the selected URL with VirusTotal. 1234 Private slot to scan the selected URL with VirusTotal.
1235 1235
1372 """ 1372 """
1373 super(WebBrowserView, self).dropEvent(evt) 1373 super(WebBrowserView, self).dropEvent(evt)
1374 if ( 1374 if (
1375 not evt.isAccepted() and 1375 not evt.isAccepted() and
1376 evt.source() != self and 1376 evt.source() != self and
1377 evt.possibleActions() & Qt.CopyAction 1377 evt.possibleActions() & Qt.DropAction.CopyAction
1378 ): 1378 ):
1379 url = QUrl() 1379 url = QUrl()
1380 if len(evt.mimeData().urls()) > 0: 1380 if len(evt.mimeData().urls()) > 0:
1381 url = evt.mimeData().urls()[0] 1381 url = evt.mimeData().urls()[0]
1382 if not url.isValid(): 1382 if not url.isValid():
1396 return 1396 return
1397 1397
1398 self.__mw.setEventMouseButtons(evt.buttons()) 1398 self.__mw.setEventMouseButtons(evt.buttons())
1399 self.__mw.setEventKeyboardModifiers(evt.modifiers()) 1399 self.__mw.setEventKeyboardModifiers(evt.modifiers())
1400 1400
1401 if evt.button() == Qt.XButton1: 1401 if evt.button() == Qt.MouseButton.XButton1:
1402 self.pageAction(QWebEnginePage.Back).trigger() 1402 self.pageAction(QWebEnginePage.WebAction.Back).trigger()
1403 evt.accept() 1403 evt.accept()
1404 elif evt.button() == Qt.XButton2: 1404 elif evt.button() == Qt.MouseButton.XButton2:
1405 self.pageAction(QWebEnginePage.Forward).trigger() 1405 self.pageAction(QWebEnginePage.WebAction.Forward).trigger()
1406 evt.accept() 1406 evt.accept()
1407 1407
1408 def _mouseReleaseEvent(self, evt): 1408 def _mouseReleaseEvent(self, evt):
1409 """ 1409 """
1410 Protected method called by a mouse release event. 1410 Protected method called by a mouse release event.
1417 1417
1418 accepted = evt.isAccepted() 1418 accepted = evt.isAccepted()
1419 self.__page.event(evt) 1419 self.__page.event(evt)
1420 if ( 1420 if (
1421 not evt.isAccepted() and 1421 not evt.isAccepted() and
1422 self.__mw.eventMouseButtons() & Qt.MidButton 1422 self.__mw.eventMouseButtons() & Qt.MouseButton.MidButton
1423 ): 1423 ):
1424 url = QUrl(QApplication.clipboard().text(QClipboard.Selection)) 1424 url = QUrl(QApplication.clipboard().text(
1425 QClipboard.Mode.Selection))
1425 if ( 1426 if (
1426 not url.isEmpty() and 1427 not url.isEmpty() and
1427 url.isValid() and 1428 url.isValid() and
1428 url.scheme() != "" 1429 url.scheme() != ""
1429 ): 1430 ):
1430 self.__mw.setEventMouseButtons(Qt.NoButton) 1431 self.__mw.setEventMouseButtons(Qt.MouseButton.NoButton)
1431 self.__mw.setEventKeyboardModifiers(Qt.NoModifier) 1432 self.__mw.setEventKeyboardModifiers(
1433 Qt.KeyboardModifier.NoModifier)
1432 self.setSource(url) 1434 self.setSource(url)
1433 evt.setAccepted(accepted) 1435 evt.setAccepted(accepted)
1434 1436
1435 def _mouseMoveEvent(self, evt): 1437 def _mouseMoveEvent(self, evt):
1436 """ 1438 """
1457 if WebBrowserWindow.autoScroller().wheel(): 1459 if WebBrowserWindow.autoScroller().wheel():
1458 evt.accept() 1460 evt.accept()
1459 return 1461 return
1460 1462
1461 delta = evt.angleDelta().y() 1463 delta = evt.angleDelta().y()
1462 if evt.modifiers() & Qt.ControlModifier: 1464 if evt.modifiers() & Qt.KeyboardModifier.ControlModifier:
1463 if delta < 0: 1465 if delta < 0:
1464 self.zoomOut() 1466 self.zoomOut()
1465 elif delta > 0: 1467 elif delta > 0:
1466 self.zoomIn() 1468 self.zoomIn()
1467 evt.accept() 1469 evt.accept()
1468 1470
1469 elif evt.modifiers() & Qt.ShiftModifier: 1471 elif evt.modifiers() & Qt.KeyboardModifier.ShiftModifier:
1470 if delta < 0: 1472 if delta < 0:
1471 self.backward() 1473 self.backward()
1472 elif delta > 0: 1474 elif delta > 0:
1473 self.forward() 1475 self.forward()
1474 evt.accept() 1476 evt.accept()
1481 """ 1483 """
1482 if self.__mw.personalInformationManager().viewKeyPressEvent(self, evt): 1484 if self.__mw.personalInformationManager().viewKeyPressEvent(self, evt):
1483 evt.accept() 1485 evt.accept()
1484 return 1486 return
1485 1487
1486 if evt.key() == Qt.Key_ZoomIn: 1488 if evt.key() == Qt.Key.Key_ZoomIn:
1487 self.zoomIn() 1489 self.zoomIn()
1488 evt.accept() 1490 evt.accept()
1489 elif evt.key() == Qt.Key_ZoomOut: 1491 elif evt.key() == Qt.Key.Key_ZoomOut:
1490 self.zoomOut() 1492 self.zoomOut()
1491 evt.accept() 1493 evt.accept()
1492 elif evt.key() == Qt.Key_Plus: 1494 elif evt.key() == Qt.Key.Key_Plus:
1493 if evt.modifiers() & Qt.ControlModifier: 1495 if evt.modifiers() & Qt.KeyboardModifier.ControlModifier:
1494 self.zoomIn() 1496 self.zoomIn()
1495 evt.accept() 1497 evt.accept()
1496 elif evt.key() == Qt.Key_Minus: 1498 elif evt.key() == Qt.Key.Key_Minus:
1497 if evt.modifiers() & Qt.ControlModifier: 1499 if evt.modifiers() & Qt.KeyboardModifier.ControlModifier:
1498 self.zoomOut() 1500 self.zoomOut()
1499 evt.accept() 1501 evt.accept()
1500 elif evt.key() == Qt.Key_0: 1502 elif evt.key() == Qt.Key.Key_0:
1501 if evt.modifiers() & Qt.ControlModifier: 1503 if evt.modifiers() & Qt.KeyboardModifier.ControlModifier:
1502 self.zoomReset() 1504 self.zoomReset()
1503 evt.accept() 1505 evt.accept()
1504 elif evt.key() == Qt.Key_M: 1506 elif evt.key() == Qt.Key.Key_M:
1505 if evt.modifiers() & Qt.ControlModifier: 1507 if evt.modifiers() & Qt.KeyboardModifier.ControlModifier:
1506 self.__muteMedia() 1508 self.__muteMedia()
1507 evt.accept() 1509 evt.accept()
1508 elif evt.key() == Qt.Key_Backspace: 1510 elif evt.key() == Qt.Key.Key_Backspace:
1509 pos = QCursor.pos() 1511 pos = QCursor.pos()
1510 pos = self.mapFromGlobal(pos) 1512 pos = self.mapFromGlobal(pos)
1511 hitTest = self.page().hitTestContent(pos) 1513 hitTest = self.page().hitTestContent(pos)
1512 if not hitTest.isContentEditable(): 1514 if not hitTest.isContentEditable():
1513 self.pageAction(QWebEnginePage.Back).trigger() 1515 self.pageAction(QWebEnginePage.WebAction.Back).trigger()
1514 evt.accept() 1516 evt.accept()
1515 1517
1516 def _keyReleaseEvent(self, evt): 1518 def _keyReleaseEvent(self, evt):
1517 """ 1519 """
1518 Protected method called by a key release. 1520 Protected method called by a key release.
1519 1521
1520 @param evt reference to the key event (QKeyEvent) 1522 @param evt reference to the key event (QKeyEvent)
1521 """ 1523 """
1522 if evt.key() == Qt.Key_Escape: 1524 if evt.key() == Qt.Key.Key_Escape:
1523 if self.isFullScreen(): 1525 if self.isFullScreen():
1524 self.triggerPageAction(QWebEnginePage.ExitFullScreen) 1526 self.triggerPageAction(QWebEnginePage.WebAction.ExitFullScreen)
1525 evt.accept() 1527 evt.accept()
1526 self.requestFullScreen(False) 1528 self.requestFullScreen(False)
1527 1529
1528 def _gestureEvent(self, evt): 1530 def _gestureEvent(self, evt):
1529 """ 1531 """
1530 Protected method handling gesture events. 1532 Protected method handling gesture events.
1531 1533
1532 @param evt reference to the gesture event (QGestureEvent 1534 @param evt reference to the gesture event (QGestureEvent
1533 """ 1535 """
1534 pinch = evt.gesture(Qt.PinchGesture) 1536 pinch = evt.gesture(Qt.GestureType.PinchGesture)
1535 if pinch: 1537 if pinch:
1536 if pinch.state() == Qt.GestureStarted: 1538 if pinch.state() == Qt.GestureState.GestureStarted:
1537 pinch.setTotalScaleFactor(self.__currentZoom / 100.0) 1539 pinch.setTotalScaleFactor(self.__currentZoom / 100.0)
1538 elif pinch.state() == Qt.GestureUpdated: 1540 elif pinch.state() == Qt.GestureState.GestureUpdated:
1539 scaleFactor = pinch.totalScaleFactor() 1541 scaleFactor = pinch.totalScaleFactor()
1540 self.setZoomValue(int(scaleFactor * 100)) 1542 self.setZoomValue(int(scaleFactor * 100))
1541 evt.accept() 1543 evt.accept()
1542 1544
1543 def eventFilter(self, obj, evt): 1545 def eventFilter(self, obj, evt):
1551 @return flag indicating that the event should be filtered out 1553 @return flag indicating that the event should be filtered out
1552 @rtype bool 1554 @rtype bool
1553 """ 1555 """
1554 if ( 1556 if (
1555 obj is self and 1557 obj is self and
1556 evt.type() == QEvent.ParentChange and 1558 evt.type() == QEvent.Type.ParentChange and
1557 self.parentWidget() is not None 1559 self.parentWidget() is not None
1558 ): 1560 ):
1559 self.parentWidget().installEventFilter(self) 1561 self.parentWidget().installEventFilter(self)
1560 1562
1561 # find the render widget receiving events for the web page 1563 # find the render widget receiving events for the web page
1562 if obj is self and evt.type() == QEvent.ChildAdded: 1564 if obj is self and evt.type() == QEvent.Type.ChildAdded:
1563 QTimer.singleShot(0, self.__setRwhvqt) 1565 QTimer.singleShot(0, self.__setRwhvqt)
1564 1566
1565 # forward events to WebBrowserView 1567 # forward events to WebBrowserView
1566 if ( 1568 if (
1567 obj is self.__rwhvqt and 1569 obj is self.__rwhvqt and
1568 evt.type() in [QEvent.KeyPress, QEvent.KeyRelease, 1570 evt.type() in [QEvent.Type.KeyPress,
1569 QEvent.MouseButtonPress, QEvent.MouseButtonRelease, 1571 QEvent.Type.KeyRelease,
1570 QEvent.MouseMove, QEvent.Wheel, QEvent.Gesture] 1572 QEvent.Type.MouseButtonPress,
1573 QEvent.Type.MouseButtonRelease,
1574 QEvent.Type.MouseMove,
1575 QEvent.Type.Wheel,
1576 QEvent.Type.Gesture]
1571 ): 1577 ):
1572 wasAccepted = evt.isAccepted() 1578 wasAccepted = evt.isAccepted()
1573 evt.setAccepted(False) 1579 evt.setAccepted(False)
1574 if evt.type() == QEvent.KeyPress: 1580 if evt.type() == QEvent.Type.KeyPress:
1575 self._keyPressEvent(evt) 1581 self._keyPressEvent(evt)
1576 elif evt.type() == QEvent.KeyRelease: 1582 elif evt.type() == QEvent.Type.KeyRelease:
1577 self._keyReleaseEvent(evt) 1583 self._keyReleaseEvent(evt)
1578 elif evt.type() == QEvent.MouseButtonPress: 1584 elif evt.type() == QEvent.Type.MouseButtonPress:
1579 self._mousePressEvent(evt) 1585 self._mousePressEvent(evt)
1580 elif evt.type() == QEvent.MouseButtonRelease: 1586 elif evt.type() == QEvent.Type.MouseButtonRelease:
1581 self._mouseReleaseEvent(evt) 1587 self._mouseReleaseEvent(evt)
1582 elif evt.type() == QEvent.MouseMove: 1588 elif evt.type() == QEvent.Type.MouseMove:
1583 self._mouseMoveEvent(evt) 1589 self._mouseMoveEvent(evt)
1584 elif evt.type() == QEvent.Wheel: 1590 elif evt.type() == QEvent.Type.Wheel:
1585 self._wheelEvent(evt) 1591 self._wheelEvent(evt)
1586 elif evt.type() == QEvent.Gesture: 1592 elif evt.type() == QEvent.Type.Gesture:
1587 self._gestureEvent(evt) 1593 self._gestureEvent(evt)
1588 ret = evt.isAccepted() 1594 ret = evt.isAccepted()
1589 evt.setAccepted(wasAccepted) 1595 evt.setAccepted(wasAccepted)
1590 return ret 1596 return ret
1591 1597
1592 if ( 1598 if (
1593 obj is self.parentWidget() and 1599 obj is self.parentWidget() and
1594 evt.type() in [QEvent.KeyPress, QEvent.KeyRelease] 1600 evt.type() in [QEvent.Type.KeyPress, QEvent.Type.KeyRelease]
1595 ): 1601 ):
1596 wasAccepted = evt.isAccepted() 1602 wasAccepted = evt.isAccepted()
1597 evt.setAccepted(False) 1603 evt.setAccepted(False)
1598 if evt.type() == QEvent.KeyPress: 1604 if evt.type() == QEvent.Type.KeyPress:
1599 self._keyPressEvent(evt) 1605 self._keyPressEvent(evt)
1600 elif evt.type() == QEvent.KeyRelease: 1606 elif evt.type() == QEvent.Type.KeyRelease:
1601 self._keyReleaseEvent(evt) 1607 self._keyReleaseEvent(evt)
1602 ret = evt.isAccepted() 1608 ret = evt.isAccepted()
1603 evt.setAccepted(wasAccepted) 1609 evt.setAccepted(wasAccepted)
1604 return ret 1610 return ret
1605 1611
1606 # block already handled events 1612 # block already handled events
1607 if obj is self: 1613 if obj is self:
1608 if evt.type() in [QEvent.KeyPress, QEvent.KeyRelease, 1614 if evt.type() in [QEvent.Type.KeyPress,
1609 QEvent.MouseButtonPress, 1615 QEvent.Type.KeyRelease,
1610 QEvent.MouseButtonRelease, 1616 QEvent.Type.MouseButtonPress,
1611 QEvent.MouseMove, QEvent.Wheel, QEvent.Gesture]: 1617 QEvent.Type.MouseButtonRelease,
1618 QEvent.Type.MouseMove,
1619 QEvent.Type.Wheel,
1620 QEvent.Type.Gesture]:
1612 return True 1621 return True
1613 1622
1614 elif evt.type() == QEvent.Hide: 1623 elif evt.type() == QEvent.Type.Hide:
1615 if self.isFullScreen(): 1624 if self.isFullScreen():
1616 self.triggerPageAction(QWebEnginePage.ExitFullScreen) 1625 self.triggerPageAction(
1626 QWebEnginePage.WebAction.ExitFullScreen)
1617 1627
1618 return super(WebBrowserView, self).eventFilter(obj, evt) 1628 return super(WebBrowserView, self).eventFilter(obj, evt)
1619 1629
1620 def event(self, evt): 1630 def event(self, evt):
1621 """ 1631 """
1622 Public method handling events. 1632 Public method handling events.
1623 1633
1624 @param evt reference to the event (QEvent) 1634 @param evt reference to the event (QEvent)
1625 @return flag indicating, if the event was handled (boolean) 1635 @return flag indicating, if the event was handled (boolean)
1626 """ 1636 """
1627 if evt.type() == QEvent.Gesture: 1637 if evt.type() == QEvent.Type.Gesture:
1628 self._gestureEvent(evt) 1638 self._gestureEvent(evt)
1629 return True 1639 return True
1630 1640
1631 return super(WebBrowserView, self).event(evt) 1641 return super(WebBrowserView, self).event(evt)
1632 1642
1723 else: 1733 else:
1724 url = self.url() 1734 url = self.url()
1725 1735
1726 titleStr = url.host() 1736 titleStr = url.host()
1727 if not titleStr: 1737 if not titleStr:
1728 titleStr = url.toString(QUrl.RemoveFragment) 1738 titleStr = url.toString(
1739 QUrl.UrlFormattingOption.RemoveFragment)
1729 1740
1730 if not titleStr or titleStr == "about:blank": 1741 if not titleStr or titleStr == "about:blank":
1731 titleStr = self.tr("Empty Page") 1742 titleStr = self.tr("Empty Page")
1732 1743
1733 return titleStr 1744 return titleStr
1751 @param status termination status 1762 @param status termination status
1752 @type QWebEnginePage.RenderProcessTerminationStatus 1763 @type QWebEnginePage.RenderProcessTerminationStatus
1753 @param exitCode exit code of the process 1764 @param exitCode exit code of the process
1754 @type int 1765 @type int
1755 """ 1766 """
1756 if status == QWebEnginePage.NormalTerminationStatus: 1767 if (
1768 status ==
1769 QWebEnginePage.RenderProcessTerminationStatus
1770 .NormalTerminationStatus
1771 ):
1757 return 1772 return
1758 1773
1759 QTimer.singleShot(0, lambda: self.__showTabCrashPage(status)) 1774 QTimer.singleShot(0, lambda: self.__showTabCrashPage(status))
1760 1775
1761 def __showTabCrashPage(self, status): 1776 def __showTabCrashPage(self, status):
1768 self.page().deleteLater() 1783 self.page().deleteLater()
1769 self.__createNewPage() 1784 self.__createNewPage()
1770 1785
1771 html = getHtmlPage("tabCrashPage.html") 1786 html = getHtmlPage("tabCrashPage.html")
1772 html = html.replace("@IMAGE@", pixmapToDataUrl( 1787 html = html.replace("@IMAGE@", pixmapToDataUrl(
1773 e5App().style().standardIcon(QStyle.SP_MessageBoxWarning).pixmap( 1788 e5App().style().standardIcon(
1774 48, 48)).toString()) 1789 QStyle.StandardPixmap.SP_MessageBoxWarning).pixmap(48, 48)
1790 ).toString())
1775 html = html.replace("@FAVICON@", pixmapToDataUrl( 1791 html = html.replace("@FAVICON@", pixmapToDataUrl(
1776 e5App().style() .standardIcon(QStyle.SP_MessageBoxWarning).pixmap( 1792 e5App().style() .standardIcon(
1777 16, 16)).toString()) 1793 QStyle.StandardPixmap.SP_MessageBoxWarning).pixmap(16, 16)
1794 ).toString())
1778 html = html.replace( 1795 html = html.replace(
1779 "@TITLE@", self.tr("Render Process terminated abnormally")) 1796 "@TITLE@", self.tr("Render Process terminated abnormally"))
1780 html = html.replace( 1797 html = html.replace(
1781 "@H1@", self.tr("Render Process terminated abnormally")) 1798 "@H1@", self.tr("Render Process terminated abnormally"))
1782 if status == QWebEnginePage.CrashedTerminationStatus: 1799 if (
1800 status ==
1801 QWebEnginePage.RenderProcessTerminationStatus
1802 .CrashedTerminationStatus
1803 ):
1783 msg = self.tr("The render process crashed while" 1804 msg = self.tr("The render process crashed while"
1784 " loading this page.") 1805 " loading this page.")
1785 elif status == QWebEnginePage.KilledTerminationStatus: 1806 elif (
1807 status ==
1808 QWebEnginePage.RenderProcessTerminationStatus
1809 .KilledTerminationStatus
1810 ):
1786 msg = self.tr("The render process was killed.") 1811 msg = self.tr("The render process was killed.")
1787 else: 1812 else:
1788 msg = self.tr("The render process terminated while" 1813 msg = self.tr("The render process terminated while"
1789 " loading this page.") 1814 " loading this page.")
1790 html = html.replace("@LI-1@", msg) 1815 html = html.replace("@LI-1@", msg)
1907 @return tuple containing the file name to save to and the 1932 @return tuple containing the file name to save to and the
1908 save page format 1933 save page format
1909 @rtype tuple of (str, QWebEngineDownloadItem.SavePageFormat) 1934 @rtype tuple of (str, QWebEngineDownloadItem.SavePageFormat)
1910 """ 1935 """
1911 documentLocation = QStandardPaths.writableLocation( 1936 documentLocation = QStandardPaths.writableLocation(
1912 QStandardPaths.DocumentsLocation) 1937 QStandardPaths.StandardLocation.DocumentsLocation)
1913 filterList = [ 1938 filterList = [
1914 self.tr("Web Archive (*.mhtml *.mht)"), 1939 self.tr("Web Archive (*.mhtml *.mht)"),
1915 self.tr("HTML File (*.html *.htm)"), 1940 self.tr("HTML File (*.html *.htm)"),
1916 self.tr("HTML File with all resources (*.html *.htm)"), 1941 self.tr("HTML File with all resources (*.html *.htm)"),
1917 ] 1942 ]
1932 defaultFileName += ".mht" 1957 defaultFileName += ".mht"
1933 else: 1958 else:
1934 defaultFileName += ".mhtml" 1959 defaultFileName += ".mhtml"
1935 1960
1936 fileName = "" 1961 fileName = ""
1937 saveFormat = QWebEngineDownloadItem.MimeHtmlSaveFormat 1962 saveFormat = QWebEngineDownloadItem.SavePageFormat.MimeHtmlSaveFormat
1938 1963
1939 fileName, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( 1964 fileName, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
1940 None, 1965 None,
1941 self.tr("Save Web Page"), 1966 self.tr("Save Web Page"),
1942 defaultFileName, 1967 defaultFileName,
1943 ";;".join(filterList), 1968 ";;".join(filterList),
1944 None) 1969 None)
1945 if fileName: 1970 if fileName:
1946 index = filterList.index(selectedFilter) 1971 index = filterList.index(selectedFilter)
1947 if index == 0: 1972 if index == 0:
1948 saveFormat = QWebEngineDownloadItem.MimeHtmlSaveFormat 1973 saveFormat = (
1974 QWebEngineDownloadItem.SavePageFormat.MimeHtmlSaveFormat
1975 )
1949 elif index == 1: 1976 elif index == 1:
1950 saveFormat = QWebEngineDownloadItem.SingleHtmlSaveFormat 1977 saveFormat = (
1978 QWebEngineDownloadItem.SavePageFormat.SingleHtmlSaveFormat
1979 )
1951 else: 1980 else:
1952 saveFormat = QWebEngineDownloadItem.CompleteHtmlSaveFormat 1981 saveFormat = (
1982 QWebEngineDownloadItem.SavePageFormat
1983 .CompleteHtmlSaveFormat
1984 )
1953 1985
1954 extension = os.path.splitext(fileName)[1] 1986 extension = os.path.splitext(fileName)[1]
1955 if not extension: 1987 if not extension:
1956 # add the platform specific default extension 1988 # add the platform specific default extension
1957 if Utilities.isWindowsPlatform(): 1989 if Utilities.isWindowsPlatform():
1973 2005
1974 @param windowType type of the requested window 2006 @param windowType type of the requested window
1975 (QWebEnginePage.WebWindowType) 2007 (QWebEnginePage.WebWindowType)
1976 @return reference to the created browser window (WebBrowserView) 2008 @return reference to the created browser window (WebBrowserView)
1977 """ 2009 """
1978 if windowType in [QWebEnginePage.WebBrowserTab, 2010 if windowType in [QWebEnginePage.WebWindowType.WebBrowserTab,
1979 QWebEnginePage.WebDialog]: 2011 QWebEnginePage.WebWindowType.WebDialog]:
1980 return self.__mw.newTab(addNextTo=self) 2012 return self.__mw.newTab(addNextTo=self)
1981 elif windowType == QWebEnginePage.WebBrowserWindow: 2013 elif windowType == QWebEnginePage.WebWindowType.WebBrowserWindow:
1982 return self.__mw.newWindow().currentBrowser() 2014 return self.__mw.newWindow().currentBrowser()
1983 else: 2015 else:
1984 return self.__mw.newTab(addNextTo=self, background=True) 2016 return self.__mw.newTab(addNextTo=self, background=True)
1985 2017
1986 def preferencesChanged(self): 2018 def preferencesChanged(self):
2145 "y": scrollPos.y(), 2177 "y": scrollPos.y(),
2146 } 2178 }
2147 2179
2148 # 3. page history 2180 # 3. page history
2149 historyArray = QByteArray() 2181 historyArray = QByteArray()
2150 stream = QDataStream(historyArray, QIODevice.WriteOnly) 2182 stream = QDataStream(historyArray, QIODevice.OpenModeFlag.WriteOnly)
2151 stream << page.history() 2183 stream << page.history()
2152 sessionData["History"] = str( 2184 sessionData["History"] = str(
2153 historyArray.toBase64(QByteArray.Base64UrlEncoding), 2185 historyArray.toBase64(QByteArray.Base64Option.Base64UrlEncoding),
2154 encoding="ascii") 2186 encoding="ascii")
2155 sessionData["HistoryIndex"] = page.history().currentItemIndex() 2187 sessionData["HistoryIndex"] = page.history().currentItemIndex()
2156 2188
2157 # 4. current URL and title 2189 # 4. current URL and title
2158 sessionData["Url"] = self.url().toString() 2190 sessionData["Url"] = self.url().toString()
2159 sessionData["Title"] = self.title() 2191 sessionData["Title"] = self.title()
2160 2192
2161 # 5. web icon 2193 # 5. web icon
2162 iconArray = QByteArray() 2194 iconArray = QByteArray()
2163 stream = QDataStream(iconArray, QIODevice.WriteOnly) 2195 stream = QDataStream(iconArray, QIODevice.OpenModeFlag.WriteOnly)
2164 stream << page.icon() 2196 stream << page.icon()
2165 sessionData["Icon"] = str(iconArray.toBase64(), encoding="ascii") 2197 sessionData["Icon"] = str(iconArray.toBase64(), encoding="ascii")
2166 2198
2167 return sessionData 2199 return sessionData
2168 2200
2180 2212
2181 # 1. page history 2213 # 1. page history
2182 if "History" in sessionData: 2214 if "History" in sessionData:
2183 historyArray = QByteArray.fromBase64( 2215 historyArray = QByteArray.fromBase64(
2184 sessionData["History"].encode("ascii"), 2216 sessionData["History"].encode("ascii"),
2185 QByteArray.Base64UrlEncoding) 2217 QByteArray.Base64Option.Base64UrlEncoding)
2186 stream = QDataStream(historyArray, QIODevice.ReadOnly) 2218 stream = QDataStream(historyArray, QIODevice.OpenModeFlag.ReadOnly)
2187 stream >> page.history() 2219 stream >> page.history()
2188 2220
2189 if "HistoryIndex" in sessionData: 2221 if "HistoryIndex" in sessionData:
2190 item = page.history().itemAt(sessionData["HistoryIndex"]) 2222 item = page.history().itemAt(sessionData["HistoryIndex"])
2191 if item is not None: 2223 if item is not None:
2222 urlStr = "" 2254 urlStr = ""
2223 2255
2224 if "Icon" in sessionData: 2256 if "Icon" in sessionData:
2225 iconArray = QByteArray.fromBase64( 2257 iconArray = QByteArray.fromBase64(
2226 sessionData["Icon"].encode("ascii")) 2258 sessionData["Icon"].encode("ascii"))
2227 stream = QDataStream(iconArray, QIODevice.ReadOnly) 2259 stream = QDataStream(iconArray, QIODevice.OpenModeFlag.ReadOnly)
2228 icon = QIcon() 2260 icon = QIcon()
2229 stream >> icon 2261 stream >> icon
2230 else: 2262 else:
2231 from .Tools import WebIconProvider 2263 from .Tools import WebIconProvider
2232 icon = WebIconProvider.instance().iconForUrl( 2264 icon = WebIconProvider.instance().iconForUrl(
2321 certificate = None 2353 certificate = None
2322 from E5Network.E5SslCertificateSelectionDialog import ( 2354 from E5Network.E5SslCertificateSelectionDialog import (
2323 E5SslCertificateSelectionDialog 2355 E5SslCertificateSelectionDialog
2324 ) 2356 )
2325 dlg = E5SslCertificateSelectionDialog(certificates, self) 2357 dlg = E5SslCertificateSelectionDialog(certificates, self)
2326 if dlg.exec() == QDialog.Accepted: 2358 if dlg.exec() == QDialog.DialogCode.Accepted:
2327 certificate = dlg.getSelectedCertificate() 2359 certificate = dlg.getSelectedCertificate()
2328 2360
2329 if certificate is None: 2361 if certificate is None:
2330 clientCertificateSelection.selectNone() 2362 clientCertificateSelection.selectNone()
2331 else: 2363 else:

eric ide

mercurial