diff -r d53474dcb9e6 -r 4f4316e83318 WebBrowser/WebBrowserWindow.py --- a/WebBrowser/WebBrowserWindow.py Sat May 27 18:51:22 2017 +0200 +++ b/WebBrowser/WebBrowserWindow.py Sun May 28 16:59:18 2017 +0200 @@ -22,7 +22,7 @@ from PyQt5.QtGui import QDesktopServices, QKeySequence, QFont, QFontMetrics from PyQt5.QtWidgets import QWidget, QVBoxLayout, QSizePolicy, QDockWidget, \ QComboBox, QLabel, QMenu, QToolButton, QLineEdit, QApplication, \ - QWhatsThis, QDialog, QHBoxLayout, QProgressBar, QInputDialog + QWhatsThis, QDialog, QHBoxLayout, QProgressBar, QInputDialog, QAction from PyQt5.QtWebEngineWidgets import QWebEngineSettings, QWebEnginePage, \ QWebEngineProfile, QWebEngineScript try: @@ -313,9 +313,25 @@ self.historyManager() self.greaseMonkeyManager() + # initialize the actions self.__initActions() + + # initialize the menus self.__initMenus() - self.__initToolbars() + self.__initSuperMenu() + if Preferences.getWebBrowser("MenuBarVisible"): + self.__navigationBar.superMenuButton().hide() + else: + self.menuBar().hide() + + # save references to toolbars in order to hide them + # when going full screen + self.__toolbars = {} + # initialize toolbars + if Preferences.getWebBrowser("ShowToolbars"): + self.__initToolbars() + self.__bookmarksToolBar.setVisible( + Preferences.getWebBrowser("BookmarksToolBarVisible")) syncMgr = self.syncManager() syncMgr.syncMessage.connect(self.statusBar().showMessage) @@ -344,6 +360,9 @@ self.networkIcon = E5NetworkIcon(self) self.statusBar().addPermanentWidget(self.networkIcon) + if not Preferences.getWebBrowser("StatusBarVisible"): + self.statusBar().hide() + QDesktopServices.setUrlHandler("http", self.__linkActivated) QDesktopServices.setUrlHandler("https", self.__linkActivated) @@ -1798,6 +1817,45 @@ self.showTabManagerAct.triggered.connect(self.__showTabManager) self.__actions.append(self.showTabManagerAct) + self.virustotalScanCurrentAct = E5Action( + self.tr("Scan current site"), + UI.PixmapCache.getIcon("virustotal.png"), + self.tr("Scan current site"), + 0, 0, + self, 'webbrowser_virustotal_scan_site') + if not self.__initShortcutsOnly: + self.virustotalScanCurrentAct.triggered.connect( + self.__virusTotalScanCurrentSite) + self.__actions.append(self.virustotalScanCurrentAct) + + self.virustotalIpReportAct = E5Action( + self.tr("IP Address Report"), + UI.PixmapCache.getIcon("virustotal.png"), + self.tr("IP Address Report"), + 0, 0, + self, 'webbrowser_virustotal_ip_report') + if not self.__initShortcutsOnly: + self.virustotalIpReportAct.triggered.connect( + self.__virusTotalIpAddressReport) + self.__actions.append(self.virustotalIpReportAct) + + self.virustotalDomainReportAct = E5Action( + self.tr("Domain Report"), + UI.PixmapCache.getIcon("virustotal.png"), + self.tr("Domain Report"), + 0, 0, + self, 'webbrowser_virustotal_domain_report') + if not self.__initShortcutsOnly: + self.virustotalDomainReportAct.triggered.connect( + self.__virusTotalDomainReport) + self.__actions.append(self.virustotalDomainReportAct) + + if not Preferences.getWebBrowser("VirusTotalEnabled") or \ + Preferences.getWebBrowser("VirusTotalServiceKey") == "": + self.virustotalScanCurrentAct.setEnabled(False) + self.virustotalIpReportAct.setEnabled(False) + self.virustotalDomainReportAct.setEnabled(False) + self.backAct.setEnabled(False) self.forwardAct.setEnabled(False) @@ -1820,7 +1878,6 @@ mb = self.menuBar() menu = mb.addMenu(self.tr('&File')) - menu.setTearOffEnabled(True) menu.addAction(self.newTabAct) menu.addAction(self.newAct) menu.addAction(self.newPrivateAct) @@ -1845,7 +1902,6 @@ menu.addAction(self.exitAct) menu = mb.addMenu(self.tr('&Edit')) - menu.setTearOffEnabled(True) menu.addAction(self.undoAct) menu.addAction(self.redoAct) menu.addSeparator() @@ -1861,34 +1917,27 @@ menu.addAction(self.findPrevAct) menu = mb.addMenu(self.tr('&View')) - menu.setTearOffEnabled(True) + menu.addAction(self.stopAct) + menu.addAction(self.reloadAct) + if WebBrowserWindow._useQtHelp: + menu.addSeparator() + menu.addAction(self.syncTocAct) + menu.addSeparator() menu.addAction(self.zoomInAct) menu.addAction(self.zoomResetAct) menu.addAction(self.zoomOutAct) menu.addSeparator() - menu.addAction(self.pageSourceAct) - menu.addAction(self.fullScreenAct) self.__textEncodingMenu = menu.addMenu( self.tr("Text Encoding")) self.__textEncodingMenu.aboutToShow.connect( self.__aboutToShowTextEncodingMenu) self.__textEncodingMenu.triggered.connect(self.__setTextEncoding) - - menu = mb.addMenu(self.tr('&Go')) - menu.setTearOffEnabled(True) - menu.addAction(self.backAct) - menu.addAction(self.forwardAct) - menu.addAction(self.homeAct) menu.addSeparator() - menu.addAction(self.stopAct) - menu.addAction(self.reloadAct) - if WebBrowserWindow._useQtHelp: - menu.addSeparator() - menu.addAction(self.syncTocAct) + menu.addAction(self.pageSourceAct) + menu.addAction(self.fullScreenAct) from .History.HistoryMenu import HistoryMenu self.historyMenu = HistoryMenu(self, self.__tabWidget) - self.historyMenu.setTearOffEnabled(True) self.historyMenu.setTitle(self.tr('H&istory')) self.historyMenu.openUrl.connect(self.openUrl) self.historyMenu.newTab.connect(self.openUrlNewTab) @@ -1897,9 +1946,14 @@ self.historyMenu.newPrivateWindow.connect(self.openUrlNewPrivateWindow) mb.addMenu(self.historyMenu) + historyActions = [] + historyActions.append(self.backAct) + historyActions.append(self.forwardAct) + historyActions.append(self.homeAct) + self.historyMenu.setInitialActions(historyActions) + from .Bookmarks.BookmarksMenu import BookmarksMenuBarMenu self.bookmarksMenu = BookmarksMenuBarMenu(self) - self.bookmarksMenu.setTearOffEnabled(True) self.bookmarksMenu.setTitle(self.tr('&Bookmarks')) self.bookmarksMenu.openUrl.connect(self.openUrl) self.bookmarksMenu.newTab.connect(self.openUrlNewTab) @@ -1917,7 +1971,6 @@ self.bookmarksMenu.setInitialActions(bookmarksActions) menu = mb.addMenu(self.tr('&Settings')) - menu.setTearOffEnabled(True) menu.addAction(self.prefAct) menu.addAction(self.acceptedLanguagesAct) menu.addAction(self.cookiesAct) @@ -1957,14 +2010,18 @@ menu.addAction(self.clearIconsAct) menu = mb.addMenu(self.tr("&Tools")) - menu.setTearOffEnabled(True) menu.addAction(self.feedsManagerAct) menu.addAction(self.siteInfoAct) menu.addSeparator() menu.addAction(self.synchronizationAct) - - menu = mb.addMenu(self.tr("&Window")) - menu.setTearOffEnabled(True) + menu.addSeparator() + vtMenu = menu.addMenu(UI.PixmapCache.getIcon("virustotal.png"), + self.tr("&VirusTotal")) + vtMenu.addAction(self.virustotalScanCurrentAct) + vtMenu.addAction(self.virustotalIpReportAct) + vtMenu.addAction(self.virustotalDomainReportAct) + + menu = mb.addMenu(self.tr("&Windows")) menu.addAction(self.showDownloadManagerAct) menu.addAction(self.showJavaScriptConsoleAct) menu.addAction(self.showTabManagerAct) @@ -1973,24 +2030,149 @@ menu.addAction(self.showTocAct) menu.addAction(self.showIndexAct) menu.addAction(self.showSearchAct) + menu.addSeparator() + self.__toolbarsMenu = menu.addMenu(self.tr("&Toolbars")) + self.__toolbarsMenu.aboutToShow.connect(self.__showToolbarsMenu) + self.__toolbarsMenu.triggered.connect(self.__TBMenuTriggered) mb.addSeparator() menu = mb.addMenu(self.tr('&Help')) - menu.setTearOffEnabled(True) menu.addAction(self.aboutAct) menu.addAction(self.aboutQtAct) menu.addSeparator() menu.addAction(self.whatsThisAct) + def __initSuperMenu(self): + """ + Private method to create the super menu and attach it to the super + menu button. + """ + self.__superMenu = QMenu(self) + + self.__superMenu.addAction(self.newTabAct) + self.__superMenu.addAction(self.newAct) + self.__superMenu.addAction(self.newPrivateAct) + self.__superMenu.addAction(self.openAct) + self.__superMenu.addAction(self.openTabAct) + self.__superMenu.addSeparator() + + menu = self.__superMenu.addMenu(self.tr("Save")) + if self.saveAsAct: + menu.addAction(self.saveAsAct) + menu.addAction(self.savePageScreenAct) + menu.addAction(self.saveVisiblePageScreenAct) + + if self.printPreviewAct or self.printAct or self.printPdfAct: + menu = self.__superMenu.addMenu(self.tr("Print")) + if self.printPreviewAct: + menu.addAction(self.printPreviewAct) + if self.printAct: + menu.addAction(self.printAct) + if self.printPdfAct: + menu.addAction(self.printPdfAct) + + # TODO: add "Send Page Link" action + self.__superMenu.addSeparator() + self.__superMenu.addAction(self.selectAllAct) + self.__superMenu.addAction(self.findAct) + self.__superMenu.addSeparator() + act = self.__superMenu.addAction(UI.PixmapCache.getIcon("history.png"), + self.tr("Show All History...")) + act.triggered.connect(self.historyMenu.showHistoryDialog) + self.__superMenu.addAction(self.bookmarksManageAct) + self.__superMenu.addSeparator() + self.__superMenu.addAction(self.prefAct) + + menu = self.__superMenu.addMenu(self.tr('Settings')) + menu.addAction(self.acceptedLanguagesAct) + menu.addAction(self.cookiesAct) + menu.addAction(self.flashCookiesAct) + menu.addAction(self.personalDataAct) + menu.addAction(self.greaseMonkeyAct) + menu.addAction(self.featurePermissionAct) + menu.addSeparator() + menu.addAction(self.editMessageFilterAct) + menu.addSeparator() + menu.addAction(self.searchEnginesAct) + menu.addSeparator() + menu.addAction(self.passwordsAct) + menu.addAction(self.certificateErrorsAct) + menu.addSeparator() + menu.addAction(self.zoomValuesAct) + menu.addAction(self.manageIconsAct) + menu.addSeparator() + menu.addAction(self.adblockAct) + menu.addSeparator() + menu.addMenu(self.__userAgentMenu) + menu.addAction(self.userAgentManagerAct) + menu.addSeparator() + if WebBrowserWindow._useQtHelp: + menu.addAction(self.manageQtHelpDocsAct) + menu.addAction(self.manageQtHelpFiltersAct) + menu.addAction(self.reindexDocumentationAct) + menu.addSeparator() + menu.addAction(self.clearPrivateDataAct) + menu.addAction(self.clearIconsAct) + menu.aboutToShow.connect( + self.__aboutToShowSettingsMenu) + + self.__superMenu.addSeparator() + + menu = self.__superMenu.addMenu(self.tr('&View')) + menu.addMenu(self.__toolbarsMenu) + windowsMenu = menu.addMenu(self.tr("&Windows")) + windowsMenu.addAction(self.showDownloadManagerAct) + windowsMenu.addAction(self.showJavaScriptConsoleAct) + windowsMenu.addAction(self.showTabManagerAct) + if WebBrowserWindow._useQtHelp: + windowsMenu.addSeparator() + windowsMenu.addAction(self.showTocAct) + windowsMenu.addAction(self.showIndexAct) + windowsMenu.addAction(self.showSearchAct) + menu.addSeparator() + menu.addAction(self.stopAct) + menu.addAction(self.reloadAct) + if WebBrowserWindow._useQtHelp: + menu.addSeparator() + menu.addAction(self.syncTocAct) + menu.addSeparator() + menu.addAction(self.zoomInAct) + menu.addAction(self.zoomResetAct) + menu.addAction(self.zoomOutAct) + menu.addSeparator() + menu.addMenu(self.__textEncodingMenu) + menu.addSeparator() + menu.addAction(self.pageSourceAct) + menu.addAction(self.fullScreenAct) + + self.__superMenu.addMenu(self.historyMenu) + self.__superMenu.addMenu(self.bookmarksMenu) + + menu = self.__superMenu.addMenu(self.tr("&Tools")) + menu.addAction(self.feedsManagerAct) + menu.addAction(self.siteInfoAct) + menu.addSeparator() + menu.addAction(self.synchronizationAct) + menu.addSeparator() + vtMenu = menu.addMenu(UI.PixmapCache.getIcon("virustotal.png"), + self.tr("&VirusTotal")) + vtMenu.addAction(self.virustotalScanCurrentAct) + vtMenu.addAction(self.virustotalIpReportAct) + vtMenu.addAction(self.virustotalDomainReportAct) + + self.__superMenu.addSeparator() + self.__superMenu.addAction(self.aboutAct) + self.__superMenu.addAction(self.aboutQtAct) + self.__superMenu.addSeparator() + self.__superMenu.addAction(self.exitAct) + + self.__navigationBar.superMenuButton().setMenu(self.__superMenu) + def __initToolbars(self): """ Private method to create the toolbars. """ - # save references to toolbars in order to hide them - # when going full screen - self.__toolbars = [] - filetb = self.addToolBar(self.tr("File")) filetb.setObjectName("FileToolBar") filetb.setIconSize(UI.Config.ToolBarIconSize) @@ -2014,7 +2196,7 @@ filetb.addSeparator() filetb.addAction(self.closeAct) filetb.addAction(self.exitAct) - self.__toolbars.append(filetb) + self.__toolbars["file"] = (filetb.windowTitle(), filetb) self.savePageScreenMenu = QMenu(self) self.savePageScreenMenu.addAction(self.savePageScreenAct) @@ -2034,7 +2216,7 @@ edittb.addAction(self.pasteAct) edittb.addSeparator() edittb.addAction(self.selectAllAct) - self.__toolbars.append(edittb) + self.__toolbars["edit"] = (edittb.windowTitle(), edittb) viewtb = self.addToolBar(self.tr("View")) viewtb.setObjectName("ViewToolBar") @@ -2044,7 +2226,7 @@ viewtb.addAction(self.zoomOutAct) viewtb.addSeparator() viewtb.addAction(self.fullScreenAct) - self.__toolbars.append(viewtb) + self.__toolbars["view"] = (viewtb.windowTitle(), viewtb) findtb = self.addToolBar(self.tr("Find")) findtb.setObjectName("FindToolBar") @@ -2052,7 +2234,7 @@ findtb.addAction(self.findAct) findtb.addAction(self.findNextAct) findtb.addAction(self.findPrevAct) - self.__toolbars.append(findtb) + self.__toolbars["find"] = (findtb.windowTitle(), findtb) if WebBrowserWindow._useQtHelp: filtertb = self.addToolBar(self.tr("Filter")) @@ -2066,7 +2248,7 @@ self.filterCombo.activated[str].connect( self.__filterQtHelpDocumentation) self.__setupFilterCombo() - self.__toolbars.append(filtertb) + self.__toolbars["filter"] = (filtertb.windowTitle(), filtertb) settingstb = self.addToolBar(self.tr("Settings")) settingstb.setObjectName("SettingsToolBar") @@ -2078,7 +2260,7 @@ settingstb.addAction(self.personalDataAct) settingstb.addAction(self.greaseMonkeyAct) settingstb.addAction(self.featurePermissionAct) - self.__toolbars.append(settingstb) + self.__toolbars["settings"] = (settingstb.windowTitle(), settingstb) toolstb = self.addToolBar(self.tr("Tools")) toolstb.setObjectName("ToolsToolBar") @@ -2087,37 +2269,23 @@ toolstb.addAction(self.siteInfoAct) toolstb.addSeparator() toolstb.addAction(self.synchronizationAct) - self.__toolbars.append(toolstb) + self.__toolbars["tools"] = (toolstb.windowTitle(), toolstb) helptb = self.addToolBar(self.tr("Help")) helptb.setObjectName("HelpToolBar") helptb.setIconSize(UI.Config.ToolBarIconSize) helptb.addAction(self.whatsThisAct) - self.__toolbars.append(helptb) + self.__toolbars["help"] = (helptb.windowTitle(), helptb) self.addToolBarBreak() vttb = self.addToolBar(self.tr("VirusTotal")) vttb.setObjectName("VirusTotalToolBar") vttb.setIconSize(UI.Config.ToolBarIconSize) vttb.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) - self.virustotalScanCurrentAct = vttb.addAction( - UI.PixmapCache.getIcon("virustotal.png"), - self.tr("Scan current site"), - self.__virusTotalScanCurrentSite) - self.virustotalIpReportAct = vttb.addAction( - UI.PixmapCache.getIcon("virustotal.png"), - self.tr("IP Address Report"), - self.__virusTotalIpAddressReport) - self.virustotalDomainReportAct = vttb.addAction( - UI.PixmapCache.getIcon("virustotal.png"), - self.tr("Domain Report"), - self.__virusTotalDomainReport) - if not Preferences.getWebBrowser("VirusTotalEnabled") or \ - Preferences.getWebBrowser("VirusTotalServiceKey") == "": - self.virustotalScanCurrentAct.setEnabled(False) - self.virustotalIpReportAct.setEnabled(False) - self.virustotalDomainReportAct.setEnabled(False) - self.__toolbars.append(vttb) + vttb.addAction(self.virustotalScanCurrentAct) + vttb.addAction(self.virustotalIpReportAct) + vttb.addAction(self.virustotalDomainReportAct) + self.__toolbars["virustotal"] = (vttb.windowTitle(), vttb) def __nextTab(self): """ @@ -2173,7 +2341,7 @@ @param link file to be displayed in the new window (string or QUrl) @param addNextTo reference to the browser to open the tab after - (HelpBrowser) + (WebBrowserView) @keyparam background flag indicating to open the tab in the background (bool) @return reference to the new browser @@ -3725,6 +3893,47 @@ """ return self.__navigationBar.searchEdit().openSearchManager() + def __createTextEncodingAction(self, codec, defaultCodec, parentMenu): + """ + Private method to create an action for the text encoding menu. + + @param codec name of the codec to create an action for + @type str + @param defaultCodec name of the default codec + @type str + @param parentMenu reference to the parent menu + @type QMenu + """ + act = QAction(codec, parentMenu) + act.setData(codec) + act.setCheckable(True) + if defaultCodec == codec: + act.setChecked(True) + + parentMenu.addAction(act) + + def __createTextEncodingSubmenu(self, title, codecNames, parentMenu): + """ + Private method to create a text encoding sub menu. + + @param title title of the menu + @type str + @param codecNames list of codec names for the menu + @type list of str + @param parentMenu reference to the parent menu + @type QMenu + """ + if codecNames: + defaultCodec = \ + QWebEngineSettings.defaultSettings().defaultTextEncoding()\ + .lower() + + menu = QMenu(title, parentMenu) + for codec in codecNames: + self.__createTextEncodingAction(codec, defaultCodec, menu) + + parentMenu.addMenu(menu) + def __aboutToShowTextEncodingMenu(self): """ Private slot to populate the text encoding menu. @@ -3732,8 +3941,11 @@ self.__textEncodingMenu.clear() codecs = [] - for codec in QTextCodec.availableCodecs(): - codecs.append(str(codec, encoding="utf-8").lower()) + for mib in QTextCodec.availableMibs(): + codec = str(QTextCodec.codecForMib(mib).name(), + encoding="utf-8").lower() + if codec not in codecs: + codecs.append(codec) codecs.sort() defaultTextEncoding = \ @@ -3741,47 +3953,46 @@ if defaultTextEncoding in codecs: currentCodec = defaultTextEncoding else: - currentCodec = "" - - isDefaultEncodingUsed = True - isoMenu = QMenu(self.tr("ISO"), self.__textEncodingMenu) - winMenu = QMenu(self.tr("Windows"), self.__textEncodingMenu) - isciiMenu = QMenu(self.tr("ISCII"), self.__textEncodingMenu) - uniMenu = QMenu(self.tr("Unicode"), self.__textEncodingMenu) - otherMenu = QMenu(self.tr("Other"), self.__textEncodingMenu) - ibmMenu = QMenu(self.tr("IBM"), self.__textEncodingMenu) + currentCodec = "system" + + isoCodecs = [] + winCodecs = [] + isciiCodecs = [] + uniCodecs = [] + ibmCodecs = [] + otherCodecs = [] for codec in codecs: - if codec.startswith(("iso", "latin", "csisolatin")): - act = isoMenu.addAction(codec) - elif codec.startswith(("windows", "cp1")): - act = winMenu.addAction(codec) + if codec.startswith(("iso", "latin")): + isoCodecs.append(codec) + elif codec.startswith(("windows")): + winCodecs.append(codec) elif codec.startswith("iscii"): - act = isciiMenu.addAction(codec) + isciiCodecs.append(codec) elif codec.startswith("utf"): - act = uniMenu.addAction(codec) - elif codec.startswith(("ibm", "csibm", "cp")): - act = ibmMenu.addAction(codec) + uniCodecs.append(codec) + elif codec.startswith(("ibm")): + ibmCodecs.append(codec) + elif codec == "system": + self.__createTextEncodingAction(codec, currentCodec, + self.__textEncodingMenu) else: - act = otherMenu.addAction(codec) - - act.setData(codec) - act.setCheckable(True) - if currentCodec == codec: - act.setChecked(True) - isDefaultEncodingUsed = False - - act = self.__textEncodingMenu.addAction( - self.tr("Default Encoding")) - act.setData("") - act.setCheckable(True) - act.setChecked(isDefaultEncodingUsed) - self.__textEncodingMenu.addMenu(uniMenu) - self.__textEncodingMenu.addMenu(isoMenu) - self.__textEncodingMenu.addMenu(winMenu) - self.__textEncodingMenu.addMenu(ibmMenu) - self.__textEncodingMenu.addMenu(isciiMenu) - self.__textEncodingMenu.addMenu(otherMenu) + otherCodecs.append(codec) + + if not self.__textEncodingMenu.isEmpty(): + self.__textEncodingMenu.addSeparator() + self.__createTextEncodingSubmenu(self.tr("ISO"), isoCodecs, + self.__textEncodingMenu) + self.__createTextEncodingSubmenu(self.tr("Unicode"), uniCodecs, + self.__textEncodingMenu) + self.__createTextEncodingSubmenu(self.tr("Windows"), winCodecs, + self.__textEncodingMenu) + self.__createTextEncodingSubmenu(self.tr("ISCII"), isciiCodecs, + self.__textEncodingMenu) + self.__createTextEncodingSubmenu(self.tr("IBM"), ibmCodecs, + self.__textEncodingMenu) + self.__createTextEncodingSubmenu(self.tr("Other"), otherCodecs, + self.__textEncodingMenu) def __setTextEncoding(self, act): """ @@ -3796,6 +4007,143 @@ else: QWebEngineSettings.defaultSettings().setDefaultTextEncoding(codec) + def __populateToolbarsMenu(self, menu): + """ + Private method to populate the toolbars menu. + + @param menu reference to the menu to be populated + @type QMenu + """ + menu.clear() + + act = menu.addAction(self.tr("Menu Bar")) + act.setCheckable(True) + act.setChecked(not self.menuBar().isHidden()) + act.setData("menubar") + + act = menu.addAction(self.tr("Bookmarks")) + act.setCheckable(True) + act.setChecked(not self.__bookmarksToolBar.isHidden()) + act.setData("bookmarks") + + act = menu.addAction(self.tr("Status Bar")) + act.setCheckable(True) + act.setChecked(not self.statusBar().isHidden()) + act.setData("statusbar") + + if Preferences.getWebBrowser("ShowToolbars"): + menu.addSeparator() + for name, (text, tb) in sorted(self.__toolbars.items(), + key=lambda t: t[1][0]): + act = menu.addAction(text) + act.setCheckable(True) + act.setChecked(not tb.isHidden()) + act.setData(name) + menu.addSeparator() + act = menu.addAction(self.tr("&Show all")) + act.setData("__SHOW__") + act = menu.addAction(self.tr("&Hide all")) + act.setData("__HIDE__") + + def createPopupMenu(self): + """ + Public method to create the toolbars menu for Qt. + + @return toolbars menu + @rtype QMenu + """ + menu = QMenu(self) + menu.triggered.connect(self.__TBMenuTriggered) + + self.__populateToolbarsMenu(menu) + + return menu + + def __showToolbarsMenu(self): + """ + Private slot to display the Toolbars menu. + """ + self.__populateToolbarsMenu(self.__toolbarsMenu) + + def __TBMenuTriggered(self, act): + """ + Private method to handle the toggle of a toolbar via the Window-> + Toolbars submenu or the toolbars popup menu. + + @param act reference to the action that was triggered + @type QAction + """ + name = act.data() + if name: + if name == "bookmarks": + # special handling of bookmarks toolbar + self.__setBookmarksToolbarVisibility(act.isChecked()) + + elif name == "menubar": + # special treatment of the menu bar + self.__setMenuBarVisibility(act.isChecked()) + + elif name == "statusbar": + # special treatment of the status bar + self.__setStatusBarVisible(act.isChecked()) + + elif name == "__SHOW__": + for text, tb in list(self.__toolbars.values()): + tb.show() + + elif name == "__HIDE__": + for text, tb in list(self.__toolbars.values()): + tb.hide() + + else: + tb = self.__toolbars[name][1] + if act.isChecked(): + tb.show() + else: + tb.hide() + + def __setBookmarksToolbarVisibility(self, visible): + """ + Private method to set the visibility of the bookmarks toolbar. + + @param visible flag indicating the toolbar visibility + @type bool + """ + if visible: + self.__bookmarksToolBar.show() + else: + self.__bookmarksToolBar.hide() + + # save state for next invokation + Preferences.setWebBrowser("BookmarksToolBarVisible", visible) + + def __setMenuBarVisibility(self, visible): + """ + Private method to set the visibility of the menu bar. + + @param visible flag indicating the menu bar visibility + @type bool + """ + if visible: + self.menuBar().show() + self.__navigationBar.superMenuButton().hide() + else: + self.menuBar().hide() + self.__navigationBar.superMenuButton().show() + + Preferences.setWebBrowser("MenuBarVisible", visible) + + def __setStatusBarVisible(self, visible): + """ + Private method to set the visibility of the status bar. + + @param visible flag indicating the status bar visibility + @type bool + """ + self.statusBar().setVisible(visible) + + Preferences.setWebBrowser("StatusBarVisible", visible) + def eventMouseButtons(self): """ Public method to get the last recorded mouse buttons. @@ -4005,8 +4353,10 @@ self.statusBar().hide() self.__searchWidget.hide() self.__tabWidget.tabBar().hide() - for toolbar in self.__toolbars: - toolbar.hide() + if Preferences.getWebBrowser("ShowToolbars"): + for title, toolbar in self.__toolbars.values(): + if toolbar is not self.__bookmarksToolBar: + toolbar.hide() self.__navigationBar.exitFullScreenButton().setVisible(True) self.__navigationContainer.hide() @@ -4015,8 +4365,10 @@ # leave full screen mode self.setWindowState(self.__windowStates) self.__htmlFullScreen = False - self.menuBar().show() - self.statusBar().show() + if Preferences.getWebBrowser("MenuBarVisible"): + self.menuBar().show() + if Preferences.getWebBrowser("StatusBarVisible"): + self.statusBar().show() self.restoreState(self.__toolbarStates) self.__tabWidget.tabBar().show() self.__navigationBar.exitFullScreenButton().setVisible(False)