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