WebBrowser/WebBrowserWindow.py

changeset 5745
4f4316e83318
parent 5740
292538236234
child 5746
6ccc43d9faf0
equal deleted inserted replaced
5744:d53474dcb9e6 5745:4f4316e83318
20 from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QByteArray, QSize, QTimer, \ 20 from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QByteArray, QSize, QTimer, \
21 QUrl, QTextCodec, QProcess, QEvent 21 QUrl, QTextCodec, QProcess, QEvent
22 from PyQt5.QtGui import QDesktopServices, QKeySequence, QFont, QFontMetrics 22 from PyQt5.QtGui import QDesktopServices, QKeySequence, QFont, QFontMetrics
23 from PyQt5.QtWidgets import QWidget, QVBoxLayout, QSizePolicy, QDockWidget, \ 23 from PyQt5.QtWidgets import QWidget, QVBoxLayout, QSizePolicy, QDockWidget, \
24 QComboBox, QLabel, QMenu, QToolButton, QLineEdit, QApplication, \ 24 QComboBox, QLabel, QMenu, QToolButton, QLineEdit, QApplication, \
25 QWhatsThis, QDialog, QHBoxLayout, QProgressBar, QInputDialog 25 QWhatsThis, QDialog, QHBoxLayout, QProgressBar, QInputDialog, QAction
26 from PyQt5.QtWebEngineWidgets import QWebEngineSettings, QWebEnginePage, \ 26 from PyQt5.QtWebEngineWidgets import QWebEngineSettings, QWebEnginePage, \
27 QWebEngineProfile, QWebEngineScript 27 QWebEngineProfile, QWebEngineScript
28 try: 28 try:
29 from PyQt5.QtHelp import QHelpEngine, QHelpEngineCore, QHelpSearchQuery 29 from PyQt5.QtHelp import QHelpEngine, QHelpEngineCore, QHelpSearchQuery
30 QTHELP_AVAILABLE = True 30 QTHELP_AVAILABLE = True
311 # initialize some of our class objects 311 # initialize some of our class objects
312 self.passwordManager() 312 self.passwordManager()
313 self.historyManager() 313 self.historyManager()
314 self.greaseMonkeyManager() 314 self.greaseMonkeyManager()
315 315
316 # initialize the actions
316 self.__initActions() 317 self.__initActions()
318
319 # initialize the menus
317 self.__initMenus() 320 self.__initMenus()
318 self.__initToolbars() 321 self.__initSuperMenu()
322 if Preferences.getWebBrowser("MenuBarVisible"):
323 self.__navigationBar.superMenuButton().hide()
324 else:
325 self.menuBar().hide()
326
327 # save references to toolbars in order to hide them
328 # when going full screen
329 self.__toolbars = {}
330 # initialize toolbars
331 if Preferences.getWebBrowser("ShowToolbars"):
332 self.__initToolbars()
333 self.__bookmarksToolBar.setVisible(
334 Preferences.getWebBrowser("BookmarksToolBarVisible"))
319 335
320 syncMgr = self.syncManager() 336 syncMgr = self.syncManager()
321 syncMgr.syncMessage.connect(self.statusBar().showMessage) 337 syncMgr.syncMessage.connect(self.statusBar().showMessage)
322 syncMgr.syncError.connect(self.statusBar().showMessage) 338 syncMgr.syncError.connect(self.statusBar().showMessage)
323 339
341 self.__tabManagerIcon = self.tabManager().createStatusBarIcon() 357 self.__tabManagerIcon = self.tabManager().createStatusBarIcon()
342 self.statusBar().addPermanentWidget(self.__tabManagerIcon) 358 self.statusBar().addPermanentWidget(self.__tabManagerIcon)
343 359
344 self.networkIcon = E5NetworkIcon(self) 360 self.networkIcon = E5NetworkIcon(self)
345 self.statusBar().addPermanentWidget(self.networkIcon) 361 self.statusBar().addPermanentWidget(self.networkIcon)
362
363 if not Preferences.getWebBrowser("StatusBarVisible"):
364 self.statusBar().hide()
346 365
347 QDesktopServices.setUrlHandler("http", self.__linkActivated) 366 QDesktopServices.setUrlHandler("http", self.__linkActivated)
348 QDesktopServices.setUrlHandler("https", self.__linkActivated) 367 QDesktopServices.setUrlHandler("https", self.__linkActivated)
349 368
350 # setup connections 369 # setup connections
1796 )) 1815 ))
1797 if not self.__initShortcutsOnly: 1816 if not self.__initShortcutsOnly:
1798 self.showTabManagerAct.triggered.connect(self.__showTabManager) 1817 self.showTabManagerAct.triggered.connect(self.__showTabManager)
1799 self.__actions.append(self.showTabManagerAct) 1818 self.__actions.append(self.showTabManagerAct)
1800 1819
1820 self.virustotalScanCurrentAct = E5Action(
1821 self.tr("Scan current site"),
1822 UI.PixmapCache.getIcon("virustotal.png"),
1823 self.tr("Scan current site"),
1824 0, 0,
1825 self, 'webbrowser_virustotal_scan_site')
1826 if not self.__initShortcutsOnly:
1827 self.virustotalScanCurrentAct.triggered.connect(
1828 self.__virusTotalScanCurrentSite)
1829 self.__actions.append(self.virustotalScanCurrentAct)
1830
1831 self.virustotalIpReportAct = E5Action(
1832 self.tr("IP Address Report"),
1833 UI.PixmapCache.getIcon("virustotal.png"),
1834 self.tr("IP Address Report"),
1835 0, 0,
1836 self, 'webbrowser_virustotal_ip_report')
1837 if not self.__initShortcutsOnly:
1838 self.virustotalIpReportAct.triggered.connect(
1839 self.__virusTotalIpAddressReport)
1840 self.__actions.append(self.virustotalIpReportAct)
1841
1842 self.virustotalDomainReportAct = E5Action(
1843 self.tr("Domain Report"),
1844 UI.PixmapCache.getIcon("virustotal.png"),
1845 self.tr("Domain Report"),
1846 0, 0,
1847 self, 'webbrowser_virustotal_domain_report')
1848 if not self.__initShortcutsOnly:
1849 self.virustotalDomainReportAct.triggered.connect(
1850 self.__virusTotalDomainReport)
1851 self.__actions.append(self.virustotalDomainReportAct)
1852
1853 if not Preferences.getWebBrowser("VirusTotalEnabled") or \
1854 Preferences.getWebBrowser("VirusTotalServiceKey") == "":
1855 self.virustotalScanCurrentAct.setEnabled(False)
1856 self.virustotalIpReportAct.setEnabled(False)
1857 self.virustotalDomainReportAct.setEnabled(False)
1858
1801 self.backAct.setEnabled(False) 1859 self.backAct.setEnabled(False)
1802 self.forwardAct.setEnabled(False) 1860 self.forwardAct.setEnabled(False)
1803 1861
1804 # now read the keyboard shortcuts for the actions 1862 # now read the keyboard shortcuts for the actions
1805 Shortcuts.readShortcuts( 1863 Shortcuts.readShortcuts(
1818 Private method to create the menus. 1876 Private method to create the menus.
1819 """ 1877 """
1820 mb = self.menuBar() 1878 mb = self.menuBar()
1821 1879
1822 menu = mb.addMenu(self.tr('&File')) 1880 menu = mb.addMenu(self.tr('&File'))
1823 menu.setTearOffEnabled(True)
1824 menu.addAction(self.newTabAct) 1881 menu.addAction(self.newTabAct)
1825 menu.addAction(self.newAct) 1882 menu.addAction(self.newAct)
1826 menu.addAction(self.newPrivateAct) 1883 menu.addAction(self.newPrivateAct)
1827 menu.addAction(self.openAct) 1884 menu.addAction(self.openAct)
1828 menu.addAction(self.openTabAct) 1885 menu.addAction(self.openTabAct)
1843 menu.addAction(self.closeAllAct) 1900 menu.addAction(self.closeAllAct)
1844 menu.addSeparator() 1901 menu.addSeparator()
1845 menu.addAction(self.exitAct) 1902 menu.addAction(self.exitAct)
1846 1903
1847 menu = mb.addMenu(self.tr('&Edit')) 1904 menu = mb.addMenu(self.tr('&Edit'))
1848 menu.setTearOffEnabled(True)
1849 menu.addAction(self.undoAct) 1905 menu.addAction(self.undoAct)
1850 menu.addAction(self.redoAct) 1906 menu.addAction(self.redoAct)
1851 menu.addSeparator() 1907 menu.addSeparator()
1852 menu.addAction(self.copyAct) 1908 menu.addAction(self.copyAct)
1853 menu.addAction(self.cutAct) 1909 menu.addAction(self.cutAct)
1859 menu.addAction(self.findAct) 1915 menu.addAction(self.findAct)
1860 menu.addAction(self.findNextAct) 1916 menu.addAction(self.findNextAct)
1861 menu.addAction(self.findPrevAct) 1917 menu.addAction(self.findPrevAct)
1862 1918
1863 menu = mb.addMenu(self.tr('&View')) 1919 menu = mb.addMenu(self.tr('&View'))
1864 menu.setTearOffEnabled(True) 1920 menu.addAction(self.stopAct)
1921 menu.addAction(self.reloadAct)
1922 if WebBrowserWindow._useQtHelp:
1923 menu.addSeparator()
1924 menu.addAction(self.syncTocAct)
1925 menu.addSeparator()
1865 menu.addAction(self.zoomInAct) 1926 menu.addAction(self.zoomInAct)
1866 menu.addAction(self.zoomResetAct) 1927 menu.addAction(self.zoomResetAct)
1867 menu.addAction(self.zoomOutAct) 1928 menu.addAction(self.zoomOutAct)
1868 menu.addSeparator() 1929 menu.addSeparator()
1869 menu.addAction(self.pageSourceAct)
1870 menu.addAction(self.fullScreenAct)
1871 self.__textEncodingMenu = menu.addMenu( 1930 self.__textEncodingMenu = menu.addMenu(
1872 self.tr("Text Encoding")) 1931 self.tr("Text Encoding"))
1873 self.__textEncodingMenu.aboutToShow.connect( 1932 self.__textEncodingMenu.aboutToShow.connect(
1874 self.__aboutToShowTextEncodingMenu) 1933 self.__aboutToShowTextEncodingMenu)
1875 self.__textEncodingMenu.triggered.connect(self.__setTextEncoding) 1934 self.__textEncodingMenu.triggered.connect(self.__setTextEncoding)
1876
1877 menu = mb.addMenu(self.tr('&Go'))
1878 menu.setTearOffEnabled(True)
1879 menu.addAction(self.backAct)
1880 menu.addAction(self.forwardAct)
1881 menu.addAction(self.homeAct)
1882 menu.addSeparator() 1935 menu.addSeparator()
1883 menu.addAction(self.stopAct) 1936 menu.addAction(self.pageSourceAct)
1884 menu.addAction(self.reloadAct) 1937 menu.addAction(self.fullScreenAct)
1885 if WebBrowserWindow._useQtHelp:
1886 menu.addSeparator()
1887 menu.addAction(self.syncTocAct)
1888 1938
1889 from .History.HistoryMenu import HistoryMenu 1939 from .History.HistoryMenu import HistoryMenu
1890 self.historyMenu = HistoryMenu(self, self.__tabWidget) 1940 self.historyMenu = HistoryMenu(self, self.__tabWidget)
1891 self.historyMenu.setTearOffEnabled(True)
1892 self.historyMenu.setTitle(self.tr('H&istory')) 1941 self.historyMenu.setTitle(self.tr('H&istory'))
1893 self.historyMenu.openUrl.connect(self.openUrl) 1942 self.historyMenu.openUrl.connect(self.openUrl)
1894 self.historyMenu.newTab.connect(self.openUrlNewTab) 1943 self.historyMenu.newTab.connect(self.openUrlNewTab)
1895 self.historyMenu.newBackgroundTab.connect(self.openUrlNewBackgroundTab) 1944 self.historyMenu.newBackgroundTab.connect(self.openUrlNewBackgroundTab)
1896 self.historyMenu.newWindow.connect(self.openUrlNewWindow) 1945 self.historyMenu.newWindow.connect(self.openUrlNewWindow)
1897 self.historyMenu.newPrivateWindow.connect(self.openUrlNewPrivateWindow) 1946 self.historyMenu.newPrivateWindow.connect(self.openUrlNewPrivateWindow)
1898 mb.addMenu(self.historyMenu) 1947 mb.addMenu(self.historyMenu)
1899 1948
1949 historyActions = []
1950 historyActions.append(self.backAct)
1951 historyActions.append(self.forwardAct)
1952 historyActions.append(self.homeAct)
1953 self.historyMenu.setInitialActions(historyActions)
1954
1900 from .Bookmarks.BookmarksMenu import BookmarksMenuBarMenu 1955 from .Bookmarks.BookmarksMenu import BookmarksMenuBarMenu
1901 self.bookmarksMenu = BookmarksMenuBarMenu(self) 1956 self.bookmarksMenu = BookmarksMenuBarMenu(self)
1902 self.bookmarksMenu.setTearOffEnabled(True)
1903 self.bookmarksMenu.setTitle(self.tr('&Bookmarks')) 1957 self.bookmarksMenu.setTitle(self.tr('&Bookmarks'))
1904 self.bookmarksMenu.openUrl.connect(self.openUrl) 1958 self.bookmarksMenu.openUrl.connect(self.openUrl)
1905 self.bookmarksMenu.newTab.connect(self.openUrlNewTab) 1959 self.bookmarksMenu.newTab.connect(self.openUrlNewTab)
1906 self.bookmarksMenu.newWindow.connect(self.openUrlNewWindow) 1960 self.bookmarksMenu.newWindow.connect(self.openUrlNewWindow)
1907 mb.addMenu(self.bookmarksMenu) 1961 mb.addMenu(self.bookmarksMenu)
1915 bookmarksActions.append(self.importBookmarksAct) 1969 bookmarksActions.append(self.importBookmarksAct)
1916 bookmarksActions.append(self.exportBookmarksAct) 1970 bookmarksActions.append(self.exportBookmarksAct)
1917 self.bookmarksMenu.setInitialActions(bookmarksActions) 1971 self.bookmarksMenu.setInitialActions(bookmarksActions)
1918 1972
1919 menu = mb.addMenu(self.tr('&Settings')) 1973 menu = mb.addMenu(self.tr('&Settings'))
1920 menu.setTearOffEnabled(True)
1921 menu.addAction(self.prefAct) 1974 menu.addAction(self.prefAct)
1922 menu.addAction(self.acceptedLanguagesAct) 1975 menu.addAction(self.acceptedLanguagesAct)
1923 menu.addAction(self.cookiesAct) 1976 menu.addAction(self.cookiesAct)
1924 menu.addAction(self.flashCookiesAct) 1977 menu.addAction(self.flashCookiesAct)
1925 menu.addAction(self.personalDataAct) 1978 menu.addAction(self.personalDataAct)
1955 menu.addSeparator() 2008 menu.addSeparator()
1956 menu.addAction(self.clearPrivateDataAct) 2009 menu.addAction(self.clearPrivateDataAct)
1957 menu.addAction(self.clearIconsAct) 2010 menu.addAction(self.clearIconsAct)
1958 2011
1959 menu = mb.addMenu(self.tr("&Tools")) 2012 menu = mb.addMenu(self.tr("&Tools"))
1960 menu.setTearOffEnabled(True)
1961 menu.addAction(self.feedsManagerAct) 2013 menu.addAction(self.feedsManagerAct)
1962 menu.addAction(self.siteInfoAct) 2014 menu.addAction(self.siteInfoAct)
1963 menu.addSeparator() 2015 menu.addSeparator()
1964 menu.addAction(self.synchronizationAct) 2016 menu.addAction(self.synchronizationAct)
1965 2017 menu.addSeparator()
1966 menu = mb.addMenu(self.tr("&Window")) 2018 vtMenu = menu.addMenu(UI.PixmapCache.getIcon("virustotal.png"),
1967 menu.setTearOffEnabled(True) 2019 self.tr("&VirusTotal"))
2020 vtMenu.addAction(self.virustotalScanCurrentAct)
2021 vtMenu.addAction(self.virustotalIpReportAct)
2022 vtMenu.addAction(self.virustotalDomainReportAct)
2023
2024 menu = mb.addMenu(self.tr("&Windows"))
1968 menu.addAction(self.showDownloadManagerAct) 2025 menu.addAction(self.showDownloadManagerAct)
1969 menu.addAction(self.showJavaScriptConsoleAct) 2026 menu.addAction(self.showJavaScriptConsoleAct)
1970 menu.addAction(self.showTabManagerAct) 2027 menu.addAction(self.showTabManagerAct)
1971 if WebBrowserWindow._useQtHelp: 2028 if WebBrowserWindow._useQtHelp:
1972 menu.addSeparator() 2029 menu.addSeparator()
1973 menu.addAction(self.showTocAct) 2030 menu.addAction(self.showTocAct)
1974 menu.addAction(self.showIndexAct) 2031 menu.addAction(self.showIndexAct)
1975 menu.addAction(self.showSearchAct) 2032 menu.addAction(self.showSearchAct)
2033 menu.addSeparator()
2034 self.__toolbarsMenu = menu.addMenu(self.tr("&Toolbars"))
2035 self.__toolbarsMenu.aboutToShow.connect(self.__showToolbarsMenu)
2036 self.__toolbarsMenu.triggered.connect(self.__TBMenuTriggered)
1976 2037
1977 mb.addSeparator() 2038 mb.addSeparator()
1978 2039
1979 menu = mb.addMenu(self.tr('&Help')) 2040 menu = mb.addMenu(self.tr('&Help'))
1980 menu.setTearOffEnabled(True)
1981 menu.addAction(self.aboutAct) 2041 menu.addAction(self.aboutAct)
1982 menu.addAction(self.aboutQtAct) 2042 menu.addAction(self.aboutQtAct)
1983 menu.addSeparator() 2043 menu.addSeparator()
1984 menu.addAction(self.whatsThisAct) 2044 menu.addAction(self.whatsThisAct)
1985 2045
2046 def __initSuperMenu(self):
2047 """
2048 Private method to create the super menu and attach it to the super
2049 menu button.
2050 """
2051 self.__superMenu = QMenu(self)
2052
2053 self.__superMenu.addAction(self.newTabAct)
2054 self.__superMenu.addAction(self.newAct)
2055 self.__superMenu.addAction(self.newPrivateAct)
2056 self.__superMenu.addAction(self.openAct)
2057 self.__superMenu.addAction(self.openTabAct)
2058 self.__superMenu.addSeparator()
2059
2060 menu = self.__superMenu.addMenu(self.tr("Save"))
2061 if self.saveAsAct:
2062 menu.addAction(self.saveAsAct)
2063 menu.addAction(self.savePageScreenAct)
2064 menu.addAction(self.saveVisiblePageScreenAct)
2065
2066 if self.printPreviewAct or self.printAct or self.printPdfAct:
2067 menu = self.__superMenu.addMenu(self.tr("Print"))
2068 if self.printPreviewAct:
2069 menu.addAction(self.printPreviewAct)
2070 if self.printAct:
2071 menu.addAction(self.printAct)
2072 if self.printPdfAct:
2073 menu.addAction(self.printPdfAct)
2074
2075 # TODO: add "Send Page Link" action
2076 self.__superMenu.addSeparator()
2077 self.__superMenu.addAction(self.selectAllAct)
2078 self.__superMenu.addAction(self.findAct)
2079 self.__superMenu.addSeparator()
2080 act = self.__superMenu.addAction(UI.PixmapCache.getIcon("history.png"),
2081 self.tr("Show All History..."))
2082 act.triggered.connect(self.historyMenu.showHistoryDialog)
2083 self.__superMenu.addAction(self.bookmarksManageAct)
2084 self.__superMenu.addSeparator()
2085 self.__superMenu.addAction(self.prefAct)
2086
2087 menu = self.__superMenu.addMenu(self.tr('Settings'))
2088 menu.addAction(self.acceptedLanguagesAct)
2089 menu.addAction(self.cookiesAct)
2090 menu.addAction(self.flashCookiesAct)
2091 menu.addAction(self.personalDataAct)
2092 menu.addAction(self.greaseMonkeyAct)
2093 menu.addAction(self.featurePermissionAct)
2094 menu.addSeparator()
2095 menu.addAction(self.editMessageFilterAct)
2096 menu.addSeparator()
2097 menu.addAction(self.searchEnginesAct)
2098 menu.addSeparator()
2099 menu.addAction(self.passwordsAct)
2100 menu.addAction(self.certificateErrorsAct)
2101 menu.addSeparator()
2102 menu.addAction(self.zoomValuesAct)
2103 menu.addAction(self.manageIconsAct)
2104 menu.addSeparator()
2105 menu.addAction(self.adblockAct)
2106 menu.addSeparator()
2107 menu.addMenu(self.__userAgentMenu)
2108 menu.addAction(self.userAgentManagerAct)
2109 menu.addSeparator()
2110 if WebBrowserWindow._useQtHelp:
2111 menu.addAction(self.manageQtHelpDocsAct)
2112 menu.addAction(self.manageQtHelpFiltersAct)
2113 menu.addAction(self.reindexDocumentationAct)
2114 menu.addSeparator()
2115 menu.addAction(self.clearPrivateDataAct)
2116 menu.addAction(self.clearIconsAct)
2117 menu.aboutToShow.connect(
2118 self.__aboutToShowSettingsMenu)
2119
2120 self.__superMenu.addSeparator()
2121
2122 menu = self.__superMenu.addMenu(self.tr('&View'))
2123 menu.addMenu(self.__toolbarsMenu)
2124 windowsMenu = menu.addMenu(self.tr("&Windows"))
2125 windowsMenu.addAction(self.showDownloadManagerAct)
2126 windowsMenu.addAction(self.showJavaScriptConsoleAct)
2127 windowsMenu.addAction(self.showTabManagerAct)
2128 if WebBrowserWindow._useQtHelp:
2129 windowsMenu.addSeparator()
2130 windowsMenu.addAction(self.showTocAct)
2131 windowsMenu.addAction(self.showIndexAct)
2132 windowsMenu.addAction(self.showSearchAct)
2133 menu.addSeparator()
2134 menu.addAction(self.stopAct)
2135 menu.addAction(self.reloadAct)
2136 if WebBrowserWindow._useQtHelp:
2137 menu.addSeparator()
2138 menu.addAction(self.syncTocAct)
2139 menu.addSeparator()
2140 menu.addAction(self.zoomInAct)
2141 menu.addAction(self.zoomResetAct)
2142 menu.addAction(self.zoomOutAct)
2143 menu.addSeparator()
2144 menu.addMenu(self.__textEncodingMenu)
2145 menu.addSeparator()
2146 menu.addAction(self.pageSourceAct)
2147 menu.addAction(self.fullScreenAct)
2148
2149 self.__superMenu.addMenu(self.historyMenu)
2150 self.__superMenu.addMenu(self.bookmarksMenu)
2151
2152 menu = self.__superMenu.addMenu(self.tr("&Tools"))
2153 menu.addAction(self.feedsManagerAct)
2154 menu.addAction(self.siteInfoAct)
2155 menu.addSeparator()
2156 menu.addAction(self.synchronizationAct)
2157 menu.addSeparator()
2158 vtMenu = menu.addMenu(UI.PixmapCache.getIcon("virustotal.png"),
2159 self.tr("&VirusTotal"))
2160 vtMenu.addAction(self.virustotalScanCurrentAct)
2161 vtMenu.addAction(self.virustotalIpReportAct)
2162 vtMenu.addAction(self.virustotalDomainReportAct)
2163
2164 self.__superMenu.addSeparator()
2165 self.__superMenu.addAction(self.aboutAct)
2166 self.__superMenu.addAction(self.aboutQtAct)
2167 self.__superMenu.addSeparator()
2168 self.__superMenu.addAction(self.exitAct)
2169
2170 self.__navigationBar.superMenuButton().setMenu(self.__superMenu)
2171
1986 def __initToolbars(self): 2172 def __initToolbars(self):
1987 """ 2173 """
1988 Private method to create the toolbars. 2174 Private method to create the toolbars.
1989 """ 2175 """
1990 # save references to toolbars in order to hide them
1991 # when going full screen
1992 self.__toolbars = []
1993
1994 filetb = self.addToolBar(self.tr("File")) 2176 filetb = self.addToolBar(self.tr("File"))
1995 filetb.setObjectName("FileToolBar") 2177 filetb.setObjectName("FileToolBar")
1996 filetb.setIconSize(UI.Config.ToolBarIconSize) 2178 filetb.setIconSize(UI.Config.ToolBarIconSize)
1997 filetb.addAction(self.newTabAct) 2179 filetb.addAction(self.newTabAct)
1998 filetb.addAction(self.newAct) 2180 filetb.addAction(self.newAct)
2012 filetb.addAction(self.printPdfAct) 2194 filetb.addAction(self.printPdfAct)
2013 if self.printPreviewAct or self.printAct or self.printPdfAct: 2195 if self.printPreviewAct or self.printAct or self.printPdfAct:
2014 filetb.addSeparator() 2196 filetb.addSeparator()
2015 filetb.addAction(self.closeAct) 2197 filetb.addAction(self.closeAct)
2016 filetb.addAction(self.exitAct) 2198 filetb.addAction(self.exitAct)
2017 self.__toolbars.append(filetb) 2199 self.__toolbars["file"] = (filetb.windowTitle(), filetb)
2018 2200
2019 self.savePageScreenMenu = QMenu(self) 2201 self.savePageScreenMenu = QMenu(self)
2020 self.savePageScreenMenu.addAction(self.savePageScreenAct) 2202 self.savePageScreenMenu.addAction(self.savePageScreenAct)
2021 self.savePageScreenMenu.addAction(self.saveVisiblePageScreenAct) 2203 self.savePageScreenMenu.addAction(self.saveVisiblePageScreenAct)
2022 savePageScreenButton = filetb.widgetForAction(self.savePageScreenAct) 2204 savePageScreenButton = filetb.widgetForAction(self.savePageScreenAct)
2032 edittb.addAction(self.copyAct) 2214 edittb.addAction(self.copyAct)
2033 edittb.addAction(self.cutAct) 2215 edittb.addAction(self.cutAct)
2034 edittb.addAction(self.pasteAct) 2216 edittb.addAction(self.pasteAct)
2035 edittb.addSeparator() 2217 edittb.addSeparator()
2036 edittb.addAction(self.selectAllAct) 2218 edittb.addAction(self.selectAllAct)
2037 self.__toolbars.append(edittb) 2219 self.__toolbars["edit"] = (edittb.windowTitle(), edittb)
2038 2220
2039 viewtb = self.addToolBar(self.tr("View")) 2221 viewtb = self.addToolBar(self.tr("View"))
2040 viewtb.setObjectName("ViewToolBar") 2222 viewtb.setObjectName("ViewToolBar")
2041 viewtb.setIconSize(UI.Config.ToolBarIconSize) 2223 viewtb.setIconSize(UI.Config.ToolBarIconSize)
2042 viewtb.addAction(self.zoomInAct) 2224 viewtb.addAction(self.zoomInAct)
2043 viewtb.addAction(self.zoomResetAct) 2225 viewtb.addAction(self.zoomResetAct)
2044 viewtb.addAction(self.zoomOutAct) 2226 viewtb.addAction(self.zoomOutAct)
2045 viewtb.addSeparator() 2227 viewtb.addSeparator()
2046 viewtb.addAction(self.fullScreenAct) 2228 viewtb.addAction(self.fullScreenAct)
2047 self.__toolbars.append(viewtb) 2229 self.__toolbars["view"] = (viewtb.windowTitle(), viewtb)
2048 2230
2049 findtb = self.addToolBar(self.tr("Find")) 2231 findtb = self.addToolBar(self.tr("Find"))
2050 findtb.setObjectName("FindToolBar") 2232 findtb.setObjectName("FindToolBar")
2051 findtb.setIconSize(UI.Config.ToolBarIconSize) 2233 findtb.setIconSize(UI.Config.ToolBarIconSize)
2052 findtb.addAction(self.findAct) 2234 findtb.addAction(self.findAct)
2053 findtb.addAction(self.findNextAct) 2235 findtb.addAction(self.findNextAct)
2054 findtb.addAction(self.findPrevAct) 2236 findtb.addAction(self.findPrevAct)
2055 self.__toolbars.append(findtb) 2237 self.__toolbars["find"] = (findtb.windowTitle(), findtb)
2056 2238
2057 if WebBrowserWindow._useQtHelp: 2239 if WebBrowserWindow._useQtHelp:
2058 filtertb = self.addToolBar(self.tr("Filter")) 2240 filtertb = self.addToolBar(self.tr("Filter"))
2059 filtertb.setObjectName("FilterToolBar") 2241 filtertb.setObjectName("FilterToolBar")
2060 self.filterCombo = QComboBox() 2242 self.filterCombo = QComboBox()
2064 filtertb.addWidget(self.filterCombo) 2246 filtertb.addWidget(self.filterCombo)
2065 self.__helpEngine.setupFinished.connect(self.__setupFilterCombo) 2247 self.__helpEngine.setupFinished.connect(self.__setupFilterCombo)
2066 self.filterCombo.activated[str].connect( 2248 self.filterCombo.activated[str].connect(
2067 self.__filterQtHelpDocumentation) 2249 self.__filterQtHelpDocumentation)
2068 self.__setupFilterCombo() 2250 self.__setupFilterCombo()
2069 self.__toolbars.append(filtertb) 2251 self.__toolbars["filter"] = (filtertb.windowTitle(), filtertb)
2070 2252
2071 settingstb = self.addToolBar(self.tr("Settings")) 2253 settingstb = self.addToolBar(self.tr("Settings"))
2072 settingstb.setObjectName("SettingsToolBar") 2254 settingstb.setObjectName("SettingsToolBar")
2073 settingstb.setIconSize(UI.Config.ToolBarIconSize) 2255 settingstb.setIconSize(UI.Config.ToolBarIconSize)
2074 settingstb.addAction(self.prefAct) 2256 settingstb.addAction(self.prefAct)
2076 settingstb.addAction(self.cookiesAct) 2258 settingstb.addAction(self.cookiesAct)
2077 settingstb.addAction(self.flashCookiesAct) 2259 settingstb.addAction(self.flashCookiesAct)
2078 settingstb.addAction(self.personalDataAct) 2260 settingstb.addAction(self.personalDataAct)
2079 settingstb.addAction(self.greaseMonkeyAct) 2261 settingstb.addAction(self.greaseMonkeyAct)
2080 settingstb.addAction(self.featurePermissionAct) 2262 settingstb.addAction(self.featurePermissionAct)
2081 self.__toolbars.append(settingstb) 2263 self.__toolbars["settings"] = (settingstb.windowTitle(), settingstb)
2082 2264
2083 toolstb = self.addToolBar(self.tr("Tools")) 2265 toolstb = self.addToolBar(self.tr("Tools"))
2084 toolstb.setObjectName("ToolsToolBar") 2266 toolstb.setObjectName("ToolsToolBar")
2085 toolstb.setIconSize(UI.Config.ToolBarIconSize) 2267 toolstb.setIconSize(UI.Config.ToolBarIconSize)
2086 toolstb.addAction(self.feedsManagerAct) 2268 toolstb.addAction(self.feedsManagerAct)
2087 toolstb.addAction(self.siteInfoAct) 2269 toolstb.addAction(self.siteInfoAct)
2088 toolstb.addSeparator() 2270 toolstb.addSeparator()
2089 toolstb.addAction(self.synchronizationAct) 2271 toolstb.addAction(self.synchronizationAct)
2090 self.__toolbars.append(toolstb) 2272 self.__toolbars["tools"] = (toolstb.windowTitle(), toolstb)
2091 2273
2092 helptb = self.addToolBar(self.tr("Help")) 2274 helptb = self.addToolBar(self.tr("Help"))
2093 helptb.setObjectName("HelpToolBar") 2275 helptb.setObjectName("HelpToolBar")
2094 helptb.setIconSize(UI.Config.ToolBarIconSize) 2276 helptb.setIconSize(UI.Config.ToolBarIconSize)
2095 helptb.addAction(self.whatsThisAct) 2277 helptb.addAction(self.whatsThisAct)
2096 self.__toolbars.append(helptb) 2278 self.__toolbars["help"] = (helptb.windowTitle(), helptb)
2097 2279
2098 self.addToolBarBreak() 2280 self.addToolBarBreak()
2099 vttb = self.addToolBar(self.tr("VirusTotal")) 2281 vttb = self.addToolBar(self.tr("VirusTotal"))
2100 vttb.setObjectName("VirusTotalToolBar") 2282 vttb.setObjectName("VirusTotalToolBar")
2101 vttb.setIconSize(UI.Config.ToolBarIconSize) 2283 vttb.setIconSize(UI.Config.ToolBarIconSize)
2102 vttb.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) 2284 vttb.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
2103 self.virustotalScanCurrentAct = vttb.addAction( 2285 vttb.addAction(self.virustotalScanCurrentAct)
2104 UI.PixmapCache.getIcon("virustotal.png"), 2286 vttb.addAction(self.virustotalIpReportAct)
2105 self.tr("Scan current site"), 2287 vttb.addAction(self.virustotalDomainReportAct)
2106 self.__virusTotalScanCurrentSite) 2288 self.__toolbars["virustotal"] = (vttb.windowTitle(), vttb)
2107 self.virustotalIpReportAct = vttb.addAction(
2108 UI.PixmapCache.getIcon("virustotal.png"),
2109 self.tr("IP Address Report"),
2110 self.__virusTotalIpAddressReport)
2111 self.virustotalDomainReportAct = vttb.addAction(
2112 UI.PixmapCache.getIcon("virustotal.png"),
2113 self.tr("Domain Report"),
2114 self.__virusTotalDomainReport)
2115 if not Preferences.getWebBrowser("VirusTotalEnabled") or \
2116 Preferences.getWebBrowser("VirusTotalServiceKey") == "":
2117 self.virustotalScanCurrentAct.setEnabled(False)
2118 self.virustotalIpReportAct.setEnabled(False)
2119 self.virustotalDomainReportAct.setEnabled(False)
2120 self.__toolbars.append(vttb)
2121 2289
2122 def __nextTab(self): 2290 def __nextTab(self):
2123 """ 2291 """
2124 Private slot used to show the next tab. 2292 Private slot used to show the next tab.
2125 """ 2293 """
2171 """ 2339 """
2172 Public slot called to open a new web browser tab. 2340 Public slot called to open a new web browser tab.
2173 2341
2174 @param link file to be displayed in the new window (string or QUrl) 2342 @param link file to be displayed in the new window (string or QUrl)
2175 @param addNextTo reference to the browser to open the tab after 2343 @param addNextTo reference to the browser to open the tab after
2176 (HelpBrowser) 2344 (WebBrowserView)
2177 @keyparam background flag indicating to open the tab in the 2345 @keyparam background flag indicating to open the tab in the
2178 background (bool) 2346 background (bool)
2179 @return reference to the new browser 2347 @return reference to the new browser
2180 @rtype WebBrowserView 2348 @rtype WebBrowserView
2181 """ 2349 """
3723 3891
3724 @return reference to the opensearch manager object (OpenSearchManager) 3892 @return reference to the opensearch manager object (OpenSearchManager)
3725 """ 3893 """
3726 return self.__navigationBar.searchEdit().openSearchManager() 3894 return self.__navigationBar.searchEdit().openSearchManager()
3727 3895
3896 def __createTextEncodingAction(self, codec, defaultCodec, parentMenu):
3897 """
3898 Private method to create an action for the text encoding menu.
3899
3900 @param codec name of the codec to create an action for
3901 @type str
3902 @param defaultCodec name of the default codec
3903 @type str
3904 @param parentMenu reference to the parent menu
3905 @type QMenu
3906 """
3907 act = QAction(codec, parentMenu)
3908 act.setData(codec)
3909 act.setCheckable(True)
3910 if defaultCodec == codec:
3911 act.setChecked(True)
3912
3913 parentMenu.addAction(act)
3914
3915 def __createTextEncodingSubmenu(self, title, codecNames, parentMenu):
3916 """
3917 Private method to create a text encoding sub menu.
3918
3919 @param title title of the menu
3920 @type str
3921 @param codecNames list of codec names for the menu
3922 @type list of str
3923 @param parentMenu reference to the parent menu
3924 @type QMenu
3925 """
3926 if codecNames:
3927 defaultCodec = \
3928 QWebEngineSettings.defaultSettings().defaultTextEncoding()\
3929 .lower()
3930
3931 menu = QMenu(title, parentMenu)
3932 for codec in codecNames:
3933 self.__createTextEncodingAction(codec, defaultCodec, menu)
3934
3935 parentMenu.addMenu(menu)
3936
3728 def __aboutToShowTextEncodingMenu(self): 3937 def __aboutToShowTextEncodingMenu(self):
3729 """ 3938 """
3730 Private slot to populate the text encoding menu. 3939 Private slot to populate the text encoding menu.
3731 """ 3940 """
3732 self.__textEncodingMenu.clear() 3941 self.__textEncodingMenu.clear()
3733 3942
3734 codecs = [] 3943 codecs = []
3735 for codec in QTextCodec.availableCodecs(): 3944 for mib in QTextCodec.availableMibs():
3736 codecs.append(str(codec, encoding="utf-8").lower()) 3945 codec = str(QTextCodec.codecForMib(mib).name(),
3946 encoding="utf-8").lower()
3947 if codec not in codecs:
3948 codecs.append(codec)
3737 codecs.sort() 3949 codecs.sort()
3738 3950
3739 defaultTextEncoding = \ 3951 defaultTextEncoding = \
3740 QWebEngineSettings.defaultSettings().defaultTextEncoding().lower() 3952 QWebEngineSettings.defaultSettings().defaultTextEncoding().lower()
3741 if defaultTextEncoding in codecs: 3953 if defaultTextEncoding in codecs:
3742 currentCodec = defaultTextEncoding 3954 currentCodec = defaultTextEncoding
3743 else: 3955 else:
3744 currentCodec = "" 3956 currentCodec = "system"
3745 3957
3746 isDefaultEncodingUsed = True 3958 isoCodecs = []
3747 isoMenu = QMenu(self.tr("ISO"), self.__textEncodingMenu) 3959 winCodecs = []
3748 winMenu = QMenu(self.tr("Windows"), self.__textEncodingMenu) 3960 isciiCodecs = []
3749 isciiMenu = QMenu(self.tr("ISCII"), self.__textEncodingMenu) 3961 uniCodecs = []
3750 uniMenu = QMenu(self.tr("Unicode"), self.__textEncodingMenu) 3962 ibmCodecs = []
3751 otherMenu = QMenu(self.tr("Other"), self.__textEncodingMenu) 3963 otherCodecs = []
3752 ibmMenu = QMenu(self.tr("IBM"), self.__textEncodingMenu)
3753 3964
3754 for codec in codecs: 3965 for codec in codecs:
3755 if codec.startswith(("iso", "latin", "csisolatin")): 3966 if codec.startswith(("iso", "latin")):
3756 act = isoMenu.addAction(codec) 3967 isoCodecs.append(codec)
3757 elif codec.startswith(("windows", "cp1")): 3968 elif codec.startswith(("windows")):
3758 act = winMenu.addAction(codec) 3969 winCodecs.append(codec)
3759 elif codec.startswith("iscii"): 3970 elif codec.startswith("iscii"):
3760 act = isciiMenu.addAction(codec) 3971 isciiCodecs.append(codec)
3761 elif codec.startswith("utf"): 3972 elif codec.startswith("utf"):
3762 act = uniMenu.addAction(codec) 3973 uniCodecs.append(codec)
3763 elif codec.startswith(("ibm", "csibm", "cp")): 3974 elif codec.startswith(("ibm")):
3764 act = ibmMenu.addAction(codec) 3975 ibmCodecs.append(codec)
3976 elif codec == "system":
3977 self.__createTextEncodingAction(codec, currentCodec,
3978 self.__textEncodingMenu)
3765 else: 3979 else:
3766 act = otherMenu.addAction(codec) 3980 otherCodecs.append(codec)
3767 3981
3768 act.setData(codec) 3982 if not self.__textEncodingMenu.isEmpty():
3769 act.setCheckable(True) 3983 self.__textEncodingMenu.addSeparator()
3770 if currentCodec == codec: 3984 self.__createTextEncodingSubmenu(self.tr("ISO"), isoCodecs,
3771 act.setChecked(True) 3985 self.__textEncodingMenu)
3772 isDefaultEncodingUsed = False 3986 self.__createTextEncodingSubmenu(self.tr("Unicode"), uniCodecs,
3773 3987 self.__textEncodingMenu)
3774 act = self.__textEncodingMenu.addAction( 3988 self.__createTextEncodingSubmenu(self.tr("Windows"), winCodecs,
3775 self.tr("Default Encoding")) 3989 self.__textEncodingMenu)
3776 act.setData("") 3990 self.__createTextEncodingSubmenu(self.tr("ISCII"), isciiCodecs,
3777 act.setCheckable(True) 3991 self.__textEncodingMenu)
3778 act.setChecked(isDefaultEncodingUsed) 3992 self.__createTextEncodingSubmenu(self.tr("IBM"), ibmCodecs,
3779 self.__textEncodingMenu.addMenu(uniMenu) 3993 self.__textEncodingMenu)
3780 self.__textEncodingMenu.addMenu(isoMenu) 3994 self.__createTextEncodingSubmenu(self.tr("Other"), otherCodecs,
3781 self.__textEncodingMenu.addMenu(winMenu) 3995 self.__textEncodingMenu)
3782 self.__textEncodingMenu.addMenu(ibmMenu)
3783 self.__textEncodingMenu.addMenu(isciiMenu)
3784 self.__textEncodingMenu.addMenu(otherMenu)
3785 3996
3786 def __setTextEncoding(self, act): 3997 def __setTextEncoding(self, act):
3787 """ 3998 """
3788 Private slot to set the selected text encoding as the default for 3999 Private slot to set the selected text encoding as the default for
3789 this session. 4000 this session.
3793 codec = act.data() 4004 codec = act.data()
3794 if codec == "": 4005 if codec == "":
3795 QWebEngineSettings.defaultSettings().setDefaultTextEncoding("") 4006 QWebEngineSettings.defaultSettings().setDefaultTextEncoding("")
3796 else: 4007 else:
3797 QWebEngineSettings.defaultSettings().setDefaultTextEncoding(codec) 4008 QWebEngineSettings.defaultSettings().setDefaultTextEncoding(codec)
4009
4010 def __populateToolbarsMenu(self, menu):
4011 """
4012 Private method to populate the toolbars menu.
4013
4014 @param menu reference to the menu to be populated
4015 @type QMenu
4016 """
4017 menu.clear()
4018
4019 act = menu.addAction(self.tr("Menu Bar"))
4020 act.setCheckable(True)
4021 act.setChecked(not self.menuBar().isHidden())
4022 act.setData("menubar")
4023
4024 act = menu.addAction(self.tr("Bookmarks"))
4025 act.setCheckable(True)
4026 act.setChecked(not self.__bookmarksToolBar.isHidden())
4027 act.setData("bookmarks")
4028
4029 act = menu.addAction(self.tr("Status Bar"))
4030 act.setCheckable(True)
4031 act.setChecked(not self.statusBar().isHidden())
4032 act.setData("statusbar")
4033
4034 if Preferences.getWebBrowser("ShowToolbars"):
4035 menu.addSeparator()
4036 for name, (text, tb) in sorted(self.__toolbars.items(),
4037 key=lambda t: t[1][0]):
4038 act = menu.addAction(text)
4039 act.setCheckable(True)
4040 act.setChecked(not tb.isHidden())
4041 act.setData(name)
4042 menu.addSeparator()
4043 act = menu.addAction(self.tr("&Show all"))
4044 act.setData("__SHOW__")
4045 act = menu.addAction(self.tr("&Hide all"))
4046 act.setData("__HIDE__")
4047
4048 def createPopupMenu(self):
4049 """
4050 Public method to create the toolbars menu for Qt.
4051
4052 @return toolbars menu
4053 @rtype QMenu
4054 """
4055 menu = QMenu(self)
4056 menu.triggered.connect(self.__TBMenuTriggered)
4057
4058 self.__populateToolbarsMenu(menu)
4059
4060 return menu
4061
4062 def __showToolbarsMenu(self):
4063 """
4064 Private slot to display the Toolbars menu.
4065 """
4066 self.__populateToolbarsMenu(self.__toolbarsMenu)
4067
4068 def __TBMenuTriggered(self, act):
4069 """
4070 Private method to handle the toggle of a toolbar via the Window->
4071 Toolbars submenu or the toolbars popup menu.
4072
4073 @param act reference to the action that was triggered
4074 @type QAction
4075 """
4076 name = act.data()
4077 if name:
4078 if name == "bookmarks":
4079 # special handling of bookmarks toolbar
4080 self.__setBookmarksToolbarVisibility(act.isChecked())
4081
4082 elif name == "menubar":
4083 # special treatment of the menu bar
4084 self.__setMenuBarVisibility(act.isChecked())
4085
4086 elif name == "statusbar":
4087 # special treatment of the status bar
4088 self.__setStatusBarVisible(act.isChecked())
4089
4090 elif name == "__SHOW__":
4091 for text, tb in list(self.__toolbars.values()):
4092 tb.show()
4093
4094 elif name == "__HIDE__":
4095 for text, tb in list(self.__toolbars.values()):
4096 tb.hide()
4097
4098 else:
4099 tb = self.__toolbars[name][1]
4100 if act.isChecked():
4101 tb.show()
4102 else:
4103 tb.hide()
4104
4105 def __setBookmarksToolbarVisibility(self, visible):
4106 """
4107 Private method to set the visibility of the bookmarks toolbar.
4108
4109 @param visible flag indicating the toolbar visibility
4110 @type bool
4111 """
4112 if visible:
4113 self.__bookmarksToolBar.show()
4114 else:
4115 self.__bookmarksToolBar.hide()
4116
4117 # save state for next invokation
4118 Preferences.setWebBrowser("BookmarksToolBarVisible", visible)
4119
4120 def __setMenuBarVisibility(self, visible):
4121 """
4122 Private method to set the visibility of the menu bar.
4123
4124 @param visible flag indicating the menu bar visibility
4125 @type bool
4126 """
4127 if visible:
4128 self.menuBar().show()
4129 self.__navigationBar.superMenuButton().hide()
4130 else:
4131 self.menuBar().hide()
4132 self.__navigationBar.superMenuButton().show()
4133
4134 Preferences.setWebBrowser("MenuBarVisible", visible)
4135
4136 def __setStatusBarVisible(self, visible):
4137 """
4138 Private method to set the visibility of the status bar.
4139
4140 @param visible flag indicating the status bar visibility
4141 @type bool
4142 """
4143 self.statusBar().setVisible(visible)
4144
4145 Preferences.setWebBrowser("StatusBarVisible", visible)
3798 4146
3799 def eventMouseButtons(self): 4147 def eventMouseButtons(self):
3800 """ 4148 """
3801 Public method to get the last recorded mouse buttons. 4149 Public method to get the last recorded mouse buttons.
3802 4150
4003 self.__toolbarStates = self.saveState() 4351 self.__toolbarStates = self.saveState()
4004 self.menuBar().hide() 4352 self.menuBar().hide()
4005 self.statusBar().hide() 4353 self.statusBar().hide()
4006 self.__searchWidget.hide() 4354 self.__searchWidget.hide()
4007 self.__tabWidget.tabBar().hide() 4355 self.__tabWidget.tabBar().hide()
4008 for toolbar in self.__toolbars: 4356 if Preferences.getWebBrowser("ShowToolbars"):
4009 toolbar.hide() 4357 for title, toolbar in self.__toolbars.values():
4358 if toolbar is not self.__bookmarksToolBar:
4359 toolbar.hide()
4010 self.__navigationBar.exitFullScreenButton().setVisible(True) 4360 self.__navigationBar.exitFullScreenButton().setVisible(True)
4011 self.__navigationContainer.hide() 4361 self.__navigationContainer.hide()
4012 4362
4013 elif bool(evt.oldState() & Qt.WindowFullScreen) and \ 4363 elif bool(evt.oldState() & Qt.WindowFullScreen) and \
4014 not bool(self.windowState() & Qt.WindowFullScreen): 4364 not bool(self.windowState() & Qt.WindowFullScreen):
4015 # leave full screen mode 4365 # leave full screen mode
4016 self.setWindowState(self.__windowStates) 4366 self.setWindowState(self.__windowStates)
4017 self.__htmlFullScreen = False 4367 self.__htmlFullScreen = False
4018 self.menuBar().show() 4368 if Preferences.getWebBrowser("MenuBarVisible"):
4019 self.statusBar().show() 4369 self.menuBar().show()
4370 if Preferences.getWebBrowser("StatusBarVisible"):
4371 self.statusBar().show()
4020 self.restoreState(self.__toolbarStates) 4372 self.restoreState(self.__toolbarStates)
4021 self.__tabWidget.tabBar().show() 4373 self.__tabWidget.tabBar().show()
4022 self.__navigationBar.exitFullScreenButton().setVisible(False) 4374 self.__navigationBar.exitFullScreenButton().setVisible(False)
4023 self.__navigationContainer.show() 4375 self.__navigationContainer.show()
4024 4376

eric ide

mercurial