10 |
10 |
11 from __future__ import unicode_literals |
11 from __future__ import unicode_literals |
12 |
12 |
13 import os |
13 import os |
14 |
14 |
15 from PyQt5.QtCore import pyqtSignal, pyqtSlot, PYQT_VERSION, Qt, QUrl, \ |
15 from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl, QFileInfo, QTimer, \ |
16 QFileInfo, QTimer, QEvent, QPoint, QPointF, QDateTime, QStandardPaths, \ |
16 QEvent, QPoint, QPointF, QDateTime, QStandardPaths, QByteArray, \ |
17 QByteArray, QIODevice, QDataStream |
17 QIODevice, QDataStream |
18 from PyQt5.QtGui import QDesktopServices, QClipboard, QIcon, \ |
18 from PyQt5.QtGui import QDesktopServices, QClipboard, QIcon, \ |
19 QContextMenuEvent, QPixmap, QCursor |
19 QContextMenuEvent, QPixmap, QCursor |
20 from PyQt5.QtWidgets import qApp, QStyle, QMenu, QApplication, QDialog |
20 from PyQt5.QtWidgets import qApp, QStyle, QMenu, QApplication, QDialog |
21 from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage, \ |
21 from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage, \ |
22 QWebEngineDownloadItem |
22 QWebEngineDownloadItem |
127 self.__inspector = None |
127 self.__inspector = None |
128 WebInspector.registerView(self) |
128 WebInspector.registerView(self) |
129 |
129 |
130 self.__restoreData = None |
130 self.__restoreData = None |
131 |
131 |
132 if qVersionTuple() >= (5, 8, 0): |
132 if self.parentWidget() is not None: |
133 if self.parentWidget() is not None: |
133 self.parentWidget().installEventFilter(self) |
134 self.parentWidget().installEventFilter(self) |
134 |
135 |
135 if qVersionTuple() < (5, 11, 0): |
136 if qVersionTuple() >= (5, 8, 0) and qVersionTuple() < (5, 11, 0): |
|
137 lay = self.layout() |
136 lay = self.layout() |
138 lay.currentChanged.connect( |
137 lay.currentChanged.connect( |
139 lambda: QTimer.singleShot(0, self.__setRwhvqt)) |
138 lambda: QTimer.singleShot(0, self.__setRwhvqt)) |
140 self.__setRwhvqt() |
139 self.__setRwhvqt() |
141 |
140 |
572 @type QMenu |
571 @type QMenu |
573 @param hitTest reference to the hit test object |
572 @param hitTest reference to the hit test object |
574 @type WebHitTestResult |
573 @type WebHitTestResult |
575 """ |
574 """ |
576 spellCheckActionCount = 0 |
575 spellCheckActionCount = 0 |
577 if qVersionTuple() >= (5, 7, 0) and PYQT_VERSION >= 0x50700: |
576 contextMenuData = self.page().contextMenuData() |
578 contextMenuData = self.page().contextMenuData() |
577 hitTest.updateWithContextMenuData(contextMenuData) |
579 hitTest.updateWithContextMenuData(contextMenuData) |
578 |
|
579 if bool(contextMenuData.misspelledWord()): |
|
580 boldFont = menu.font() |
|
581 boldFont.setBold(True) |
580 |
582 |
581 if qVersionTuple() >= (5, 8, 0) and PYQT_VERSION >= 0x50800 and \ |
583 for suggestion in contextMenuData.spellCheckerSuggestions(): |
582 bool(contextMenuData.misspelledWord()): |
584 act = menu.addAction(suggestion) |
583 boldFont = menu.font() |
585 act.setFont(boldFont) |
584 boldFont.setBold(True) |
586 act.triggered.connect( |
585 |
587 lambda: self.__replaceMisspelledWord)(act) |
586 for suggestion in contextMenuData.spellCheckerSuggestions(): |
588 |
587 act = menu.addAction(suggestion) |
589 if not bool(menu.actions()): |
588 act.setFont(boldFont) |
590 menu.addAction(self.tr("No suggestions")).setEnabled(False) |
589 act.triggered.connect( |
591 |
590 lambda: self.__replaceMisspelledWord)(act) |
592 menu.addSeparator() |
591 |
593 spellCheckActionCount = len(menu.actions()) |
592 if not bool(menu.actions()): |
|
593 menu.addAction(self.tr("No suggestions")).setEnabled(False) |
|
594 |
|
595 menu.addSeparator() |
|
596 spellCheckActionCount = len(menu.actions()) |
|
597 |
594 |
598 if not hitTest.linkUrl().isEmpty() and \ |
595 if not hitTest.linkUrl().isEmpty() and \ |
599 hitTest.linkUrl().scheme() != "javascript": |
596 hitTest.linkUrl().scheme() != "javascript": |
600 self.__createLinkContextMenu(menu, hitTest) |
597 self.__createLinkContextMenu(menu, hitTest) |
601 |
598 |
1521 self.parentWidget() is not None: |
1518 self.parentWidget() is not None: |
1522 self.parentWidget().installEventFilter(self) |
1519 self.parentWidget().installEventFilter(self) |
1523 |
1520 |
1524 # find the render widget receiving events for the web page |
1521 # find the render widget receiving events for the web page |
1525 if obj is self and evt.type() == QEvent.ChildAdded: |
1522 if obj is self and evt.type() == QEvent.ChildAdded: |
1526 if qVersionTuple() < (5, 8, 0): |
1523 if qVersionTuple() >= (5, 11, 0): |
1527 child = evt.child() |
|
1528 if child and child.inherits( |
|
1529 "QtWebEngineCore::" |
|
1530 "RenderWidgetHostViewQtDelegateWidget"): |
|
1531 self.__rwhvqt = child |
|
1532 self.grabGesture(Qt.PinchGesture) |
|
1533 self.__rwhvqt.grabGesture(Qt.PinchGesture) |
|
1534 self.__rwhvqt.installEventFilter(self) |
|
1535 elif qVersionTuple() >= (5, 11, 0): |
|
1536 QTimer.singleShot(0, self.__setRwhvqt) |
1524 QTimer.singleShot(0, self.__setRwhvqt) |
1537 |
1525 |
1538 # forward events to WebBrowserView |
1526 # forward events to WebBrowserView |
1539 if obj is self.__rwhvqt and \ |
1527 if obj is self.__rwhvqt and \ |
1540 evt.type() in [QEvent.KeyPress, QEvent.KeyRelease, |
1528 evt.type() in [QEvent.KeyPress, QEvent.KeyRelease, |
1855 """ |
1843 """ |
1856 url = self.url() |
1844 url = self.url() |
1857 if url.isEmpty(): |
1845 if url.isEmpty(): |
1858 return |
1846 return |
1859 |
1847 |
1860 if qVersionTuple() >= (5, 8, 0) and PYQT_VERSION >= 0x50800: |
1848 fileName, savePageFormat = self.__getSavePageFileNameAndFormat() |
1861 # since Qt 5.8.0 |
1849 if fileName: |
1862 fileName, savePageFormat = self.__getSavePageFileNameAndFormat() |
1850 self.page().save(fileName, savePageFormat) |
1863 if fileName: |
|
1864 self.page().save(fileName, savePageFormat) |
|
1865 else: |
|
1866 self.triggerPageAction(QWebEnginePage.SavePage) |
|
1867 |
1851 |
1868 def __getSavePageFileNameAndFormat(self): |
1852 def __getSavePageFileNameAndFormat(self): |
1869 """ |
1853 """ |
1870 Private method to get the file name to save the page to. |
1854 Private method to get the file name to save the page to. |
1871 |
1855 |