WebBrowser/WebBrowserView.py

branch
QtWebEngine
changeset 4905
09f38f85a3af
parent 4903
10910764454a
child 4906
939ff20f712d
equal deleted inserted replaced
4904:ea8f13f76d26 4905:09f38f85a3af
38 from . import WebInspector 38 from . import WebInspector
39 from .Tools.WebBrowserTools import readAllFileContents, pixmapToDataUrl 39 from .Tools.WebBrowserTools import readAllFileContents, pixmapToDataUrl
40 40
41 import Preferences 41 import Preferences
42 import UI.PixmapCache 42 import UI.PixmapCache
43 ##import Globals
44
45 ##try:
46 ## from PyQt5.QtNetwork import QSslCertificate
47 ## SSL_AVAILABLE = True
48 ##except ImportError:
49 ## SSL_AVAILABLE = False
50 43
51 44
52 class WebBrowserView(QWebEngineView): 45 class WebBrowserView(QWebEngineView):
53 """ 46 """
54 Class implementing the web browser view widget. 47 Class implementing the web browser view widget.
130 123
131 self.__mw.openSearchManager().currentEngineChanged.connect( 124 self.__mw.openSearchManager().currentEngineChanged.connect(
132 self.__currentEngineChanged) 125 self.__currentEngineChanged)
133 126
134 self.setAcceptDrops(True) 127 self.setAcceptDrops(True)
135
136 # TODO: Access Keys
137 ## self.__enableAccessKeys = Preferences.getWebBrowser("AccessKeysEnabled")
138 ## self.__accessKeysPressed = False
139 ## self.__accessKeyLabels = []
140 ## self.__accessKeyNodes = {}
141 ##
142 ## self.page().loadStarted.connect(self.__hideAccessKeys)
143 ## self.page().scrollRequested.connect(self.__hideAccessKeys)
144 128
145 self.__rss = [] 129 self.__rss = []
146 130
147 self.__clickedFrame = None 131 self.__clickedFrame = None
148 132
1294 if self.isFullScreen(): 1278 if self.isFullScreen():
1295 self.triggerPageAction(QWebEnginePage.ExitFullScreen) 1279 self.triggerPageAction(QWebEnginePage.ExitFullScreen)
1296 evt.accept() 1280 evt.accept()
1297 return 1281 return
1298 1282
1299 # TODO: Access Keys
1300 ## if self.__enableAccessKeys:
1301 ## self.__accessKeysPressed = (
1302 ## evt.modifiers() == Qt.ControlModifier and
1303 ## evt.key() == Qt.Key_Control)
1304 ## if not self.__accessKeysPressed:
1305 ## if self.__checkForAccessKey(evt):
1306 ## self.__hideAccessKeys()
1307 ## evt.accept()
1308 ## return
1309 ## self.__hideAccessKeys()
1310 ## else:
1311 ## QTimer.singleShot(300, self.__accessKeyShortcut)
1312
1313 self.__ctrlPressed = (evt.key() == Qt.Key_Control) 1283 self.__ctrlPressed = (evt.key() == Qt.Key_Control)
1314 super(WebBrowserView, self).keyPressEvent(evt) 1284 super(WebBrowserView, self).keyPressEvent(evt)
1315 1285
1316 def _keyReleaseEvent(self, evt): 1286 def _keyReleaseEvent(self, evt):
1317 """ 1287 """
1318 Protected method called by a key release. 1288 Protected method called by a key release.
1319 1289
1320 @param evt reference to the key event (QKeyEvent) 1290 @param evt reference to the key event (QKeyEvent)
1321 """ 1291 """
1322 # TODO: Access Keys
1323 ## if self.__enableAccessKeys:
1324 ## self.__accessKeysPressed = evt.key() == Qt.Key_Control
1325
1326 self.__ctrlPressed = False 1292 self.__ctrlPressed = False
1327 super(WebBrowserView, self).keyReleaseEvent(evt) 1293 super(WebBrowserView, self).keyReleaseEvent(evt)
1328 1294
1329 def focusOutEvent(self, evt): 1295 def focusOutEvent(self, evt):
1330 """ 1296 """
1331 Protected method called by a focus out event. 1297 Protected method called by a focus out event.
1332 1298
1333 @param evt reference to the focus event (QFocusEvent) 1299 @param evt reference to the focus event (QFocusEvent)
1334 """ 1300 """
1335 # TODO: Access Keys
1336 ## if self.__accessKeysPressed:
1337 ## self.__hideAccessKeys()
1338 ## self.__accessKeysPressed = False
1339
1340 super(WebBrowserView, self).focusOutEvent(evt) 1301 super(WebBrowserView, self).focusOutEvent(evt)
1341 1302
1342 # TODO: Gestures: Obsoleted by eventFilter() (?) 1303 # TODO: Gestures: Obsoleted by eventFilter() (?)
1343 def event(self, evt): 1304 def event(self, evt):
1344 """ 1305 """
1562 """ 1523 """
1563 self.__isLoading = False 1524 self.__isLoading = False
1564 self.__progress = 0 1525 self.__progress = 0
1565 1526
1566 QTimer.singleShot(200, self.__renderPreview) 1527 QTimer.singleShot(200, self.__renderPreview)
1567
1568 # TODO: ClickToFlash (?)
1569 ## if Preferences.getWebBrowser("ClickToFlashEnabled"):
1570 ## # this is a hack to make the ClickToFlash button appear
1571 ## self.zoomIn()
1572 ## self.zoomOut()
1573 1528
1574 from .ZoomManager import ZoomManager 1529 from .ZoomManager import ZoomManager
1575 zoomValue = ZoomManager.instance().zoomValue(self.url()) 1530 zoomValue = ZoomManager.instance().zoomValue(self.url())
1576 self.setZoomValue(zoomValue) 1531 self.setZoomValue(zoomValue)
1577 1532
1769 ## size /= 1024 * 1024 1724 ## size /= 1024 * 1024
1770 ## unit = self.tr("MB") 1725 ## unit = self.tr("MB")
1771 ## return "{0:.1f} {1}".format(size, unit) 1726 ## return "{0:.1f} {1}".format(size, unit)
1772 1727
1773 ########################################################################### 1728 ###########################################################################
1774 ## Access key related methods below
1775 ###########################################################################
1776
1777 # TODO: Access Keys
1778 ## def __accessKeyShortcut(self):
1779 ## """
1780 ## Private slot to switch the display of access keys.
1781 ## """
1782 ## if not self.hasFocus() or \
1783 ## not self.__accessKeysPressed or \
1784 ## not self.__enableAccessKeys:
1785 ## return
1786 ##
1787 ## if self.__accessKeyLabels:
1788 ## self.__hideAccessKeys()
1789 ## else:
1790 ## self.__showAccessKeys()
1791 ##
1792 ## self.__accessKeysPressed = False
1793 ##
1794 ## def __checkForAccessKey(self, evt):
1795 ## """
1796 ## Private method to check the existence of an access key and activate the
1797 ## corresponding link.
1798 ##
1799 ## @param evt reference to the key event (QKeyEvent)
1800 ## @return flag indicating, if the event was handled (boolean)
1801 ## """
1802 ## if not self.__accessKeyLabels:
1803 ## return False
1804 ##
1805 ## text = evt.text()
1806 ## if not text:
1807 ## return False
1808 ##
1809 ## key = text[0].upper()
1810 ## handled = False
1811 ## if key in self.__accessKeyNodes:
1812 ## element = self.__accessKeyNodes[key]
1813 ## p = element.geometry().center()
1814 ## frame = element.webFrame()
1815 ## p -= frame.scrollPosition()
1816 ## frame = frame.parentFrame()
1817 ## while frame and frame != self.page().mainFrame():
1818 ## p -= frame.scrollPosition()
1819 ## frame = frame.parentFrame()
1820 ## pevent = QMouseEvent(
1821 ## QEvent.MouseButtonPress, p, Qt.LeftButton,
1822 ## Qt.MouseButtons(Qt.NoButton),
1823 ## Qt.KeyboardModifiers(Qt.NoModifier))
1824 ## qApp.sendEvent(self, pevent)
1825 ## revent = QMouseEvent(
1826 ## QEvent.MouseButtonRelease, p, Qt.LeftButton,
1827 ## Qt.MouseButtons(Qt.NoButton),
1828 ## Qt.KeyboardModifiers(Qt.NoModifier))
1829 ## qApp.sendEvent(self, revent)
1830 ## handled = True
1831 ##
1832 ## return handled
1833 ##
1834 ## def __hideAccessKeys(self):
1835 ## """
1836 ## Private slot to hide the access key labels.
1837 ## """
1838 ## if self.__accessKeyLabels:
1839 ## for label in self.__accessKeyLabels:
1840 ## label.hide()
1841 ## label.deleteLater()
1842 ## self.__accessKeyLabels = []
1843 ## self.__accessKeyNodes = {}
1844 ## self.update()
1845 ##
1846 ## def __showAccessKeys(self):
1847 ## """
1848 ## Private method to show the access key labels.
1849 ## """
1850 ## supportedElements = [
1851 ## "input", "a", "area", "button", "label", "legend", "textarea",
1852 ## ]
1853 ## unusedKeys = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z" \
1854 ## " 0 1 2 3 4 5 6 7 8 9".split()
1855 ##
1856 ## viewport = QRect(self.__page.mainFrame().scrollPosition(),
1857 ## self.__page.viewportSize())
1858 ## # Priority first goes to elements with accesskey attributes
1859 ## alreadyLabeled = []
1860 ## for elementType in supportedElements:
1861 ## result = self.page().mainFrame().findAllElements(elementType)\
1862 ## .toList()
1863 ## for element in result:
1864 ## geometry = element.geometry()
1865 ## if geometry.size().isEmpty() or \
1866 ## not viewport.contains(geometry.topLeft()):
1867 ## continue
1868 ##
1869 ## accessKeyAttribute = element.attribute("accesskey").upper()
1870 ## if not accessKeyAttribute:
1871 ## continue
1872 ##
1873 ## accessKey = ""
1874 ## i = 0
1875 ## while i < len(accessKeyAttribute):
1876 ## if accessKeyAttribute[i] in unusedKeys:
1877 ## accessKey = accessKeyAttribute[i]
1878 ## break
1879 ## i += 2
1880 ## if accessKey == "":
1881 ## continue
1882 ## unusedKeys.remove(accessKey)
1883 ## self.__makeAccessLabel(accessKey, element)
1884 ## alreadyLabeled.append(element)
1885 ##
1886 ## # Pick an access key first from the letters in the text and then
1887 ## # from the list of unused access keys
1888 ## for elementType in supportedElements:
1889 ## result = self.page().mainFrame().findAllElements(elementType)\
1890 ## .toList()
1891 ## for element in result:
1892 ## geometry = element.geometry()
1893 ## if not unusedKeys or \
1894 ## element in alreadyLabeled or \
1895 ## geometry.size().isEmpty() or \
1896 ## not viewport.contains(geometry.topLeft()):
1897 ## continue
1898 ##
1899 ## accessKey = ""
1900 ## text = element.toPlainText().upper()
1901 ## for c in text:
1902 ## if c in unusedKeys:
1903 ## accessKey = c
1904 ## break
1905 ## if accessKey == "":
1906 ## accessKey = unusedKeys[0]
1907 ## unusedKeys.remove(accessKey)
1908 ## self.__makeAccessLabel(accessKey, element)
1909 ##
1910 ## def __makeAccessLabel(self, accessKey, element):
1911 ## """
1912 ## Private method to generate the access label for an element.
1913 ##
1914 ## @param accessKey access key to generate the label for (str)
1915 ## @param element reference to the web element to create the label for
1916 ## (QWebElement)
1917 ## """
1918 ## label = QLabel(self)
1919 ## label.setText("<qt><b>{0}</b></qt>".format(accessKey))
1920 ##
1921 ## p = QToolTip.palette()
1922 ## color = QColor(Qt.yellow).lighter(150)
1923 ## color.setAlpha(175)
1924 ## p.setColor(QPalette.Window, color)
1925 ## label.setPalette(p)
1926 ## label.setAutoFillBackground(True)
1927 ## label.setFrameStyle(QFrame.Box | QFrame.Plain)
1928 ## point = element.geometry().center()
1929 ## point -= self.__page.mainFrame().scrollPosition()
1930 ## label.move(point)
1931 ## label.show()
1932 ## point.setX(point.x() - label.width() // 2)
1933 ## label.move(point)
1934 ## self.__accessKeyLabels.append(label)
1935 ## self.__accessKeyNodes[accessKey] = element
1936
1937 ###########################################################################
1938 ## Miscellaneous methods below 1729 ## Miscellaneous methods below
1939 ########################################################################### 1730 ###########################################################################
1940 1731
1941 def createWindow(self, windowType): 1732 def createWindow(self, windowType):
1942 """ 1733 """
1951 1742
1952 def preferencesChanged(self): 1743 def preferencesChanged(self):
1953 """ 1744 """
1954 Public method to indicate a change of the settings. 1745 Public method to indicate a change of the settings.
1955 """ 1746 """
1956 # TODO: Access Keys
1957 ## self.__enableAccessKeys = Preferences.getWebBrowser("AccessKeysEnabled")
1958 ## if not self.__enableAccessKeys:
1959 ## self.__hideAccessKeys()
1960
1961 self.reload() 1747 self.reload()
1962 1748
1963 ########################################################################### 1749 ###########################################################################
1964 ## RSS related methods below 1750 ## RSS related methods below
1965 ########################################################################### 1751 ###########################################################################

eric ide

mercurial