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 """ |
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 """ |