Wed, 03 Feb 2016 20:05:29 +0100
Continued with the web view.
# -*- coding: utf-8 -*- # Copyright (c) 2002 - 2016 Detlev Offenbach <detlev@die-offenbachs.de> # """ Module implementing the web browser main window. """ from __future__ import unicode_literals try: str = unicode except NameError: pass import os from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QByteArray, QSize, QTimer, \ QUrl, QThread, QTextCodec from PyQt5.QtGui import QDesktopServices, QKeySequence, QFont, QFontMetrics, \ QIcon from PyQt5.QtWidgets import QWidget, QVBoxLayout, QSizePolicy, QDockWidget, \ QComboBox, QLabel, QSplitter, QMenu, QToolButton, QLineEdit, \ QApplication, QWhatsThis, QDialog, QHBoxLayout, QProgressBar, QAction, \ QInputDialog ##from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest from PyQt5.QtWebEngineWidgets import QWebEngineSettings, QWebEnginePage try: from PyQt5.QtHelp import QHelpEngine, QHelpEngineCore, QHelpSearchQuery QTHELP_AVAILABLE = True except ImportError: QTHELP_AVAILABLE = False ## ##from .Network.NetworkAccessManager import SSL_AVAILABLE ## ##from .data import icons_rc # __IGNORE_WARNING__ ##from .data import html_rc # __IGNORE_WARNING__ ##from .data import javascript_rc # __IGNORE_WARNING__ ## from E5Gui.E5Action import E5Action from E5Gui import E5MessageBox, E5FileDialog, E5ErrorMessage from E5Gui.E5MainWindow import E5MainWindow from E5Gui.E5Application import e5App ##from E5Gui.E5ZoomWidget import E5ZoomWidget ## ##from E5Network.E5NetworkIcon import E5NetworkIcon import Preferences from Preferences import Shortcuts import Utilities import UI.PixmapCache import UI.Config from UI.Info import Version class WebBrowserWindow(E5MainWindow): """ Class implementing the web browser main window. @signal webBrowserClosed() emitted after the window was requested to close @signal zoomTextOnlyChanged(bool) emitted after the zoom text only setting was changed """ ## zoomTextOnlyChanged = pyqtSignal(bool) webBrowserClosed = pyqtSignal() ## privacyChanged = pyqtSignal(bool) BrowserWindows = [] ## maxMenuFilePathLen = 75 ## _fromEric = False UseQtHelp = QTHELP_AVAILABLE ## _networkAccessManager = None ## _cookieJar = None ## _helpEngine = None ## _bookmarksManager = None ## _historyManager = None ## _passwordManager = None ## _adblockManager = None ## _downloadManager = None ## _feedsManager = None ## _userAgentsManager = None ## _syncManager = None ## _speedDial = None ## _personalInformationManager = None ## _greaseMonkeyManager = None _notification = None ## _featurePermissionManager = None ## _flashCookieManager = None ## _zoomManager = None def __init__(self, home, path, parent, name, fromEric=False, initShortcutsOnly=False, searchWord=None): """ Constructor @param home the URL to be shown (string) @param path the path of the working dir (usually '.') (string) @param parent parent widget of this window (QWidget) @param name name of this window (string) @param fromEric flag indicating whether it was called from within eric6 (boolean) @keyparam initShortcutsOnly flag indicating to just initialize the keyboard shortcuts (boolean) @keyparam searchWord word to search for (string) """ super(WebBrowserWindow, self).__init__(parent) self.setObjectName(name) self.setWindowTitle(self.tr("eric6 Web Browser")) self.__fromEric = fromEric WebBrowserWindow._fromEric = fromEric self.__initShortcutsOnly = initShortcutsOnly self.setWindowIcon(UI.PixmapCache.getIcon("ericWeb.png")) self.__mHistory = [] self.__lastConfigurationPageName = "" ## self.__eventMouseButtons = Qt.NoButton ## self.__eventKeyboardModifiers = Qt.NoModifier ## if self.__initShortcutsOnly: self.__initActions() else: # TODO: implement this from .SearchWidget import SearchWidget ## from .HelpTocWidget import HelpTocWidget ## from .HelpIndexWidget import HelpIndexWidget ## from .HelpSearchWidget import HelpSearchWidget ## from .HelpBrowserWV import HelpBrowser from .WebBrowserTabWidget import WebBrowserTabWidget ## from .AdBlock.AdBlockIcon import AdBlockIcon ## from .VirusTotal.VirusTotalApi import VirusTotalAPI # TODO: allow using Qt Help even if not called from eric6 WebBrowserWindow.setUseQtHelp(self.__fromEric) if not self.__fromEric: self.setStyle(Preferences.getUI("Style"), Preferences.getUI("StyleSheet")) # TODO: Check if this is needed with QtWebEngine # initialize some SSL stuff ## from E5Network.E5SslUtilities import initSSL ## initSSL() # TODO: do these once Qt 5.6 is available ## if WebBrowserWindow.UseQtHelp: ## self.__helpEngine = \ ## QHelpEngine(os.path.join(Utilities.getConfigDir(), ## "browser", "eric6help.qhc"), self) ## self.__removeOldDocumentation() ## self.__helpEngine.warning.connect(self.__warning) ## else: ## self.__helpEngine = None ## self.__helpInstaller = None ## self.__zoomWidget = E5ZoomWidget( ## UI.PixmapCache.getPixmap("zoomOut.png"), ## UI.PixmapCache.getPixmap("zoomIn.png"), ## UI.PixmapCache.getPixmap("zoomReset.png"), self) ## self.statusBar().addPermanentWidget(self.__zoomWidget) ## self.__zoomWidget.setMapping( ## HelpBrowser.ZoomLevels, HelpBrowser.ZoomLevelDefault) ## self.__zoomWidget.valueChanged.connect(self.__zoomValueChanged) ## self.__tabWidget = WebBrowserTabWidget(self) self.__tabWidget.currentChanged[int].connect(self.__currentChanged) self.__tabWidget.titleChanged.connect(self.__titleChanged) self.__tabWidget.showMessage.connect(self.statusBar().showMessage) self.__tabWidget.browserClosed.connect(self.__browserClosed) ## self.__tabWidget.browserZoomValueChanged.connect( ## self.__zoomWidget.setValue) self.__searchWidget = SearchWidget(self, self) centralWidget = QWidget() layout = QVBoxLayout() layout.setContentsMargins(1, 1, 1, 1) layout.addWidget(self.__tabWidget) layout.addWidget(self.__searchWidget) self.__tabWidget.setSizePolicy( QSizePolicy.Preferred, QSizePolicy.Expanding) centralWidget.setLayout(layout) self.setCentralWidget(centralWidget) self.__searchWidget.hide() # TODO: do these once Qt 5.6 is available ## if WebBrowserWindow.UseQtHelp: ## # setup the TOC widget ## self.__tocWindow = HelpTocWidget(self.__helpEngine, self) ## self.__tocDock = QDockWidget(self.tr("Contents"), self) ## self.__tocDock.setObjectName("TocWindow") ## self.__tocDock.setWidget(self.__tocWindow) ## self.addDockWidget(Qt.LeftDockWidgetArea, self.__tocDock) ## ## # setup the index widget ## self.__indexWindow = HelpIndexWidget(self.__helpEngine, self) ## self.__indexDock = QDockWidget(self.tr("Index"), self) ## self.__indexDock.setObjectName("IndexWindow") ## self.__indexDock.setWidget(self.__indexWindow) ## self.addDockWidget(Qt.LeftDockWidgetArea, self.__indexDock) ## ## # setup the search widget ## self.__searchWord = searchWord ## self.__indexing = False ## self.__indexingProgress = None ## self.__searchEngine = self.__helpEngine.searchEngine() ## self.__searchEngine.indexingStarted.connect( ## self.__indexingStarted) ## self.__searchEngine.indexingFinished.connect( ## self.__indexingFinished) ## self.__searchWindow = HelpSearchWidget( ## self.__searchEngine, self) ## self.__searchDock = QDockWidget(self.tr("Search"), self) ## self.__searchDock.setObjectName("SearchWindow") ## self.__searchDock.setWidget(self.__searchWindow) ## self.addDockWidget(Qt.LeftDockWidgetArea, self.__searchDock) ## if Preferences.getWebBrowser("SaveGeometry"): g = Preferences.getGeometry("WebBrowserGeometry") else: g = QByteArray() if g.isEmpty(): s = QSize(800, 800) self.resize(s) else: self.restoreGeometry(g) ## self.__setIconDatabasePath() self.__initWebEngineSettings() self.__initActions() self.__initMenus() self.__initToolbars() ## self.historyManager() ## ## syncMgr = self.syncManager() ## syncMgr.syncMessage.connect(self.statusBar().showMessage) ## syncMgr.syncError.connect(self.statusBar().showMessage) ## self.__tabWidget.newBrowser(home) self.__tabWidget.currentBrowser().setFocus() WebBrowserWindow.BrowserWindows.append(self) ## self.__adBlockIcon = AdBlockIcon(self) ## self.statusBar().addPermanentWidget(self.__adBlockIcon) ## self.__adBlockIcon.setEnabled( ## Preferences.getHelp("AdBlockEnabled")) ## self.__tabWidget.currentChanged[int].connect( ## self.__adBlockIcon.currentChanged) ## self.__tabWidget.sourceChanged.connect( ## self.__adBlockIcon.sourceChanged) ## ## self.networkIcon = E5NetworkIcon(self) ## self.statusBar().addPermanentWidget(self.networkIcon) ## QDesktopServices.setUrlHandler("http", self.__linkActivated) QDesktopServices.setUrlHandler("https", self.__linkActivated) # setup connections self.__activating = False # TODO: do these once Qt 5.6 is available ## if WebBrowserWindow.UseQtHelp: ## # TOC window ## self.__tocWindow.linkActivated.connect(self.__linkActivated) ## self.__tocWindow.escapePressed.connect( ## self.__activateCurrentBrowser) ## # index window ## self.__indexWindow.linkActivated.connect(self.__linkActivated) ## self.__indexWindow.linksActivated.connect( ## self.__linksActivated) ## self.__indexWindow.escapePressed.connect( ## self.__activateCurrentBrowser) ## # search window ## self.__searchWindow.linkActivated.connect( ## self.__linkActivated) ## self.__searchWindow.escapePressed.connect( ## self.__activateCurrentBrowser) state = Preferences.getWebBrowser("WebBrowserState") self.restoreState(state) ## self.__initHelpDb() ## self.__virusTotal = VirusTotalAPI(self) ## self.__virusTotal.submitUrlError.connect( ## self.__virusTotalSubmitUrlError) ## self.__virusTotal.urlScanReport.connect( ## self.__virusTotalUrlScanReport) ## self.__virusTotal.fileScanReport.connect( ## self.__virusTotalFileScanReport) ## self.__previewer = None self.__shutdownCalled = False ## self.flashCookieManager() ## # TODO: do these once Qt 5.6 is available ## if WebBrowserWindow.UseQtHelp: ## QTimer.singleShot(0, self.__lookForNewDocumentation) ## if self.__searchWord is not None: ## QTimer.singleShot(0, self.__searchForWord) ## self.__lastActiveWindow = None e5App().focusChanged[QWidget, QWidget].connect( self.__appFocusChanged) ## ## QTimer.singleShot(0, syncMgr.loadSettings) def __del__(self): """ Special method called during object destruction. Note: This empty variant seems to get rid of the Qt message 'Warning: QBasicTimer::start: QBasicTimer can only be used with threads started with QThread' """ pass ## def __setIconDatabasePath(self, enable=True): ## """ ## Private method to set the favicons path. ## ## @param enable flag indicating to enabled icon storage (boolean) ## """ ## if enable: ## iconDatabasePath = os.path.join(Utilities.getConfigDir(), ## "browser", "favicons") ## if not os.path.exists(iconDatabasePath): ## os.makedirs(iconDatabasePath) ## else: ## iconDatabasePath = "" # setting an empty path disables it ## QWebSettings.setIconDatabasePath(iconDatabasePath) ## def __initWebEngineSettings(self): """ Private method to set the global web settings. """ standardFont = Preferences.getWebBrowser("StandardFont") fixedFont = Preferences.getWebBrowser("FixedFont") settings = QWebEngineSettings.globalSettings() ## settings.setAttribute(QWebSettings.DeveloperExtrasEnabled, True) settings.setFontFamily(QWebEngineSettings.StandardFont, standardFont.family()) settings.setFontSize(QWebEngineSettings.DefaultFontSize, standardFont.pointSize()) settings.setFontFamily(QWebEngineSettings.FixedFont, fixedFont.family()) settings.setFontSize(QWebEngineSettings.DefaultFixedFontSize, fixedFont.pointSize()) ## styleSheet = Preferences.getHelp("UserStyleSheet") ## settings.setUserStyleSheetUrl(self.__userStyleSheet(styleSheet)) ## settings.setAttribute( QWebEngineSettings.AutoLoadImages, Preferences.getWebBrowser("AutoLoadImages")) ## settings.setAttribute( ## QWebSettings.JavaEnabled, ## Preferences.getHelp("JavaEnabled")) settings.setAttribute( QWebEngineSettings.JavascriptEnabled, Preferences.getWebBrowser("JavaScriptEnabled")) settings.setAttribute( QWebEngineSettings.JavascriptCanOpenWindows, Preferences.getWebBrowser("JavaScriptCanOpenWindows")) settings.setAttribute( QWebEngineSettings.JavascriptCanAccessClipboard, Preferences.getWebBrowser("JavaScriptCanAccessClipboard")) ## settings.setAttribute( ## QWebSettings.PluginsEnabled, ## Preferences.getHelp("PluginsEnabled")) ## if hasattr(QWebSettings, "PrintElementBackgrounds"): ## settings.setAttribute( ## QWebSettings.PrintElementBackgrounds, ## Preferences.getHelp("PrintBackgrounds")) ## ## if hasattr(QWebSettings, "setOfflineStoragePath"): ## settings.setAttribute( ## QWebSettings.OfflineStorageDatabaseEnabled, ## Preferences.getHelp("OfflineStorageDatabaseEnabled")) ## webDatabaseDir = os.path.join( ## Utilities.getConfigDir(), "browser", "webdatabases") ## if not os.path.exists(webDatabaseDir): ## os.makedirs(webDatabaseDir) ## settings.setOfflineStoragePath(webDatabaseDir) ## settings.setOfflineStorageDefaultQuota( ## Preferences.getHelp("OfflineStorageDatabaseQuota") * ## 1024 * 1024) ## ## if hasattr(QWebSettings, "OfflineWebApplicationCacheEnabled"): ## settings.setAttribute( ## QWebSettings.OfflineWebApplicationCacheEnabled, ## Preferences.getHelp("OfflineWebApplicationCacheEnabled")) ## appCacheDir = os.path.join( ## Utilities.getConfigDir(), "browser", "webappcaches") ## if not os.path.exists(appCacheDir): ## os.makedirs(appCacheDir) ## settings.setOfflineWebApplicationCachePath(appCacheDir) ## settings.setOfflineWebApplicationCacheQuota( ## Preferences.getHelp("OfflineWebApplicationCacheQuota") * ## 1024 * 1024) ## settings.setAttribute( QWebEngineSettings.LocalStorageEnabled, Preferences.getWebBrowser("LocalStorageEnabled")) ## localStorageDir = os.path.join( ## Utilities.getConfigDir(), "browser", "weblocalstorage") ## if not os.path.exists(localStorageDir): ## os.makedirs(localStorageDir) ## settings.setLocalStoragePath(localStorageDir) ## ## if hasattr(QWebSettings, "DnsPrefetchEnabled"): ## settings.setAttribute( ## QWebSettings.DnsPrefetchEnabled, ## Preferences.getHelp("DnsPrefetchEnabled")) ## settings.setDefaultTextEncoding( Preferences.getWebBrowser("DefaultTextEncoding")) settings.setAttribute( QWebEngineSettings.SpatialNavigationEnabled, Preferences.getWebBrowser("SpatialNavigationEnabled")) settings.setAttribute( QWebEngineSettings.LinksIncludedInFocusChain, Preferences.getWebBrowser("LinksIncludedInFocusChain")) settings.setAttribute( QWebEngineSettings.LocalContentCanAccessRemoteUrls, Preferences.getWebBrowser("LocalContentCanAccessRemoteUrls")) settings.setAttribute( QWebEngineSettings.LocalContentCanAccessFileUrls, Preferences.getWebBrowser("LocalContentCanAccessFileUrls")) settings.setAttribute( QWebEngineSettings.XSSAuditingEnabled, Preferences.getWebBrowser("XSSAuditingEnabled")) ## if hasattr(QWebSettings, "SiteSpecificQuirksEnabled"): ## settings.setAttribute( ## QWebSettings.SiteSpecificQuirksEnabled, ## Preferences.getHelp("SiteSpecificQuirksEnabled")) ## ## QWebSecurityOrigin.addLocalScheme("eric") settings.setAttribute( QWebEngineSettings.ScrollAnimatorEnabled, Preferences.getWebBrowser("ScrollAnimatorEnabled")) settings.setAttribute( QWebEngineSettings.ErrorPageEnabled, Preferences.getWebBrowser("ErrorPageEnabled")) def __initActions(self): """ Private method to define the user interface actions. """ # list of all actions self.__actions = [] self.newTabAct = E5Action( self.tr('New Tab'), UI.PixmapCache.getIcon("tabNew.png"), self.tr('&New Tab'), QKeySequence(self.tr("Ctrl+T", "File|New Tab")), 0, self, 'webbrowser_file_new_tab') self.newTabAct.setStatusTip(self.tr('Open a new web browser tab')) self.newTabAct.setWhatsThis(self.tr( """<b>New Tab</b>""" """<p>This opens a new web browser tab.</p>""" )) if not self.__initShortcutsOnly: self.newTabAct.triggered.connect(self.newTab) self.__actions.append(self.newTabAct) self.newAct = E5Action( self.tr('New Window'), UI.PixmapCache.getIcon("newWindow.png"), self.tr('New &Window'), QKeySequence(self.tr("Ctrl+N", "File|New Window")), 0, self, 'webbrowser_file_new_window') self.newAct.setStatusTip(self.tr('Open a new web browser window')) self.newAct.setWhatsThis(self.tr( """<b>New Window</b>""" """<p>This opens a new web browser window.</p>""" )) if not self.__initShortcutsOnly: self.newAct.triggered.connect(self.newWindow) self.__actions.append(self.newAct) self.openAct = E5Action( self.tr('Open File'), UI.PixmapCache.getIcon("open.png"), self.tr('&Open File'), QKeySequence(self.tr("Ctrl+O", "File|Open")), 0, self, 'webbrowser_file_open') self.openAct.setStatusTip(self.tr('Open a file for display')) self.openAct.setWhatsThis(self.tr( """<b>Open File</b>""" """<p>This opens a new file for display.""" """ It pops up a file selection dialog.</p>""" )) if not self.__initShortcutsOnly: self.openAct.triggered.connect(self.__openFile) self.__actions.append(self.openAct) self.openTabAct = E5Action( self.tr('Open File in New Tab'), UI.PixmapCache.getIcon("openNewTab.png"), self.tr('Open File in New &Tab'), QKeySequence(self.tr("Shift+Ctrl+O", "File|Open in new tab")), 0, self, 'webbrowser_file_open_tab') self.openTabAct.setStatusTip( self.tr('Open a file for display in a new tab')) self.openTabAct.setWhatsThis(self.tr( """<b>Open File in New Tab</b>""" """<p>This opens a new file for display in a new tab.""" """ It pops up a file selection dialog.</p>""" )) if not self.__initShortcutsOnly: self.openTabAct.triggered.connect(self.__openFileNewTab) self.__actions.append(self.openTabAct) ## ## self.saveAsAct = E5Action( ## self.tr('Save As'), ## UI.PixmapCache.getIcon("fileSaveAs.png"), ## self.tr('&Save As...'), ## QKeySequence(self.tr("Shift+Ctrl+S", "File|Save As")), ## 0, self, 'webbrowser_file_save_as') ## self.saveAsAct.setStatusTip( ## self.tr('Save the current page to disk')) ## self.saveAsAct.setWhatsThis(self.tr( ## """<b>Save As...</b>""" ## """<p>Saves the current page to disk.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.saveAsAct.triggered.connect(self.__savePageAs) ## self.__actions.append(self.saveAsAct) ## ## self.savePageScreenAct = E5Action( ## self.tr('Save Page Screen'), ## UI.PixmapCache.getIcon("fileSavePixmap.png"), ## self.tr('Save Page Screen...'), ## 0, 0, self, 'webbrowser_file_save_page_screen') ## self.savePageScreenAct.setStatusTip( ## self.tr('Save the current page as a screen shot')) ## self.savePageScreenAct.setWhatsThis(self.tr( ## """<b>Save Page Screen...</b>""" ## """<p>Saves the current page as a screen shot.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.savePageScreenAct.triggered.connect(self.__savePageScreen) ## self.__actions.append(self.savePageScreenAct) ## ## self.saveVisiblePageScreenAct = E5Action( ## self.tr('Save Visible Page Screen'), ## UI.PixmapCache.getIcon("fileSaveVisiblePixmap.png"), ## self.tr('Save Visible Page Screen...'), ## 0, 0, self, 'webbrowser_file_save_visible_page_screen') ## self.saveVisiblePageScreenAct.setStatusTip( ## self.tr('Save the visible part of the current page as a' ## ' screen shot')) ## self.saveVisiblePageScreenAct.setWhatsThis(self.tr( ## """<b>Save Visible Page Screen...</b>""" ## """<p>Saves the visible part of the current page as a""" ## """ screen shot.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.saveVisiblePageScreenAct.triggered.connect( ## self.__saveVisiblePageScreen) ## self.__actions.append(self.saveVisiblePageScreenAct) # TODO: re-enable when bookmarks are done ## bookmarksManager = self.bookmarksManager() ## self.importBookmarksAct = E5Action( ## self.tr('Import Bookmarks'), ## self.tr('&Import Bookmarks...'), ## 0, 0, self, 'webbrowser_file_import_bookmarks') ## self.importBookmarksAct.setStatusTip( ## self.tr('Import bookmarks from other browsers')) ## self.importBookmarksAct.setWhatsThis(self.tr( ## """<b>Import Bookmarks</b>""" ## """<p>Import bookmarks from other browsers.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.importBookmarksAct.triggered.connect( ## bookmarksManager.importBookmarks) ## self.__actions.append(self.importBookmarksAct) ## ## self.exportBookmarksAct = E5Action( ## self.tr('Export Bookmarks'), ## self.tr('&Export Bookmarks...'), ## 0, 0, self, 'webbrowser_file_export_bookmarks') ## self.exportBookmarksAct.setStatusTip( ## self.tr('Export the bookmarks into a file')) ## self.exportBookmarksAct.setWhatsThis(self.tr( ## """<b>Export Bookmarks</b>""" ## """<p>Export the bookmarks into a file.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.exportBookmarksAct.triggered.connect( ## bookmarksManager.exportBookmarks) ## self.__actions.append(self.exportBookmarksAct) # TODO: re-enable when print stuff is done ## self.printAct = E5Action( ## self.tr('Print'), ## UI.PixmapCache.getIcon("print.png"), ## self.tr('&Print'), ## QKeySequence(self.tr("Ctrl+P", "File|Print")), ## 0, self, 'webbrowser_file_print') ## self.printAct.setStatusTip(self.tr('Print the displayed help')) ## self.printAct.setWhatsThis(self.tr( ## """<b>Print</b>""" ## """<p>Print the displayed help text.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.printAct.triggered.connect(self.__tabWidget.printBrowser) ## self.__actions.append(self.printAct) ## ## self.printPdfAct = E5Action( ## self.tr('Print as PDF'), ## UI.PixmapCache.getIcon("printPdf.png"), ## self.tr('Print as PDF'), ## 0, 0, self, 'webbrowser_file_print_pdf') ## self.printPdfAct.setStatusTip(self.tr( ## 'Print the displayed help as PDF')) ## self.printPdfAct.setWhatsThis(self.tr( ## """<b>Print as PDF</b>""" ## """<p>Print the displayed help text as a PDF file.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.printPdfAct.triggered.connect( ## self.__tabWidget.printBrowserPdf) ## self.__actions.append(self.printPdfAct) ## ## self.printPreviewAct = E5Action( ## self.tr('Print Preview'), ## UI.PixmapCache.getIcon("printPreview.png"), ## self.tr('Print Preview'), ## 0, 0, self, 'webbrowser_file_print_preview') ## self.printPreviewAct.setStatusTip(self.tr( ## 'Print preview of the displayed help')) ## self.printPreviewAct.setWhatsThis(self.tr( ## """<b>Print Preview</b>""" ## """<p>Print preview of the displayed help text.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.printPreviewAct.triggered.connect( ## self.__tabWidget.printPreviewBrowser) ## self.__actions.append(self.printPreviewAct) self.closeAct = E5Action( self.tr('Close'), UI.PixmapCache.getIcon("close.png"), self.tr('&Close'), QKeySequence(self.tr("Ctrl+W", "File|Close")), 0, self, 'webbrowser_file_close') self.closeAct.setStatusTip(self.tr( 'Close the current help window')) self.closeAct.setWhatsThis(self.tr( """<b>Close</b>""" """<p>Closes the current web browser window.</p>""" )) if not self.__initShortcutsOnly: self.closeAct.triggered.connect(self.__tabWidget.closeBrowser) self.__actions.append(self.closeAct) self.closeAllAct = E5Action( self.tr('Close All'), self.tr('Close &All'), 0, 0, self, 'webbrowser_file_close_all') self.closeAllAct.setStatusTip(self.tr('Close all help windows')) self.closeAllAct.setWhatsThis(self.tr( """<b>Close All</b>""" """<p>Closes all web browser windows except the first one.</p>""" )) if not self.__initShortcutsOnly: self.closeAllAct.triggered.connect( self.__tabWidget.closeAllBrowsers) self.__actions.append(self.closeAllAct) # TODO: re-enable when Private Browsing is done ## self.privateBrowsingAct = E5Action( ## self.tr('Private Browsing'), ## UI.PixmapCache.getIcon("privateBrowsing.png"), ## self.tr('Private &Browsing'), ## 0, 0, self, 'webbrowser_file_private_browsing') ## self.privateBrowsingAct.setStatusTip(self.tr('Private Browsing')) ## self.privateBrowsingAct.setWhatsThis(self.tr( ## """<b>Private Browsing</b>""" ## """<p>Enables private browsing. In this mode no history is""" ## """ recorded anymore.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.privateBrowsingAct.triggered.connect( ## self.__privateBrowsing) ## self.privateBrowsingAct.setCheckable(True) ## self.__actions.append(self.privateBrowsingAct) self.exitAct = E5Action( self.tr('Quit'), UI.PixmapCache.getIcon("exit.png"), self.tr('&Quit'), QKeySequence(self.tr("Ctrl+Q", "File|Quit")), 0, self, 'webbrowser_file_quit') self.exitAct.setStatusTip(self.tr('Quit the eric6 Web Browser')) self.exitAct.setWhatsThis(self.tr( """<b>Quit</b>""" """<p>Quit the eric6 Web Browser.</p>""" )) if not self.__initShortcutsOnly: if self.__fromEric: self.exitAct.triggered.connect(self.close) else: self.exitAct.triggered.connect(self.__closeAllWindows) self.__actions.append(self.exitAct) self.backAct = E5Action( self.tr('Backward'), UI.PixmapCache.getIcon("back.png"), self.tr('&Backward'), QKeySequence(self.tr("Alt+Left", "Go|Backward")), QKeySequence(self.tr("Backspace", "Go|Backward")), self, 'webbrowser_go_backward') self.backAct.setStatusTip(self.tr('Move one screen backward')) self.backAct.setWhatsThis(self.tr( """<b>Backward</b>""" """<p>Moves one screen backward. If none is""" """ available, this action is disabled.</p>""" )) if not self.__initShortcutsOnly: self.backAct.triggered.connect(self.__backward) self.__actions.append(self.backAct) self.forwardAct = E5Action( self.tr('Forward'), UI.PixmapCache.getIcon("forward.png"), self.tr('&Forward'), QKeySequence(self.tr("Alt+Right", "Go|Forward")), QKeySequence(self.tr("Shift+Backspace", "Go|Forward")), self, 'webbrowser_go_foreward') self.forwardAct.setStatusTip(self.tr( 'Move one screen forward')) self.forwardAct.setWhatsThis(self.tr( """<b>Forward</b>""" """<p>Moves one screen forward. If none is""" """ available, this action is disabled.</p>""" )) if not self.__initShortcutsOnly: self.forwardAct.triggered.connect(self.__forward) self.__actions.append(self.forwardAct) self.homeAct = E5Action( self.tr('Home'), UI.PixmapCache.getIcon("home.png"), self.tr('&Home'), QKeySequence(self.tr("Ctrl+Home", "Go|Home")), 0, self, 'webbrowser_go_home') self.homeAct.setStatusTip(self.tr( 'Move to the initial help screen')) self.homeAct.setWhatsThis(self.tr( """<b>Home</b>""" """<p>Moves to the initial screen.</p>""" )) if not self.__initShortcutsOnly: self.homeAct.triggered.connect(self.__home) self.__actions.append(self.homeAct) self.reloadAct = E5Action( self.tr('Reload'), UI.PixmapCache.getIcon("reload.png"), self.tr('&Reload'), QKeySequence(self.tr("Ctrl+R", "Go|Reload")), QKeySequence(self.tr("F5", "Go|Reload")), self, 'webbrowser_go_reload') self.reloadAct.setStatusTip(self.tr( 'Reload the current screen')) self.reloadAct.setWhatsThis(self.tr( """<b>Reload</b>""" """<p>Reloads the current screen.</p>""" )) if not self.__initShortcutsOnly: self.reloadAct.triggered.connect(self.__reload) self.__actions.append(self.reloadAct) # TODO: add 'Reload bypassing cache' or use that for above self.stopAct = E5Action( self.tr('Stop'), UI.PixmapCache.getIcon("stopLoading.png"), self.tr('&Stop'), QKeySequence(self.tr("Ctrl+.", "Go|Stop")), QKeySequence(self.tr("Esc", "Go|Stop")), self, 'webbrowser_go_stop') self.stopAct.setStatusTip(self.tr('Stop loading')) self.stopAct.setWhatsThis(self.tr( """<b>Stop</b>""" """<p>Stops loading of the current tab.</p>""" )) if not self.__initShortcutsOnly: self.stopAct.triggered.connect(self.__stopLoading) self.__actions.append(self.stopAct) self.copyAct = E5Action( self.tr('Copy'), UI.PixmapCache.getIcon("editCopy.png"), self.tr('&Copy'), QKeySequence(self.tr("Ctrl+C", "Edit|Copy")), 0, self, 'webbrowser_edit_copy') self.copyAct.setStatusTip(self.tr('Copy the selected text')) self.copyAct.setWhatsThis(self.tr( """<b>Copy</b>""" """<p>Copy the selected text to the clipboard.</p>""" )) if not self.__initShortcutsOnly: self.copyAct.triggered.connect(self.__copy) self.__actions.append(self.copyAct) # TODO: add more editing actions: Cut, Paste, Undo, Redo, Select All self.findAct = E5Action( self.tr('Find...'), UI.PixmapCache.getIcon("find.png"), self.tr('&Find...'), QKeySequence(self.tr("Ctrl+F", "Edit|Find")), 0, self, 'webbrowser_edit_find') self.findAct.setStatusTip(self.tr('Find text in page')) self.findAct.setWhatsThis(self.tr( """<b>Find</b>""" """<p>Find text in the current page.</p>""" )) if not self.__initShortcutsOnly: self.findAct.triggered.connect(self.__find) self.__actions.append(self.findAct) self.findNextAct = E5Action( self.tr('Find next'), UI.PixmapCache.getIcon("findNext.png"), self.tr('Find &next'), QKeySequence(self.tr("F3", "Edit|Find next")), 0, self, 'webbrowser_edit_find_next') self.findNextAct.setStatusTip(self.tr( 'Find next occurrence of text in page')) self.findNextAct.setWhatsThis(self.tr( """<b>Find next</b>""" """<p>Find the next occurrence of text in the current page.</p>""" )) if not self.__initShortcutsOnly: self.findNextAct.triggered.connect(self.__searchWidget.findNext) self.__actions.append(self.findNextAct) self.findPrevAct = E5Action( self.tr('Find previous'), UI.PixmapCache.getIcon("findPrev.png"), self.tr('Find &previous'), QKeySequence(self.tr("Shift+F3", "Edit|Find previous")), 0, self, 'webbrowser_edit_find_previous') self.findPrevAct.setStatusTip( self.tr('Find previous occurrence of text in page')) self.findPrevAct.setWhatsThis(self.tr( """<b>Find previous</b>""" """<p>Find the previous occurrence of text in the current""" """ page.</p>""" )) if not self.__initShortcutsOnly: self.findPrevAct.triggered.connect( self.__searchWidget.findPrevious) self.__actions.append(self.findPrevAct) # TODO: re-enable when bookmarks are done ## self.bookmarksManageAct = E5Action( ## self.tr('Manage Bookmarks'), ## self.tr('&Manage Bookmarks...'), ## QKeySequence(self.tr("Ctrl+Shift+B", "Help|Manage bookmarks")), ## 0, self, 'webbrowser_bookmarks_manage') ## self.bookmarksManageAct.setStatusTip(self.tr( ## 'Open a dialog to manage the bookmarks.')) ## self.bookmarksManageAct.setWhatsThis(self.tr( ## """<b>Manage Bookmarks...</b>""" ## """<p>Open a dialog to manage the bookmarks.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.bookmarksManageAct.triggered.connect( ## self.__showBookmarksDialog) ## self.__actions.append(self.bookmarksManageAct) ## ## self.bookmarksAddAct = E5Action( ## self.tr('Add Bookmark'), ## UI.PixmapCache.getIcon("addBookmark.png"), ## self.tr('Add &Bookmark...'), ## QKeySequence(self.tr("Ctrl+D", "Help|Add bookmark")), ## 0, self, 'webbrowser_bookmark_add') ## self.bookmarksAddAct.setIconVisibleInMenu(False) ## self.bookmarksAddAct.setStatusTip(self.tr( ## 'Open a dialog to add a bookmark.')) ## self.bookmarksAddAct.setWhatsThis(self.tr( ## """<b>Add Bookmark</b>""" ## """<p>Open a dialog to add the current URL as a bookmark.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.bookmarksAddAct.triggered.connect(self.__addBookmark) ## self.__actions.append(self.bookmarksAddAct) ## ## self.bookmarksAddFolderAct = E5Action( ## self.tr('Add Folder'), ## self.tr('Add &Folder...'), ## 0, 0, self, 'webbrowser_bookmark_show_all') ## self.bookmarksAddFolderAct.setStatusTip(self.tr( ## 'Open a dialog to add a new bookmarks folder.')) ## self.bookmarksAddFolderAct.setWhatsThis(self.tr( ## """<b>Add Folder...</b>""" ## """<p>Open a dialog to add a new bookmarks folder.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.bookmarksAddFolderAct.triggered.connect( ## self.__addBookmarkFolder) ## self.__actions.append(self.bookmarksAddFolderAct) ## ## self.bookmarksAllTabsAct = E5Action( ## self.tr('Bookmark All Tabs'), ## self.tr('Bookmark All Tabs...'), ## 0, 0, self, 'webbrowser_bookmark_all_tabs') ## self.bookmarksAllTabsAct.setStatusTip(self.tr( ## 'Bookmark all open tabs.')) ## self.bookmarksAllTabsAct.setWhatsThis(self.tr( ## """<b>Bookmark All Tabs...</b>""" ## """<p>Open a dialog to add a new bookmarks folder for""" ## """ all open tabs.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.bookmarksAllTabsAct.triggered.connect(self.bookmarkAll) ## self.__actions.append(self.bookmarksAllTabsAct) self.whatsThisAct = E5Action( self.tr('What\'s This?'), UI.PixmapCache.getIcon("whatsThis.png"), self.tr('&What\'s This?'), QKeySequence(self.tr("Shift+F1", "Help|What's This?'")), 0, self, 'webbrowser_help_whats_this') self.whatsThisAct.setStatusTip(self.tr('Context sensitive help')) self.whatsThisAct.setWhatsThis(self.tr( """<b>Display context sensitive help</b>""" """<p>In What's This? mode, the mouse cursor shows an arrow""" """ with a question mark, and you can click on the interface""" """ elements to get a short description of what they do and how""" """ to use them. In dialogs, this feature can be accessed using""" """ the context help button in the titlebar.</p>""" )) if not self.__initShortcutsOnly: self.whatsThisAct.triggered.connect(self.__whatsThis) self.__actions.append(self.whatsThisAct) self.aboutAct = E5Action( self.tr('About'), self.tr('&About'), 0, 0, self, 'webbrowser_help_about') self.aboutAct.setStatusTip(self.tr( 'Display information about this software')) self.aboutAct.setWhatsThis(self.tr( """<b>About</b>""" """<p>Display some information about this software.</p>""" )) if not self.__initShortcutsOnly: self.aboutAct.triggered.connect(self.__about) self.__actions.append(self.aboutAct) self.aboutQtAct = E5Action( self.tr('About Qt'), self.tr('About &Qt'), 0, 0, self, 'webbrowser_help_about_qt') self.aboutQtAct.setStatusTip( self.tr('Display information about the Qt toolkit')) self.aboutQtAct.setWhatsThis(self.tr( """<b>About Qt</b>""" """<p>Display some information about the Qt toolkit.</p>""" )) if not self.__initShortcutsOnly: self.aboutQtAct.triggered.connect(self.__aboutQt) self.__actions.append(self.aboutQtAct) # TODO: re-enable once Zoom stuff is done ## self.zoomInAct = E5Action( ## self.tr('Zoom in'), ## UI.PixmapCache.getIcon("zoomIn.png"), ## self.tr('Zoom &in'), ## QKeySequence(self.tr("Ctrl++", "View|Zoom in")), ## QKeySequence(self.tr("Zoom In", "View|Zoom in")), ## self, 'webbrowser_view_zoom_in') ## self.zoomInAct.setStatusTip(self.tr('Zoom in on the text')) ## self.zoomInAct.setWhatsThis(self.tr( ## """<b>Zoom in</b>""" ## """<p>Zoom in on the text. This makes the text bigger.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.zoomInAct.triggered.connect(self.__zoomIn) ## self.__actions.append(self.zoomInAct) ## ## self.zoomOutAct = E5Action( ## self.tr('Zoom out'), ## UI.PixmapCache.getIcon("zoomOut.png"), ## self.tr('Zoom &out'), ## QKeySequence(self.tr("Ctrl+-", "View|Zoom out")), ## QKeySequence(self.tr("Zoom Out", "View|Zoom out")), ## self, 'webbrowser_view_zoom_out') ## self.zoomOutAct.setStatusTip(self.tr('Zoom out on the text')) ## self.zoomOutAct.setWhatsThis(self.tr( ## """<b>Zoom out</b>""" ## """<p>Zoom out on the text. This makes the text smaller.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.zoomOutAct.triggered.connect(self.__zoomOut) ## self.__actions.append(self.zoomOutAct) ## ## self.zoomResetAct = E5Action( ## self.tr('Zoom reset'), ## UI.PixmapCache.getIcon("zoomReset.png"), ## self.tr('Zoom &reset'), ## QKeySequence(self.tr("Ctrl+0", "View|Zoom reset")), ## 0, self, 'webbrowser_view_zoom_reset') ## self.zoomResetAct.setStatusTip(self.tr( ## 'Reset the zoom of the text')) ## self.zoomResetAct.setWhatsThis(self.tr( ## """<b>Zoom reset</b>""" ## """<p>Reset the zoom of the text. """ ## """This sets the zoom factor to 100%.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.zoomResetAct.triggered.connect(self.__zoomReset) ## self.__actions.append(self.zoomResetAct) ## ## if hasattr(QWebSettings, 'ZoomTextOnly'): ## self.zoomTextOnlyAct = E5Action( ## self.tr('Zoom text only'), ## self.tr('Zoom &text only'), ## 0, 0, self, 'webbrowser_view_zoom_text_only') ## self.zoomTextOnlyAct.setCheckable(True) ## self.zoomTextOnlyAct.setStatusTip(self.tr( ## 'Zoom text only; pictures remain constant')) ## self.zoomTextOnlyAct.setWhatsThis(self.tr( ## """<b>Zoom text only</b>""" ## """<p>Zoom text only; pictures remain constant.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.zoomTextOnlyAct.triggered[bool].connect( ## self.__zoomTextOnly) ## self.__actions.append(self.zoomTextOnlyAct) ## else: ## self.zoomTextOnlyAct = None self.pageSourceAct = E5Action( self.tr('Show page source'), self.tr('Show page source'), QKeySequence(self.tr('Ctrl+U')), 0, self, 'webbrowser_show_page_source') self.pageSourceAct.setStatusTip(self.tr( 'Show the page source in an editor')) self.pageSourceAct.setWhatsThis(self.tr( """<b>Show page source</b>""" """<p>Show the page source in an editor.</p>""" )) if not self.__initShortcutsOnly: self.pageSourceAct.triggered.connect(self.__showPageSource) self.__actions.append(self.pageSourceAct) self.addAction(self.pageSourceAct) ## ## self.fullScreenAct = E5Action( ## self.tr('Full Screen'), ## UI.PixmapCache.getIcon("windowFullscreen.png"), ## self.tr('&Full Screen'), ## QKeySequence(self.tr('F11')), 0, ## self, 'webbrowser_view_full_scree') ## if not self.__initShortcutsOnly: ## self.fullScreenAct.triggered.connect(self.__viewFullScreen) ## self.__actions.append(self.fullScreenAct) ## self.addAction(self.fullScreenAct) self.nextTabAct = E5Action( self.tr('Show next tab'), self.tr('Show next tab'), QKeySequence(self.tr('Ctrl+Alt+Tab')), 0, self, 'webbrowser_view_next_tab') if not self.__initShortcutsOnly: self.nextTabAct.triggered.connect(self.__nextTab) self.__actions.append(self.nextTabAct) self.addAction(self.nextTabAct) self.prevTabAct = E5Action( self.tr('Show previous tab'), self.tr('Show previous tab'), QKeySequence(self.tr('Shift+Ctrl+Alt+Tab')), 0, self, 'webbrowser_view_previous_tab') if not self.__initShortcutsOnly: self.prevTabAct.triggered.connect(self.__prevTab) self.__actions.append(self.prevTabAct) self.addAction(self.prevTabAct) self.switchTabAct = E5Action( self.tr('Switch between tabs'), self.tr('Switch between tabs'), QKeySequence(self.tr('Ctrl+1')), 0, self, 'webbrowser_switch_tabs') if not self.__initShortcutsOnly: self.switchTabAct.triggered.connect(self.__switchTab) self.__actions.append(self.switchTabAct) self.addAction(self.switchTabAct) self.prefAct = E5Action( self.tr('Preferences'), UI.PixmapCache.getIcon("configure.png"), self.tr('&Preferences...'), 0, 0, self, 'webbrowser_preferences') self.prefAct.setStatusTip(self.tr( 'Set the prefered configuration')) self.prefAct.setWhatsThis(self.tr( """<b>Preferences</b>""" """<p>Set the configuration items of the application""" """ with your prefered values.</p>""" )) if not self.__initShortcutsOnly: self.prefAct.triggered.connect(self.__showPreferences) self.__actions.append(self.prefAct) ## self.acceptedLanguagesAct = E5Action( ## self.tr('Languages'), ## UI.PixmapCache.getIcon("flag.png"), ## self.tr('&Languages...'), 0, 0, ## self, 'webbrowser_accepted_languages') ## self.acceptedLanguagesAct.setStatusTip(self.tr( ## 'Configure the accepted languages for web pages')) ## self.acceptedLanguagesAct.setWhatsThis(self.tr( ## """<b>Languages</b>""" ## """<p>Configure the accepted languages for web pages.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.acceptedLanguagesAct.triggered.connect( ## self.__showAcceptedLanguages) ## self.__actions.append(self.acceptedLanguagesAct) ## self.cookiesAct = E5Action( ## self.tr('Cookies'), ## UI.PixmapCache.getIcon("cookie.png"), ## self.tr('C&ookies...'), 0, 0, self, 'webbrowser_cookies') ## self.cookiesAct.setStatusTip(self.tr( ## 'Configure cookies handling')) ## self.cookiesAct.setWhatsThis(self.tr( ## """<b>Cookies</b>""" ## """<p>Configure cookies handling.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.cookiesAct.triggered.connect( ## self.__showCookiesConfiguration) ## self.__actions.append(self.cookiesAct) # TODO: re-enable once Flash Cookies stuff is done ## self.flashCookiesAct = E5Action( ## self.tr('Flash Cookies'), ## UI.PixmapCache.getIcon("flashCookie.png"), ## self.tr('&Flash Cookies...'), 0, 0, self, 'webbrowser_flash_cookies') ## self.flashCookiesAct.setStatusTip(self.tr( ## 'Manage flash cookies')) ## self.flashCookiesAct.setWhatsThis(self.tr( ## """<b>Flash Cookies</b>""" ## """<p>Show a dialog to manage the flash cookies.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.flashCookiesAct.triggered.connect( ## self.__showFlashCookiesManagement) ## self.__actions.append(self.flashCookiesAct) ## self.offlineStorageAct = E5Action( ## self.tr('Offline Storage'), ## UI.PixmapCache.getIcon("preferences-html5.png"), ## self.tr('Offline &Storage...'), 0, 0, ## self, 'webbrowser_offline_storage') ## self.offlineStorageAct.setStatusTip(self.tr( ## 'Configure offline storage')) ## self.offlineStorageAct.setWhatsThis(self.tr( ## """<b>Offline Storage</b>""" ## """<p>Opens a dialog to configure offline storage.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.offlineStorageAct.triggered.connect( ## self.__showOfflineStorageConfiguration) ## self.__actions.append(self.offlineStorageAct) ## self.personalDataAct = E5Action( ## self.tr('Personal Information'), ## UI.PixmapCache.getIcon("pim.png"), ## self.tr('Personal Information...'), ## 0, 0, ## self, 'webbrowser_personal_information') ## self.personalDataAct.setStatusTip(self.tr( ## 'Configure personal information for completing form fields')) ## self.personalDataAct.setWhatsThis(self.tr( ## """<b>Personal Information...</b>""" ## """<p>Opens a dialog to configure the personal information""" ## """ used for completing form fields.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.personalDataAct.triggered.connect( ## self.__showPersonalInformationDialog) ## self.__actions.append(self.personalDataAct) ## self.greaseMonkeyAct = E5Action( ## self.tr('GreaseMonkey Scripts'), ## UI.PixmapCache.getIcon("greaseMonkey.png"), ## self.tr('GreaseMonkey Scripts...'), ## 0, 0, ## self, 'webbrowser_greasemonkey') ## self.greaseMonkeyAct.setStatusTip(self.tr( ## 'Configure the GreaseMonkey Scripts')) ## self.greaseMonkeyAct.setWhatsThis(self.tr( ## """<b>GreaseMonkey Scripts...</b>""" ## """<p>Opens a dialog to configure the available GreaseMonkey""" ## """ Scripts.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.greaseMonkeyAct.triggered.connect( ## self.__showGreaseMonkeyConfigDialog) ## self.__actions.append(self.greaseMonkeyAct) self.editMessageFilterAct = E5Action( self.tr('Edit Message Filters'), UI.PixmapCache.getIcon("warning.png"), self.tr('Edit Message Filters...'), 0, 0, self, 'webbrowser_manage_message_filters') self.editMessageFilterAct.setStatusTip(self.tr( 'Edit the message filters used to suppress unwanted messages')) self.editMessageFilterAct.setWhatsThis(self.tr( """<b>Edit Message Filters</b>""" """<p>Opens a dialog to edit the message filters used to""" """ suppress unwanted messages been shown in an error""" """ window.</p>""" )) if not self.__initShortcutsOnly: self.editMessageFilterAct.triggered.connect( E5ErrorMessage.editMessageFilters) self.__actions.append(self.editMessageFilterAct) # TODO: re-enable once feature permission stuff is done ## self.featurePermissionAct = E5Action( ## self.tr('Edit HTML5 Feature Permissions'), ## UI.PixmapCache.getIcon("featurePermission.png"), ## self.tr('Edit HTML5 Feature Permissions...'), 0, 0, self, ## 'webbrowser_edit_feature_permissions') ## self.featurePermissionAct.setStatusTip(self.tr( ## 'Edit the remembered HTML5 feature permissions')) ## self.featurePermissionAct.setWhatsThis(self.tr( ## """<b>Edit HTML5 Feature Permissions</b>""" ## """<p>Opens a dialog to edit the remembered HTML5""" ## """ feature permissions.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.featurePermissionAct.triggered.connect( ## self.__showFeaturePermissionDialog) ## self.__actions.append(self.featurePermissionAct) # TODO: re-enable once Qt 5.6 is available ## if WebBrowserWindow.UseQtHelp or self.__initShortcutsOnly: ## self.syncTocAct = E5Action( ## self.tr('Sync with Table of Contents'), ## UI.PixmapCache.getIcon("syncToc.png"), ## self.tr('Sync with Table of Contents'), ## 0, 0, self, 'webbrowser_sync_toc') ## self.syncTocAct.setStatusTip(self.tr( ## 'Synchronizes the table of contents with current page')) ## self.syncTocAct.setWhatsThis(self.tr( ## """<b>Sync with Table of Contents</b>""" ## """<p>Synchronizes the table of contents with current""" ## """ page.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.syncTocAct.triggered.connect(self.__syncTOC) ## self.__actions.append(self.syncTocAct) ## ## self.showTocAct = E5Action( ## self.tr('Table of Contents'), ## self.tr('Table of Contents'), ## 0, 0, self, 'webbrowser_show_toc') ## self.showTocAct.setStatusTip(self.tr( ## 'Shows the table of contents window')) ## self.showTocAct.setWhatsThis(self.tr( ## """<b>Table of Contents</b>""" ## """<p>Shows the table of contents window.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.showTocAct.triggered.connect(self.__showTocWindow) ## self.__actions.append(self.showTocAct) ## ## self.showIndexAct = E5Action( ## self.tr('Index'), ## self.tr('Index'), ## 0, 0, self, 'webbrowser_show_index') ## self.showIndexAct.setStatusTip(self.tr( ## 'Shows the index window')) ## self.showIndexAct.setWhatsThis(self.tr( ## """<b>Index</b>""" ## """<p>Shows the index window.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.showIndexAct.triggered.connect(self.__showIndexWindow) ## self.__actions.append(self.showIndexAct) ## ## self.showSearchAct = E5Action( ## self.tr('Search'), ## self.tr('Search'), ## 0, 0, self, 'webbrowser_show_search') ## self.showSearchAct.setStatusTip(self.tr( ## 'Shows the search window')) ## self.showSearchAct.setWhatsThis(self.tr( ## """<b>Search</b>""" ## """<p>Shows the search window.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.showSearchAct.triggered.connect( ## self.__showSearchWindow) ## self.__actions.append(self.showSearchAct) ## ## self.manageQtHelpDocsAct = E5Action( ## self.tr('Manage QtHelp Documents'), ## self.tr('Manage QtHelp &Documents'), ## 0, 0, self, 'webbrowser_qthelp_documents') ## self.manageQtHelpDocsAct.setStatusTip(self.tr( ## 'Shows a dialog to manage the QtHelp documentation set')) ## self.manageQtHelpDocsAct.setWhatsThis(self.tr( ## """<b>Manage QtHelp Documents</b>""" ## """<p>Shows a dialog to manage the QtHelp documentation""" ## """ set.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.manageQtHelpDocsAct.triggered.connect( ## self.__manageQtHelpDocumentation) ## self.__actions.append(self.manageQtHelpDocsAct) ## ## self.manageQtHelpFiltersAct = E5Action( ## self.tr('Manage QtHelp Filters'), ## self.tr('Manage QtHelp &Filters'), ## 0, 0, self, 'webbrowser_qthelp_filters') ## self.manageQtHelpFiltersAct.setStatusTip(self.tr( ## 'Shows a dialog to manage the QtHelp filters')) ## self.manageQtHelpFiltersAct.setWhatsThis(self.tr( ## """<b>Manage QtHelp Filters</b>""" ## """<p>Shows a dialog to manage the QtHelp filters.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.manageQtHelpFiltersAct.triggered.connect( ## self.__manageQtHelpFilters) ## self.__actions.append(self.manageQtHelpFiltersAct) ## ## self.reindexDocumentationAct = E5Action( ## self.tr('Reindex Documentation'), ## self.tr('&Reindex Documentation'), ## 0, 0, self, 'webbrowser_qthelp_reindex') ## self.reindexDocumentationAct.setStatusTip(self.tr( ## 'Reindexes the documentation set')) ## self.reindexDocumentationAct.setWhatsThis(self.tr( ## """<b>Reindex Documentation</b>""" ## """<p>Reindexes the documentation set.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.reindexDocumentationAct.triggered.connect( ## self.__searchEngine.reindexDocumentation) ## self.__actions.append(self.reindexDocumentationAct) ## self.clearPrivateDataAct = E5Action( ## self.tr('Clear private data'), ## self.tr('&Clear private data'), ## 0, 0, ## self, 'webbrowser_clear_private_data') ## self.clearPrivateDataAct.setStatusTip(self.tr( ## 'Clear private data')) ## self.clearPrivateDataAct.setWhatsThis(self.tr( ## """<b>Clear private data</b>""" ## """<p>Clears the private data like browsing history, search""" ## """ history or the favicons database.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.clearPrivateDataAct.triggered.connect( ## self.__clearPrivateData) ## self.__actions.append(self.clearPrivateDataAct) ## self.clearIconsAct = E5Action( ## self.tr('Clear icons database'), ## self.tr('Clear &icons database'), ## 0, 0, ## self, 'webbrowser_clear_icons_db') ## self.clearIconsAct.setStatusTip(self.tr( ## 'Clear the database of favicons')) ## self.clearIconsAct.setWhatsThis(self.tr( ## """<b>Clear icons database</b>""" ## """<p>Clears the database of favicons of previously visited""" ## """ URLs.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.clearIconsAct.triggered.connect(self.__clearIconsDatabase) ## self.__actions.append(self.clearIconsAct) # TODO: re-enable once search engines have been done ## self.searchEnginesAct = E5Action( ## self.tr('Configure Search Engines'), ## self.tr('Configure Search &Engines...'), ## 0, 0, ## self, 'webbrowser_search_engines') ## self.searchEnginesAct.setStatusTip(self.tr( ## 'Configure the available search engines')) ## self.searchEnginesAct.setWhatsThis(self.tr( ## """<b>Configure Search Engines...</b>""" ## """<p>Opens a dialog to configure the available search""" ## """ engines.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.searchEnginesAct.triggered.connect( ## self.__showEnginesConfigurationDialog) ## self.__actions.append(self.searchEnginesAct) ## self.passwordsAct = E5Action( ## self.tr('Manage Saved Passwords'), ## UI.PixmapCache.getIcon("passwords.png"), ## self.tr('Manage Saved Passwords...'), ## 0, 0, ## self, 'webbrowser_manage_passwords') ## self.passwordsAct.setStatusTip(self.tr( ## 'Manage the saved passwords')) ## self.passwordsAct.setWhatsThis(self.tr( ## """<b>Manage Saved Passwords...</b>""" ## """<p>Opens a dialog to manage the saved passwords.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.passwordsAct.triggered.connect(self.__showPasswordsDialog) ## self.__actions.append(self.passwordsAct) ## self.adblockAct = E5Action( ## self.tr('Ad Block'), ## UI.PixmapCache.getIcon("adBlockPlus.png"), ## self.tr('&Ad Block...'), ## 0, 0, ## self, 'webbrowser_adblock') ## self.adblockAct.setStatusTip(self.tr( ## 'Configure AdBlock subscriptions and rules')) ## self.adblockAct.setWhatsThis(self.tr( ## """<b>Ad Block...</b>""" ## """<p>Opens a dialog to configure AdBlock subscriptions and""" ## """ rules.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.adblockAct.triggered.connect(self.__showAdBlockDialog) ## self.__actions.append(self.adblockAct) ## self.flashblockAct = E5Action( ## self.tr('ClickToFlash'), ## UI.PixmapCache.getIcon("flashBlock.png"), ## self.tr('&ClickToFlash...'), ## 0, 0, ## self, 'webbrowser_flashblock') ## self.flashblockAct.setStatusTip(self.tr( ## 'Configure ClickToFlash whitelist')) ## self.flashblockAct.setWhatsThis(self.tr( ## """<b>ClickToFlash...</b>""" ## """<p>Opens a dialog to configure the ClickToFlash""" ## """ whitelist.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.flashblockAct.triggered.connect( ## self.__showClickToFlashDialog) ## self.__actions.append(self.flashblockAct) ## if SSL_AVAILABLE: ## self.certificatesAct = E5Action( ## self.tr('Manage SSL Certificates'), ## UI.PixmapCache.getIcon("certificates.png"), ## self.tr('Manage SSL Certificates...'), ## 0, 0, ## self, 'webbrowser_manage_certificates') ## self.certificatesAct.setStatusTip(self.tr( ## 'Manage the saved SSL certificates')) ## self.certificatesAct.setWhatsThis(self.tr( ## """<b>Manage SSL Certificates...</b>""" ## """<p>Opens a dialog to manage the saved SSL""" ## """ certificates.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.certificatesAct.triggered.connect( ## self.__showCertificatesDialog) ## self.__actions.append(self.certificatesAct) ## self.toolsMonitorAct = E5Action( ## self.tr('Network Monitor'), ## self.tr('&Network Monitor...'), ## 0, 0, ## self, 'webbrowser_tools_network_monitor') ## self.toolsMonitorAct.setStatusTip(self.tr( ## 'Show the network monitor dialog')) ## self.toolsMonitorAct.setWhatsThis(self.tr( ## """<b>Network Monitor...</b>""" ## """<p>Shows the network monitor dialog.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.toolsMonitorAct.triggered.connect( ## self.__showNetworkMonitor) ## self.__actions.append(self.toolsMonitorAct) # TODO: re-enable once Download Manager has been done ## self.showDownloadManagerAct = E5Action( ## self.tr('Downloads'), ## self.tr('Downloads'), ## 0, 0, self, 'webbrowser_show_downloads') ## self.showDownloadManagerAct.setStatusTip(self.tr( ## 'Shows the downloads window')) ## self.showDownloadManagerAct.setWhatsThis(self.tr( ## """<b>Downloads</b>""" ## """<p>Shows the downloads window.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.showDownloadManagerAct.triggered.connect( ## self.__showDownloadsWindow) ## self.__actions.append(self.showDownloadManagerAct) # TODO: re-enable once RSS Feeds Manager has been done ## self.feedsManagerAct = E5Action( ## self.tr('RSS Feeds Dialog'), ## UI.PixmapCache.getIcon("rss22.png"), ## self.tr('&RSS Feeds Dialog...'), ## QKeySequence(self.tr("Ctrl+Shift+F", "Help|RSS Feeds Dialog")), ## 0, self, 'webbrowser_rss_feeds') ## self.feedsManagerAct.setStatusTip(self.tr( ## 'Open a dialog showing the configured RSS feeds.')) ## self.feedsManagerAct.setWhatsThis(self.tr( ## """<b>RSS Feeds Dialog...</b>""" ## """<p>Open a dialog to show the configured RSS feeds.""" ## """ It can be used to mange the feeds and to show their""" ## """ contents.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.feedsManagerAct.triggered.connect(self.__showFeedsManager) ## self.__actions.append(self.feedsManagerAct) ## self.siteInfoAct = E5Action( ## self.tr('Siteinfo Dialog'), ## UI.PixmapCache.getIcon("helpAbout.png"), ## self.tr('&Siteinfo Dialog...'), ## QKeySequence(self.tr("Ctrl+Shift+I", "Help|Siteinfo Dialog")), ## 0, self, 'webbrowser_siteinfo') ## self.siteInfoAct.setStatusTip(self.tr( ## 'Open a dialog showing some information about the current site.')) ## self.siteInfoAct.setWhatsThis(self.tr( ## """<b>Siteinfo Dialog...</b>""" ## """<p>Opens a dialog showing some information about the current""" ## """ site.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.siteInfoAct.triggered.connect(self.__showSiteinfoDialog) ## self.__actions.append(self.siteInfoAct) ## self.userAgentManagerAct = E5Action( ## self.tr('Manage User Agent Settings'), ## self.tr('Manage &User Agent Settings'), ## 0, 0, self, 'webbrowser_user_agent_settings') ## self.userAgentManagerAct.setStatusTip(self.tr( ## 'Shows a dialog to manage the User Agent settings')) ## self.userAgentManagerAct.setWhatsThis(self.tr( ## """<b>Manage User Agent Settings</b>""" ## """<p>Shows a dialog to manage the User Agent settings.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.userAgentManagerAct.triggered.connect( ## self.__showUserAgentsDialog) ## self.__actions.append(self.userAgentManagerAct) ## self.synchronizationAct = E5Action( ## self.tr('Synchronize data'), ## UI.PixmapCache.getIcon("sync.png"), ## self.tr('&Synchronize Data...'), ## 0, 0, self, 'webbrowser_synchronize_data') ## self.synchronizationAct.setStatusTip(self.tr( ## 'Shows a dialog to synchronize data via the network')) ## self.synchronizationAct.setWhatsThis(self.tr( ## """<b>Synchronize Data...</b>""" ## """<p>This shows a dialog to synchronize data via the""" ## """ network.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.synchronizationAct.triggered.connect( ## self.__showSyncDialog) ## self.__actions.append(self.synchronizationAct) # TODO: re-enable once zoom stuff is done ## self.zoomValuesAct = E5Action( ## self.tr('Manage Saved Zoom Values'), ## UI.PixmapCache.getIcon("zoomReset.png"), ## self.tr('Manage Saved Zoom Values...'), ## 0, 0, ## self, 'webbrowser_manage_zoom_values') ## self.zoomValuesAct.setStatusTip(self.tr( ## 'Manage the saved zoom values')) ## self.zoomValuesAct.setWhatsThis(self.tr( ## """<b>Manage Saved Zoom Values...</b>""" ## """<p>Opens a dialog to manage the saved zoom values.</p>""" ## )) ## if not self.__initShortcutsOnly: ## self.zoomValuesAct.triggered.connect(self.__showZoomValuesDialog) ## self.__actions.append(self.zoomValuesAct) self.backAct.setEnabled(False) self.forwardAct.setEnabled(False) # now read the keyboard shortcuts for the actions Shortcuts.readShortcuts(helpViewer=self) def getActions(self): """ Public method to get a list of all actions. @return list of all actions (list of E5Action) """ return self.__actions[:] def __initMenus(self): """ Private method to create the menus. """ mb = self.menuBar() menu = mb.addMenu(self.tr('&File')) menu.setTearOffEnabled(True) menu.addAction(self.newTabAct) menu.addAction(self.newAct) menu.addAction(self.openAct) menu.addAction(self.openTabAct) menu.addSeparator() ## menu.addAction(self.saveAsAct) ## menu.addAction(self.savePageScreenAct) ## menu.addAction(self.saveVisiblePageScreenAct) ## menu.addSeparator() ## menu.addAction(self.printPreviewAct) ## menu.addAction(self.printAct) ## menu.addAction(self.printPdfAct) ## menu.addSeparator() menu.addAction(self.closeAct) menu.addAction(self.closeAllAct) menu.addSeparator() ## menu.addAction(self.privateBrowsingAct) ## menu.addSeparator() menu.addAction(self.exitAct) menu = mb.addMenu(self.tr('&Edit')) menu.setTearOffEnabled(True) menu.addAction(self.copyAct) menu.addSeparator() menu.addAction(self.findAct) menu.addAction(self.findNextAct) menu.addAction(self.findPrevAct) menu = mb.addMenu(self.tr('&View')) menu.setTearOffEnabled(True) ## menu.addAction(self.zoomInAct) ## menu.addAction(self.zoomResetAct) ## menu.addAction(self.zoomOutAct) ## if self.zoomTextOnlyAct is not None: ## menu.addAction(self.zoomTextOnlyAct) 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) # TODO: re-enable once History stuff is done ## 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.newUrl.connect(self.openUrlNewTab) ## mb.addMenu(self.historyMenu) # TODO: re-enable once Bookmarks stuff is done ## 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.newUrl.connect(self.openUrlNewTab) ## mb.addMenu(self.bookmarksMenu) ## ## bookmarksActions = [] ## bookmarksActions.append(self.bookmarksManageAct) ## bookmarksActions.append(self.bookmarksAddAct) ## bookmarksActions.append(self.bookmarksAllTabsAct) ## bookmarksActions.append(self.bookmarksAddFolderAct) ## bookmarksActions.append("--SEPARATOR--") ## bookmarksActions.append(self.importBookmarksAct) ## bookmarksActions.append(self.exportBookmarksAct) ## 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) ## menu.addAction(self.flashCookiesAct) ## menu.addAction(self.offlineStorageAct) ## 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) ## if SSL_AVAILABLE: ## menu.addAction(self.certificatesAct) ## menu.addSeparator() ## menu.addAction(self.zoomValuesAct) ## menu.addSeparator() ## menu.addAction(self.adblockAct) ## menu.addAction(self.flashblockAct) ## menu.addSeparator() self.__settingsMenu = menu self.__settingsMenu.aboutToShow.connect( self.__aboutToShowSettingsMenu) ## from .UserAgent.UserAgentMenu import UserAgentMenu ## self.__userAgentMenu = UserAgentMenu(self.tr("Global User Agent")) ## 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 = mb.addMenu(self.tr("&Tools")) ## menu.setTearOffEnabled(True) ## menu.addAction(self.feedsManagerAct) ## menu.addAction(self.siteInfoAct) ## menu.addSeparator() ## menu.addAction(self.synchronizationAct) ## menu.addSeparator() ## menu.addAction(self.toolsMonitorAct) menu = mb.addMenu(self.tr("&Window")) menu.setTearOffEnabled(True) ## menu.addAction(self.showDownloadManagerAct) ## if WebBrowserWindow.UseQtHelp: ## menu.addSeparator() ## menu.addAction(self.showTocAct) ## menu.addAction(self.showIndexAct) ## menu.addAction(self.showSearchAct) ## ## 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 __initToolbars(self): """ Private method to create the toolbars. """ filetb = self.addToolBar(self.tr("File")) filetb.setObjectName("FileToolBar") filetb.setIconSize(UI.Config.ToolBarIconSize) filetb.addAction(self.newTabAct) filetb.addAction(self.newAct) filetb.addAction(self.openAct) filetb.addAction(self.openTabAct) filetb.addSeparator() ## filetb.addAction(self.saveAsAct) ## filetb.addAction(self.savePageScreenAct) ## filetb.addSeparator() ## filetb.addAction(self.printPreviewAct) ## filetb.addAction(self.printAct) ## filetb.addAction(self.printPdfAct) ## filetb.addSeparator() filetb.addAction(self.closeAct) filetb.addAction(self.exitAct) ## self.savePageScreenMenu = QMenu(self) ## self.savePageScreenMenu.addAction(self.savePageScreenAct) ## self.savePageScreenMenu.addAction(self.saveVisiblePageScreenAct) ## savePageScreenButton = filetb.widgetForAction(self.savePageScreenAct) ## savePageScreenButton.setMenu(self.savePageScreenMenu) ## savePageScreenButton.setPopupMode(QToolButton.MenuButtonPopup) edittb = self.addToolBar(self.tr("Edit")) edittb.setObjectName("EditToolBar") edittb.setIconSize(UI.Config.ToolBarIconSize) edittb.addAction(self.copyAct) ## viewtb = self.addToolBar(self.tr("View")) ## viewtb.setObjectName("ViewToolBar") ## viewtb.setIconSize(UI.Config.ToolBarIconSize) ## viewtb.addAction(self.zoomInAct) ## viewtb.addAction(self.zoomResetAct) ## viewtb.addAction(self.zoomOutAct) ## viewtb.addSeparator() ## viewtb.addAction(self.fullScreenAct) findtb = self.addToolBar(self.tr("Find")) findtb.setObjectName("FindToolBar") findtb.setIconSize(UI.Config.ToolBarIconSize) findtb.addAction(self.findAct) findtb.addAction(self.findNextAct) findtb.addAction(self.findPrevAct) ## if WebBrowserWindow.UseQtHelp: ## filtertb = self.addToolBar(self.tr("Filter")) ## filtertb.setObjectName("FilterToolBar") ## self.filterCombo = QComboBox() ## self.filterCombo.setMinimumWidth( ## QFontMetrics(QFont()).width("ComboBoxWithEnoughWidth")) ## filtertb.addWidget(QLabel(self.tr("Filtered by: "))) ## filtertb.addWidget(self.filterCombo) ## self.__helpEngine.setupFinished.connect(self.__setupFilterCombo) ## self.filterCombo.activated[str].connect( ## self.__filterQtHelpDocumentation) ## self.__setupFilterCombo() settingstb = self.addToolBar(self.tr("Settings")) settingstb.setObjectName("SettingsToolBar") settingstb.setIconSize(UI.Config.ToolBarIconSize) settingstb.addAction(self.prefAct) ## settingstb.addAction(self.acceptedLanguagesAct) ## settingstb.addAction(self.cookiesAct) ## settingstb.addAction(self.flashCookiesAct) ## settingstb.addAction(self.offlineStorageAct) ## settingstb.addAction(self.personalDataAct) ## settingstb.addAction(self.greaseMonkeyAct) ## settingstb.addAction(self.featurePermissionAct) ## toolstb = self.addToolBar(self.tr("Tools")) ## toolstb.setObjectName("ToolsToolBar") ## toolstb.setIconSize(UI.Config.ToolBarIconSize) ## toolstb.addAction(self.feedsManagerAct) ## toolstb.addAction(self.siteInfoAct) ## toolstb.addSeparator() ## toolstb.addAction(self.synchronizationAct) helptb = self.addToolBar(self.tr("Help")) helptb.setObjectName("HelpToolBar") helptb.setIconSize(UI.Config.ToolBarIconSize) helptb.addAction(self.whatsThisAct) self.addToolBarBreak() gotb = self.addToolBar(self.tr("Go")) gotb.setObjectName("GoToolBar") gotb.setIconSize(UI.Config.ToolBarIconSize) gotb.addAction(self.backAct) gotb.addAction(self.forwardAct) gotb.addAction(self.reloadAct) gotb.addAction(self.stopAct) gotb.addAction(self.homeAct) gotb.addSeparator() self.__navigationSplitter = QSplitter(gotb) self.__navigationSplitter.addWidget(self.__tabWidget.stackedUrlBar()) ## from .HelpWebSearchWidget import HelpWebSearchWidget ## self.searchEdit = HelpWebSearchWidget(self) ## sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) ## sizePolicy.setHorizontalStretch(2) ## sizePolicy.setVerticalStretch(0) ## self.searchEdit.setSizePolicy(sizePolicy) ## self.searchEdit.search.connect(self.__linkActivated) ## self.__navigationSplitter.addWidget(self.searchEdit) ## gotb.addWidget(self.__navigationSplitter) self.__navigationSplitter.setSizePolicy( QSizePolicy.Expanding, QSizePolicy.Maximum) self.__navigationSplitter.setCollapsible(0, False) self.backMenu = QMenu(self) self.backMenu.aboutToShow.connect(self.__showBackMenu) self.backMenu.triggered.connect(self.__navigationMenuActionTriggered) backButton = gotb.widgetForAction(self.backAct) backButton.setMenu(self.backMenu) backButton.setPopupMode(QToolButton.MenuButtonPopup) self.forwardMenu = QMenu(self) self.forwardMenu.aboutToShow.connect(self.__showForwardMenu) self.forwardMenu.triggered.connect( self.__navigationMenuActionTriggered) forwardButton = gotb.widgetForAction(self.forwardAct) forwardButton.setMenu(self.forwardMenu) forwardButton.setPopupMode(QToolButton.MenuButtonPopup) ## from .Bookmarks.BookmarksToolBar import BookmarksToolBar ## bookmarksModel = self.bookmarksManager().bookmarksModel() ## self.bookmarksToolBar = BookmarksToolBar(self, bookmarksModel, self) ## self.bookmarksToolBar.setObjectName("BookmarksToolBar") ## self.bookmarksToolBar.setIconSize(UI.Config.ToolBarIconSize) ## self.bookmarksToolBar.openUrl.connect(self.openUrl) ## self.bookmarksToolBar.newUrl.connect(self.openUrlNewTab) ## self.addToolBarBreak() ## self.addToolBar(self.bookmarksToolBar) ## 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.getHelp("VirusTotalEnabled") or \ ## Preferences.getHelp("VirusTotalServiceKey") == "": ## self.virustotalScanCurrentAct.setEnabled(False) ## self.virustotalIpReportAct.setEnabled(False) ## self.virustotalDomainReportAct.setEnabled(False) def __nextTab(self): """ Private slot used to show the next tab. """ fwidget = QApplication.focusWidget() while fwidget and not hasattr(fwidget, 'nextTab'): fwidget = fwidget.parent() if fwidget: fwidget.nextTab() def __prevTab(self): """ Private slot used to show the previous tab. """ fwidget = QApplication.focusWidget() while fwidget and not hasattr(fwidget, 'prevTab'): fwidget = fwidget.parent() if fwidget: fwidget.prevTab() def __switchTab(self): """ Private slot used to switch between the current and the previous current tab. """ fwidget = QApplication.focusWidget() while fwidget and not hasattr(fwidget, 'switchTab'): fwidget = fwidget.parent() if fwidget: fwidget.switchTab() def __whatsThis(self): """ Private slot called in to enter Whats This mode. """ QWhatsThis.enterWhatsThisMode() def __titleChanged(self, browser, title): """ Private slot called to handle a change of a browser's title. @param browser reference to the browser (WebBrowserView) @param title new title (string) """ pass ## self.historyManager().updateHistoryEntry( ## browser.url().toString(), title) @pyqtSlot() def newTab(self, link=None, requestData=None, addNextTo=None): """ Public slot called to open a new web browser tab. @param link file to be displayed in the new window (string or QUrl) @param requestData tuple containing the request data (QNetworkRequest, QNetworkAccessManager.Operation, QByteArray) @param addNextTo reference to the browser to open the tab after (HelpBrowser) """ if addNextTo: self.__tabWidget.newBrowserAfter(addNextTo, link, requestData) else: self.__tabWidget.newBrowser(link, requestData) # TODO: check the above @pyqtSlot() def newWindow(self, link=None): """ Public slot called to open a new web browser window. @param link file to be displayed in the new window (string or QUrl) """ if link is None: linkName = "" elif isinstance(link, QUrl): linkName = link.toString() else: linkName = link h = WebBrowserWindow(linkName, ".", self.parent(), "webbrowser", self.__fromEric) h.show() # TODO: check if this is still needed def previewer(self): """ Public method to get a reference to the previewer tab. @return reference to the previewer tab (WebBrowserView) """ if self.__previewer is None: if self.__tabWidget.count() != 1 or \ self.currentBrowser().url().toString() not in [ "", "eric:home", "eric:speeddial", "about:blank"]: self.newTab() self.__previewer = self.currentBrowser() self.__tabWidget.setCurrentWidget(self.__previewer) return self.__previewer def __browserClosed(self, browser): """ Private slot handling the closure of a browser tab. @param browser reference to the browser window (QWidget) """ if browser is self.__previewer: self.__previewer = None def __openFile(self): """ Private slot called to open a file. """ fn = E5FileDialog.getOpenFileName( self, self.tr("Open File"), "", self.tr("Help Files (*.html *.htm);;" "PDF Files (*.pdf);;" "CHM Files (*.chm);;" "All Files (*)" )) if fn: if Utilities.isWindowsPlatform(): url = "file:///" + Utilities.fromNativeSeparators(fn) else: url = "file://" + fn self.currentBrowser().setSource(QUrl(url)) def __openFileNewTab(self): """ Private slot called to open a file in a new tab. """ fn = E5FileDialog.getOpenFileName( self, self.tr("Open File"), "", self.tr("Help Files (*.html *.htm);;" "PDF Files (*.pdf);;" "CHM Files (*.chm);;" "All Files (*)" )) if fn: if Utilities.isWindowsPlatform(): url = "file:///" + Utilities.fromNativeSeparators(fn) else: url = "file://" + fn self.newTab(url) ## def __savePageAs(self): ## """ ## Private slot to save the current page. ## """ ## browser = self.currentBrowser() ## if browser is not None: ## browser.saveAs() ## ## @pyqtSlot() ## def __savePageScreen(self, visibleOnly=False): ## """ ## Private slot to save the current page as a screen shot. ## ## @param visibleOnly flag indicating to just save the visible part ## of the page (boolean) ## """ ## from .PageScreenDialog import PageScreenDialog ## self.__pageScreen = PageScreenDialog( ## self.currentBrowser(), visibleOnly=visibleOnly) ## self.__pageScreen.show() ## ## def __saveVisiblePageScreen(self): ## """ ## Private slot to save the visible part of the current page as a screen ## shot. ## """ ## self.__savePageScreen(visibleOnly=True) def __about(self): """ Private slot to show the about information. """ E5MessageBox.about( self, self.tr("eric6 Web Browser"), self.tr( """<b>eric6 Web Browser - {0}</b>""" """<p>The eric6 Web Browser is a combined help file and HTML""" """ browser. It is part of the eric6 development""" """ toolset.</p>""" ).format(Version)) def __aboutQt(self): """ Private slot to show info about Qt. """ E5MessageBox.aboutQt(self, self.tr("eric6 Web Browser")) def setBackwardAvailable(self, b): """ Public slot called when backward references are available. @param b flag indicating availability of the backwards action (boolean) """ self.backAct.setEnabled(b) def setForwardAvailable(self, b): """ Public slot called when forward references are available. @param b flag indicating the availability of the forwards action (boolean) """ self.forwardAct.setEnabled(b) def setLoadingActions(self, b): """ Public slot to set the loading dependent actions. @param b flag indicating the loading state to consider (boolean) """ self.reloadAct.setEnabled(not b) self.stopAct.setEnabled(b) ## def __addBookmark(self): ## """ ## Private slot called to add the displayed file to the bookmarks. ## """ ## view = self.currentBrowser() ## url = bytes(view.url().toEncoded()).decode() ## title = view.title() ## description = "" ## meta = view.page().mainFrame().metaData() ## if "description" in meta: ## description = meta["description"][0] ## ## from .Bookmarks.AddBookmarkDialog import AddBookmarkDialog ## dlg = AddBookmarkDialog() ## dlg.setUrl(url) ## dlg.setTitle(title) ## dlg.setDescription(description) ## menu = self.bookmarksManager().menu() ## idx = self.bookmarksManager().bookmarksModel().nodeIndex(menu) ## dlg.setCurrentIndex(idx) ## dlg.exec_() ## ## def __addBookmarkFolder(self): ## """ ## Private slot to add a new bookmarks folder. ## """ ## from .Bookmarks.AddBookmarkDialog import AddBookmarkDialog ## dlg = AddBookmarkDialog() ## menu = self.bookmarksManager().menu() ## idx = self.bookmarksManager().bookmarksModel().nodeIndex(menu) ## dlg.setCurrentIndex(idx) ## dlg.setFolder(True) ## dlg.exec_() ## ## def __showBookmarksDialog(self): ## """ ## Private slot to show the bookmarks dialog. ## """ ## from .Bookmarks.BookmarksDialog import BookmarksDialog ## self.__bookmarksDialog = BookmarksDialog(self) ## self.__bookmarksDialog.openUrl.connect(self.openUrl) ## self.__bookmarksDialog.newUrl.connect(self.openUrlNewTab) ## self.__bookmarksDialog.show() ## ## def bookmarkAll(self): ## """ ## Public slot to bookmark all open tabs. ## """ ## from .Bookmarks.AddBookmarkDialog import AddBookmarkDialog ## dlg = AddBookmarkDialog() ## dlg.setFolder(True) ## dlg.setTitle(self.tr("Saved Tabs")) ## dlg.exec_() ## ## folder = dlg.addedNode() ## if folder is None: ## return ## ## from .Bookmarks.BookmarkNode import BookmarkNode ## for browser in self.__tabWidget.browsers(): ## bookmark = BookmarkNode(BookmarkNode.Bookmark) ## bookmark.url = bytes(browser.url().toEncoded()).decode() ## bookmark.title = browser.title() ## meta = browser.page().mainFrame().metaData() ## if "description" in meta: ## bookmark.desc = meta["description"][0] ## ## self.bookmarksManager().addBookmark(folder, bookmark) def __find(self): """ Private slot to handle the find action. It opens the search dialog in order to perform the various search actions and to collect the various search info. """ self.__searchWidget.showFind() def __closeAllWindows(self): """ Private slot to close all windows. """ for browser in WebBrowserWindow.BrowserWindows: if browser != self: browser.close() self.close() def closeEvent(self, e): """ Protected event handler for the close event. @param e the close event (QCloseEvent) <br />This event is simply accepted after the history has been saved and all window references have been deleted. """ if not self.__shutdownCalled: res = self.shutdown() if res: e.accept() self.webBrowserClosed.emit() else: e.ignore() else: e.accept() def shutdown(self): """ Public method to shut down the web browser. @return flag indicating successful shutdown (boolean) """ if not self.__tabWidget.shallShutDown(): return False ## if not self.downloadManager().allowQuit(): ## return False ## ## self.downloadManager().shutdown() ## ## self.__closeNetworkMonitor() ## ## self.cookieJar().close() ## ## self.bookmarksToolBar.setModel(None) ## self.bookmarksManager().close() ## ## self.historyManager().close() ## ## self.passwordManager().close() ## ## self.adBlockManager().close() ## ## self.userAgentsManager().close() ## ## self.speedDial().close() ## ## self.syncManager().close() ## ## self.__virusTotal.close() ## ## self.flashCookieManager().shutdown() ## ## self.searchEdit.openSearchManager().close() ## ## if WebBrowserWindow.UseQtHelp: ## self.__searchEngine.cancelIndexing() ## self.__searchEngine.cancelSearching() ## ## if self.__helpInstaller: ## self.__helpInstaller.stop() ## ## self.searchEdit.saveSearches() ## self.__tabWidget.closeAllBrowsers() state = self.saveState() Preferences.setWebBrowser("HelpViewerState", state) if Preferences.getWebBrowser("SaveGeometry"): if not self.__isFullScreen(): Preferences.setGeometry("WebBrowserGeometry", self.saveGeometry()) else: Preferences.setGeometry("WebBrowserGeometry", QByteArray()) try: if self.__fromEric or len(WebBrowserWindow.BrowserWindows) > 1: del WebBrowserWindow.BrowserWindows[ WebBrowserWindow.BrowserWindows.index(self)] except ValueError: pass if not self.__fromEric: Preferences.syncPreferences() self.__shutdownCalled = True return True def __backward(self): """ Private slot called to handle the backward action. """ self.currentBrowser().backward() def __forward(self): """ Private slot called to handle the forward action. """ self.currentBrowser().forward() def __home(self): """ Private slot called to handle the home action. """ self.currentBrowser().home() def __reload(self): """ Private slot called to handle the reload action. """ self.currentBrowser().reload() def __stopLoading(self): """ Private slot called to handle loading of the current page. """ self.currentBrowser().stop() ## def __zoomValueChanged(self, value): ## """ ## Private slot to handle value changes of the zoom widget. ## ## @param value zoom value (integer) ## """ ## self.currentBrowser().setZoomValue(value) ## ## def __zoomIn(self): ## """ ## Private slot called to handle the zoom in action. ## """ ## self.currentBrowser().zoomIn() ## self.__zoomWidget.setValue(self.currentBrowser().zoomValue()) ## ## def __zoomOut(self): ## """ ## Private slot called to handle the zoom out action. ## """ ## self.currentBrowser().zoomOut() ## self.__zoomWidget.setValue(self.currentBrowser().zoomValue()) ## ## def __zoomReset(self): ## """ ## Private slot called to handle the zoom reset action. ## """ ## self.currentBrowser().zoomReset() ## self.__zoomWidget.setValue(self.currentBrowser().zoomValue()) ## ## def __zoomTextOnly(self, textOnly): ## """ ## Private slot called to handle the zoom text only action. ## ## @param textOnly flag indicating to zoom text only (boolean) ## """ ## QWebSettings.globalSettings().setAttribute( ## QWebSettings.ZoomTextOnly, textOnly) ## self.zoomTextOnlyChanged.emit(textOnly) ## ## def __viewFullScreen(self): ## """ ## Private slot called to toggle fullscreen mode. ## """ ## if self.__isFullScreen(): ## # switch back to normal ## self.setWindowState(self.windowState() & ~Qt.WindowFullScreen) ## self.menuBar().show() ## self.fullScreenAct.setIcon( ## UI.PixmapCache.getIcon("windowFullscreen.png")) ## self.fullScreenAct.setIconText(self.tr('Full Screen')) ## else: ## # switch to full screen ## self.setWindowState(self.windowState() | Qt.WindowFullScreen) ## self.menuBar().hide() ## self.fullScreenAct.setIcon( ## UI.PixmapCache.getIcon("windowRestore.png")) ## self.fullScreenAct.setIconText(self.tr('Restore Window')) def __isFullScreen(self): """ Private method to determine, if the window is in full screen mode. @return flag indicating full screen mode (boolean) """ return self.windowState() & Qt.WindowFullScreen def __copy(self): """ Private slot called to handle the copy action. """ self.currentBrowser().copy() ## ## def __privateBrowsing(self): ## """ ## Private slot to switch private browsing. ## """ ## settings = QWebSettings.globalSettings() ## pb = settings.testAttribute(QWebSettings.PrivateBrowsingEnabled) ## if not pb: ## txt = self.tr( ## """<b>Are you sure you want to turn on private""" ## """ browsing?</b><p>When private browsing is turned on,""" ## """ web pages are not added to the history, searches""" ## """ are not added to the list of recent searches and""" ## """ web site icons and cookies are not stored.""" ## """ HTML5 offline storage will be deactivated.""" ## """ Until you close the window, you can still click""" ## """ the Back and Forward buttons to return to the""" ## """ web pages you have opened.</p>""") ## res = E5MessageBox.yesNo(self, "", txt) ## if res: ## self.setPrivateMode(True) ## else: ## self.setPrivateMode(False) ## ## def setPrivateMode(self, on): ## """ ## Public method to set the privacy mode. ## ## @param on flag indicating the privacy state (boolean) ## """ ## QWebSettings.globalSettings().setAttribute( ## QWebSettings.PrivateBrowsingEnabled, on) ## if on: ## self.__setIconDatabasePath(False) ## else: ## self.__setIconDatabasePath(True) ## self.privateBrowsingAct.setChecked(on) ## self.privacyChanged.emit(on) def currentBrowser(self): """ Public method to get a reference to the current web browser. @return reference to the current help browser (WebBrowserView) """ return self.__tabWidget.currentBrowser() def browserAt(self, index): """ Public method to get a reference to the web browser with the given index. @param index index of the browser to get (integer) @return reference to the indexed web browser (WebBrowserView) """ return self.__tabWidget.browserAt(index) def browsers(self): """ Public method to get a list of references to all web browsers. @return list of references to web browsers (list of WebBrowserView) """ return self.__tabWidget.browsers() def __currentChanged(self, index): """ Private slot to handle the currentChanged signal. @param index index of the current tab (integer) """ if index > -1: cb = self.currentBrowser() if cb is not None: self.setForwardAvailable(cb.isForwardAvailable()) self.setBackwardAvailable(cb.isBackwardAvailable()) self.setLoadingActions(cb.isLoading()) ## ## # set value of zoom widget ## self.__zoomWidget.setValue(cb.zoomValue()) def __showPreferences(self): """ Private slot to set the preferences. """ from Preferences.ConfigurationDialog import ConfigurationDialog dlg = ConfigurationDialog( self, 'Configuration', True, fromEric=self.__fromEric, displayMode=ConfigurationDialog.WebBrowserMode) dlg.preferencesChanged.connect(self.preferencesChanged) dlg.masterPasswordChanged.connect(self.masterPasswordChanged) dlg.show() if self.__lastConfigurationPageName: dlg.showConfigurationPageByName(self.__lastConfigurationPageName) else: dlg.showConfigurationPageByName("empty") dlg.exec_() QApplication.processEvents() if dlg.result() == QDialog.Accepted: dlg.setPreferences() Preferences.syncPreferences() self.preferencesChanged() self.__lastConfigurationPageName = dlg.getConfigurationPageName() def preferencesChanged(self): """ Public slot to handle a change of preferences. """ if not self.__fromEric: self.setStyle(Preferences.getUI("Style"), Preferences.getUI("StyleSheet")) self.__initWebEngineSettings() ## self.networkAccessManager().preferencesChanged() ## ## self.historyManager().preferencesChanged() ## self.__tabWidget.preferencesChanged() ## self.searchEdit.preferencesChanged() ## ## self.__virusTotal.preferencesChanged() ## if not Preferences.getHelp("VirusTotalEnabled") or \ ## Preferences.getHelp("VirusTotalServiceKey") == "": ## self.virustotalScanCurrentAct.setEnabled(False) ## self.virustotalIpReportAct.setEnabled(False) ## self.virustotalDomainReportAct.setEnabled(False) ## else: ## self.virustotalScanCurrentAct.setEnabled(True) ## self.virustotalIpReportAct.setEnabled(True) ## self.virustotalDomainReportAct.setEnabled(True) def masterPasswordChanged(self, oldPassword, newPassword): """ Public slot to handle the change of the master password. @param oldPassword current master password (string) @param newPassword new master password (string) """ ## from Preferences.ConfigurationDialog import ConfigurationDialog ## self.passwordManager().masterPasswordChanged(oldPassword, newPassword) ## if self.__fromEric and isinstance(self.sender(), ConfigurationDialog): ## # we were called from our local configuration dialog ## Preferences.convertPasswords(oldPassword, newPassword) ## Utilities.crypto.changeRememberedMaster(newPassword) ## def __showAcceptedLanguages(self): ## """ ## Private slot to configure the accepted languages for web pages. ## """ ## from .HelpLanguagesDialog import HelpLanguagesDialog ## dlg = HelpLanguagesDialog(self) ## dlg.exec_() ## self.networkAccessManager().languagesChanged() ## def __showCookiesConfiguration(self): ## """ ## Private slot to configure the cookies handling. ## """ ## from .CookieJar.CookiesConfigurationDialog import \ ## CookiesConfigurationDialog ## dlg = CookiesConfigurationDialog(self) ## dlg.exec_() ## def __showFlashCookiesManagement(self): ## """ ## Private slot to show the flash cookies management dialog. ## """ ## self.flashCookieManager().showFlashCookieManagerDialog() ## def __showOfflineStorageConfiguration(self): ## """ ## Private slot to configure the offline storage. ## """ ## from .OfflineStorage.OfflineStorageConfigDialog import \ ## OfflineStorageConfigDialog ## dlg = OfflineStorageConfigDialog(self) ## if dlg.exec_() == QDialog.Accepted: ## dlg.storeData() ## self.__initWebEngineSettings() @classmethod def setUseQtHelp(cls, use): """ Class method to set the QtHelp usage. @param use flag indicating usage (boolean) """ if use: cls.useQtHelp = use and QTHELP_AVAILABLE else: cls.useQtHelp = False ## @classmethod ## def helpEngine(cls): ## """ ## Class method to get a reference to the help engine. ## ## @return reference to the help engine (QHelpEngine) ## """ ## if cls.useQtHelp: ## if cls._helpEngine is None: ## cls._helpEngine = \ ## QHelpEngine(os.path.join(Utilities.getConfigDir(), ## "browser", "eric6help.qhc")) ## return cls._helpEngine ## else: ## return None ## ## @classmethod ## def networkAccessManager(cls): ## """ ## Class method to get a reference to the network access manager. ## ## @return reference to the network access manager (NetworkAccessManager) ## """ ## if cls._networkAccessManager is None: ## from .Network.NetworkAccessManager import NetworkAccessManager ## from .CookieJar.CookieJar import CookieJar ## cls._networkAccessManager = \ ## NetworkAccessManager(cls.helpEngine()) ## cls._cookieJar = CookieJar() ## cls._networkAccessManager.setCookieJar(cls._cookieJar) ## ## return cls._networkAccessManager ## ## @classmethod ## def cookieJar(cls): ## """ ## Class method to get a reference to the cookie jar. ## ## @return reference to the cookie jar (CookieJar) ## """ ## return cls.networkAccessManager().cookieJar() ## ## def __clearIconsDatabase(self): ## """ ## Private slot to clear the icons databse. ## """ ## QWebSettings.clearIconDatabase() ## @pyqtSlot(QUrl) def __linkActivated(self, url): """ Private slot to handle the selection of a link. @param url URL to be shown (QUrl) """ if not self.__activating: self.__activating = True ## req = QNetworkRequest(url) ## req.setRawHeader(b"X-Eric6-UserLoadAction", b"1") ## self.currentBrowser().setSource( ## None, (req, QNetworkAccessManager.GetOperation, b"")) self.currentBrowser().setUrl(url) self.__activating = False ## def __linksActivated(self, links, keyword): ## """ ## Private slot to select a topic to be shown. ## ## @param links dictionary with help topic as key (string) and ## URL as value (QUrl) ## @param keyword keyword for the link set (string) ## """ ## if not self.__activating: ## from .HelpTopicDialog import HelpTopicDialog ## self.__activating = True ## dlg = HelpTopicDialog(self, keyword, links) ## if dlg.exec_() == QDialog.Accepted: ## self.currentBrowser().setSource(dlg.link()) ## self.__activating = False ## def __activateCurrentBrowser(self): """ Private slot to activate the current browser. """ self.currentBrowser().setFocus() ## def __syncTOC(self): ## """ ## Private slot to synchronize the TOC with the currently shown page. ## """ ## if WebBrowserWindow.UseQtHelp: ## QApplication.setOverrideCursor(Qt.WaitCursor) ## url = self.currentBrowser().source() ## self.__showTocWindow() ## if not self.__tocWindow.syncToContent(url): ## self.statusBar().showMessage( ## self.tr("Could not find an associated content."), 5000) ## QApplication.restoreOverrideCursor() ## ## def __showTocWindow(self): ## """ ## Private method to show the table of contents window. ## """ ## if WebBrowserWindow.UseQtHelp: ## self.__activateDock(self.__tocWindow) ## ## def __hideTocWindow(self): ## """ ## Private method to hide the table of contents window. ## """ ## if WebBrowserWindow.UseQtHelp: ## self.__tocDock.hide() ## ## def __showIndexWindow(self): ## """ ## Private method to show the index window. ## """ ## if WebBrowserWindow.UseQtHelp: ## self.__activateDock(self.__indexWindow) ## ## def __hideIndexWindow(self): ## """ ## Private method to hide the index window. ## """ ## if WebBrowserWindow.UseQtHelp: ## self.__indexDock.hide() ## ## def __showSearchWindow(self): ## """ ## Private method to show the search window. ## """ ## if WebBrowserWindow.UseQtHelp: ## self.__activateDock(self.__searchWindow) ## ## def __hideSearchWindow(self): ## """ ## Private method to hide the search window. ## """ ## if WebBrowserWindow.UseQtHelp: ## self.__searchDock.hide() ## ## def __activateDock(self, widget): ## """ ## Private method to activate the dock widget of the given widget. ## ## @param widget reference to the widget to be activated (QWidget) ## """ ## widget.parent().show() ## widget.parent().raise_() ## widget.setFocus() ## ## def __setupFilterCombo(self): ## """ ## Private slot to setup the filter combo box. ## """ ## if WebBrowserWindow.UseQtHelp: ## curFilter = self.filterCombo.currentText() ## if not curFilter: ## curFilter = self.__helpEngine.currentFilter() ## self.filterCombo.clear() ## self.filterCombo.addItems(self.__helpEngine.customFilters()) ## idx = self.filterCombo.findText(curFilter) ## if idx < 0: ## idx = 0 ## self.filterCombo.setCurrentIndex(idx) ## ## def __filterQtHelpDocumentation(self, customFilter): ## """ ## Private slot to filter the QtHelp documentation. ## ## @param customFilter name of filter to be applied (string) ## """ ## if self.__helpEngine: ## self.__helpEngine.setCurrentFilter(customFilter) ## ## def __manageQtHelpDocumentation(self): ## """ ## Private slot to manage the QtHelp documentation database. ## """ ## if WebBrowserWindow.UseQtHelp: ## from .QtHelpDocumentationDialog import QtHelpDocumentationDialog ## dlg = QtHelpDocumentationDialog(self.__helpEngine, self) ## dlg.exec_() ## if dlg.hasChanges(): ## for i in sorted(dlg.getTabsToClose(), reverse=True): ## self.__tabWidget.closeBrowserAt(i) ## self.__helpEngine.setupData() ## def getSourceFileList(self): """ Public method to get a list of all opened source files. @return dictionary with tab id as key and host/namespace as value """ return self.__tabWidget.getSourceFileList() ## def __manageQtHelpFilters(self): ## """ ## Private slot to manage the QtHelp filters. ## """ ## if WebBrowserWindow.UseQtHelp: ## from .QtHelpFiltersDialog import QtHelpFiltersDialog ## dlg = QtHelpFiltersDialog(self.__helpEngine, self) ## dlg.exec_() ## ## def __indexingStarted(self): ## """ ## Private slot to handle the start of the indexing process. ## """ ## if WebBrowserWindow.UseQtHelp: ## self.__indexing = True ## if self.__indexingProgress is None: ## self.__indexingProgress = QWidget() ## layout = QHBoxLayout(self.__indexingProgress) ## layout.setContentsMargins(0, 0, 0, 0) ## sizePolicy = QSizePolicy(QSizePolicy.Preferred, ## QSizePolicy.Maximum) ## ## label = QLabel(self.tr("Updating search index")) ## label.setSizePolicy(sizePolicy) ## layout.addWidget(label) ## ## progressBar = QProgressBar() ## progressBar.setRange(0, 0) ## progressBar.setTextVisible(False) ## progressBar.setFixedHeight(16) ## progressBar.setSizePolicy(sizePolicy) ## layout.addWidget(progressBar) ## ## self.statusBar().insertPermanentWidget( ## 0, self.__indexingProgress) ## ## def __indexingFinished(self): ## """ ## Private slot to handle the start of the indexing process. ## """ ## if WebBrowserWindow.UseQtHelp: ## self.statusBar().removeWidget(self.__indexingProgress) ## self.__indexingProgress = None ## self.__indexing = False ## if self.__searchWord is not None: ## self.__searchForWord() ## ## def __searchForWord(self): ## """ ## Private slot to search for a word. ## """ ## if WebBrowserWindow.UseQtHelp and not self.__indexing and \ ## self.__searchWord is not None: ## self.__searchDock.show() ## self.__searchDock.raise_() ## query = QHelpSearchQuery(QHelpSearchQuery.DEFAULT, ## [self.__searchWord]) ## self.__searchEngine.search([query]) ## self.__searchWord = None ## ## def search(self, word): ## """ ## Public method to search for a word. ## ## @param word word to search for (string) ## """ ## if WebBrowserWindow.UseQtHelp: ## self.__searchWord = word ## self.__searchForWord() ## ## def __removeOldDocumentation(self): ## """ ## Private slot to remove non-existing documentation from the help engine. ## """ ## for namespace in self.__helpEngine.registeredDocumentations(): ## docFile = self.__helpEngine.documentationFileName(namespace) ## if not os.path.exists(docFile): ## self.__helpEngine.unregisterDocumentation(namespace) ## ## def __lookForNewDocumentation(self): ## """ ## Private slot to look for new documentation to be loaded into the ## help database. ## """ ## if WebBrowserWindow.UseQtHelp: ## from .HelpDocsInstaller import HelpDocsInstaller ## self.__helpInstaller = HelpDocsInstaller( ## self.__helpEngine.collectionFile()) ## self.__helpInstaller.errorMessage.connect( ## self.__showInstallationError) ## self.__helpInstaller.docsInstalled.connect(self.__docsInstalled) ## ## self.statusBar().showMessage( ## self.tr("Looking for Documentation...")) ## self.__helpInstaller.installDocs() ## ## def __showInstallationError(self, message): ## """ ## Private slot to show installation errors. ## ## @param message message to be shown (string) ## """ ## E5MessageBox.warning( ## self, ## self.tr("eric6 Web Browser"), ## message) ## ## def __docsInstalled(self, installed): ## """ ## Private slot handling the end of documentation installation. ## ## @param installed flag indicating that documents were installed ## (boolean) ## """ ## if WebBrowserWindow.UseQtHelp: ## if installed: ## self.__helpEngine.setupData() ## self.statusBar().clearMessage() ## ## def __initHelpDb(self): ## """ ## Private slot to initialize the documentation database. ## """ ## if WebBrowserWindow.UseQtHelp: ## if not self.__helpEngine.setupData(): ## return ## ## unfiltered = self.tr("Unfiltered") ## if unfiltered not in self.__helpEngine.customFilters(): ## hc = QHelpEngineCore(self.__helpEngine.collectionFile()) ## hc.setupData() ## hc.addCustomFilter(unfiltered, []) ## hc = None ## del hc ## ## self.__helpEngine.blockSignals(True) ## self.__helpEngine.setCurrentFilter(unfiltered) ## self.__helpEngine.blockSignals(False) ## self.__helpEngine.setupData() ## ## def __warning(self, msg): ## """ ## Private slot handling warnings from the help engine. ## ## @param msg message sent by the help engine (string) ## """ ## E5MessageBox.warning( ## self, ## self.tr("Help Engine"), msg) ## def __aboutToShowSettingsMenu(self): """ Private slot to show the Settings menu. """ self.editMessageFilterAct.setEnabled( E5ErrorMessage.messageHandlerInstalled()) def __showBackMenu(self): """ Private slot showing the backwards navigation menu. """ self.backMenu.clear() history = self.currentBrowser().history() historyCount = history.count() backItems = history.backItems(historyCount) for index in range(len(backItems) - 1, -1, -1): item = backItems[index] act = QAction(self) act.setData(-1 * (index + 1)) ## icon = HelpWindow.__getWebIcon(item.url()) ## act.setIcon(icon) act.setText(item.title()) self.backMenu.addAction(act) def __showForwardMenu(self): """ Private slot showing the forwards navigation menu. """ self.forwardMenu.clear() history = self.currentBrowser().history() historyCount = history.count() forwardItems = history.forwardItems(historyCount) for index in range(len(forwardItems)): item = forwardItems[index] act = QAction(self) act.setData(index + 1) ## icon = HelpWindow.__getWebIcon(item.url()) ## act.setIcon(icon) act.setText(item.title()) self.forwardMenu.addAction(act) def __navigationMenuActionTriggered(self, act): """ Private slot to go to the selected page. @param act reference to the action selected in the navigation menu (QAction) """ offset = act.data() history = self.currentBrowser().history() historyCount = history.count() if offset < 0: # go back history.goToItem(history.backItems(historyCount)[-1 * offset - 1]) else: # go forward history.goToItem(history.forwardItems(historyCount)[offset - 1]) ## def __clearPrivateData(self): ## """ ## Private slot to clear the private data. ## """ ## from .HelpClearPrivateDataDialog import HelpClearPrivateDataDialog ## dlg = HelpClearPrivateDataDialog(self) ## if dlg.exec_() == QDialog.Accepted: ## # browsing history, search history, favicons, disk cache, cookies, ## # passwords, web databases, downloads, Flash cookies ## (history, searches, favicons, cache, cookies, ## passwords, databases, downloads, flashCookies, zoomValues, ## historyPeriod) = dlg.getData() ## if history: ## self.historyManager().clear(historyPeriod) ## self.__tabWidget.clearClosedTabsList() ## if searches: ## self.searchEdit.clear() ## if downloads: ## self.downloadManager().cleanup() ## self.downloadManager().hide() ## if favicons: ## self.__clearIconsDatabase() ## if cache: ## try: ## self.networkAccessManager().cache().clear() ## except AttributeError: ## pass ## if cookies: ## self.cookieJar().clear() ## if passwords: ## self.passwordManager().clear() ## if databases: ## if hasattr(QWebDatabase, "removeAllDatabases"): ## QWebDatabase.removeAllDatabases() ## else: ## for securityOrigin in QWebSecurityOrigin.allOrigins(): ## for database in securityOrigin.databases(): ## QWebDatabase.removeDatabase(database) ## if flashCookies: ## from .HelpLanguagesDialog import HelpLanguagesDialog ## languages = Preferences.toList( ## Preferences.Prefs.settings.value( ## "Help/AcceptLanguages", ## HelpLanguagesDialog.defaultAcceptLanguages())) ## if languages: ## language = languages[0] ## langCode = language.split("[")[1][:2] ## self.newTab( ## "http://www.macromedia.com/support/documentation/" ## "{0}/flashplayer/help/settings_manager07.html".format( ## langCode)) ## if zoomValues: ## self.zoomManager().clear() ## ## def __showEnginesConfigurationDialog(self): ## """ ## Private slot to show the search engines configuration dialog. ## """ ## from .OpenSearch.OpenSearchDialog import OpenSearchDialog ## ## dlg = OpenSearchDialog(self) ## dlg.exec_() ## ## def searchEnginesAction(self): ## """ ## Public method to get a reference to the search engines configuration ## action. ## ## @return reference to the search engines configuration action (QAction) ## """ ## return self.searchEnginesAct ## ## def __showPasswordsDialog(self): ## """ ## Private slot to show the passwords management dialog. ## """ ## from .Passwords.PasswordsDialog import PasswordsDialog ## ## dlg = PasswordsDialog(self) ## dlg.exec_() ## ## def __showCertificatesDialog(self): ## """ ## Private slot to show the certificates management dialog. ## """ ## from E5Network.E5SslCertificatesDialog import E5SslCertificatesDialog ## ## dlg = E5SslCertificatesDialog(self) ## dlg.exec_() ## ## def __showAdBlockDialog(self): ## """ ## Private slot to show the AdBlock configuration dialog. ## """ ## self.adBlockManager().showDialog() ## ## def __showClickToFlashDialog(self): ## """ ## Private slot to open the ClickToFlash whitelist configuration dialog. ## """ ## from .HelpBrowserWV import HelpWebPage ## HelpWebPage.webPluginFactory().plugin("ClickToFlash").configure() ## ## def __showPersonalInformationDialog(self): ## """ ## Private slot to show the Personal Information configuration dialog. ## """ ## self.personalInformationManager().showConfigurationDialog() ## ## def __showGreaseMonkeyConfigDialog(self): ## """ ## Private slot to show the GreaseMonkey scripts configuration dialog. ## """ ## self.greaseMonkeyManager().showConfigurationDialog() ## ## def __showFeaturePermissionDialog(self): ## """ ## Private slot to show the feature permission dialog. ## """ ## self.featurePermissionManager().showFeaturePermissionsDialog() ## ## def __showZoomValuesDialog(self): ## """ ## Private slot to show the zoom values management dialog. ## """ ## from .ZoomManager.ZoomValuesDialog import ZoomValuesDialog ## ## dlg = ZoomValuesDialog(self) ## dlg.exec_() ## ## def __showNetworkMonitor(self): ## """ ## Private slot to show the network monitor dialog. ## """ ## from E5Network.E5NetworkMonitor import E5NetworkMonitor ## monitor = E5NetworkMonitor.instance(self.networkAccessManager()) ## monitor.show() ## ## def __showDownloadsWindow(self): ## """ ## Private slot to show the downloads dialog. ## """ ## self.downloadManager().show() ## ## def __closeNetworkMonitor(self): ## """ ## Private slot to close the network monitor dialog. ## """ ## from E5Network.E5NetworkMonitor import E5NetworkMonitor ## E5NetworkMonitor.closeMonitor() ## def __showPageSource(self): """ Private slot to show the source of the current page in an editor. """ self.currentBrowser().page().toHtml(self.__showPageSourceCallback) def __showPageSourceCallback(self, src): """ Private method to show the source of the current page in an editor. @param src source of the web page @type str """ from QScintilla.MiniEditor import MiniEditor editor = MiniEditor(parent=self) editor.setText(src, "Html") editor.setLanguage("dummy.html") editor.show() @classmethod def icon(cls, url): """ Class method to get the icon for an URL. @param url URL to get icon for (QUrl) @return icon for the URL (QIcon) """ # TODO: implement an icon fetcher ## icon = HelpWindow.__getWebIcon(url) ## if icon.isNull(): ## hostUrl = QUrl() ## hostUrl.setScheme(url.scheme()) ## hostUrl.setHost(url.host()) ## icon = HelpWindow.__getWebIcon(hostUrl) ## ## if icon.isNull(): ## pixmap = QWebSettings.webGraphic( ## QWebSettings.DefaultFrameIconGraphic) ## if pixmap.isNull(): ## pixmap = UI.PixmapCache.getPixmap("defaultIcon.png") ## QWebSettings.setWebGraphic( ## QWebSettings.DefaultFrameIconGraphic, pixmap) ## return QIcon(pixmap) ## icon = UI.PixmapCache.getIcon("defaultIcon.png") return icon ## @staticmethod ## def __getWebIcon(url): ## """ ## Private static method to fetch the icon for a URL. ## ## @param url URL to get icon for (QUrl) ## @return icon for the URL (QIcon) ## """ ## scheme = url.scheme() ## if scheme in ["eric", "about"]: ## return UI.PixmapCache.getIcon("ericWeb.png") ## elif scheme == "qthelp" and QTHELP_AVAILABLE: ## return UI.PixmapCache.getIcon("qthelp.png") ## elif scheme == "file": ## return UI.PixmapCache.getIcon("fileMisc.png") ## elif scheme == "abp": ## return UI.PixmapCache.getIcon("adBlockPlus.png") ## ## icon = QWebSettings.iconForUrl(url) ## if icon.isNull(): ## # try again ## QThread.usleep(10) ## icon = QWebSettings.iconForUrl(url) ## if not icon.isNull(): ## icon = QIcon(icon.pixmap(22, 22)) ## return icon ## ## @classmethod ## def bookmarksManager(cls): ## """ ## Class method to get a reference to the bookmarks manager. ## ## @return reference to the bookmarks manager (BookmarksManager) ## """ ## if cls._bookmarksManager is None: ## from .Bookmarks.BookmarksManager import BookmarksManager ## cls._bookmarksManager = BookmarksManager() ## ## return cls._bookmarksManager ## def openUrl(self, url, title): """ Public slot to load a URL in the current tab. @param url URL to be opened (QUrl) @param title title of the bookmark (string) """ self.__linkActivated(url) def openUrlNewTab(self, url, title): """ Public slot to load a URL in a new tab. @param url URL to be opened (QUrl) @param title title of the bookmark (string) """ ## req = QNetworkRequest(url) ## req.setRawHeader(b"X-Eric6-UserLoadAction", b"1") ## self.newTab(None, (req, QNetworkAccessManager.GetOperation, b"")) self.newTab(url) ## @classmethod ## def historyManager(cls): ## """ ## Class method to get a reference to the history manager. ## ## @return reference to the history manager (HistoryManager) ## """ ## if cls._historyManager is None: ## from .History.HistoryManager import HistoryManager ## cls._historyManager = HistoryManager() ## ## return cls._historyManager ## ## @classmethod ## def passwordManager(cls): ## """ ## Class method to get a reference to the password manager. ## ## @return reference to the password manager (PasswordManager) ## """ ## if cls._passwordManager is None: ## from .Passwords.PasswordManager import PasswordManager ## cls._passwordManager = PasswordManager() ## ## return cls._passwordManager ## ## @classmethod ## def adBlockManager(cls): ## """ ## Class method to get a reference to the AdBlock manager. ## ## @return reference to the AdBlock manager (AdBlockManager) ## """ ## if cls._adblockManager is None: ## from .AdBlock.AdBlockManager import AdBlockManager ## cls._adblockManager = AdBlockManager() ## ## return cls._adblockManager ## ## def adBlockIcon(self): ## """ ## Public method to get a reference to the AdBlock icon. ## ## @return reference to the AdBlock icon (AdBlockIcon) ## """ ## return self.__adBlockIcon ## ## @classmethod ## def downloadManager(cls): ## """ ## Class method to get a reference to the download manager. ## ## @return reference to the password manager (DownloadManager) ## """ ## if cls._downloadManager is None: ## from .Download.DownloadManager import DownloadManager ## cls._downloadManager = DownloadManager() ## ## return cls._downloadManager ## ## @classmethod ## def personalInformationManager(cls): ## """ ## Class method to get a reference to the personal information manager. ## ## @return reference to the personal information manager ## (PersonalInformationManager) ## """ ## if cls._personalInformationManager is None: ## from .PersonalInformationManager.PersonalInformationManager \ ## import PersonalInformationManager ## cls._personalInformationManager = PersonalInformationManager() ## ## return cls._personalInformationManager ## ## @classmethod ## def greaseMonkeyManager(cls): ## """ ## Class method to get a reference to the GreaseMonkey manager. ## ## @return reference to the GreaseMonkey manager (GreaseMonkeyManager) ## """ ## if cls._greaseMonkeyManager is None: ## from .GreaseMonkey.GreaseMonkeyManager import GreaseMonkeyManager ## cls._greaseMonkeyManager = GreaseMonkeyManager() ## ## return cls._greaseMonkeyManager ## ## @classmethod ## def featurePermissionManager(cls): ## """ ## Class method to get a reference to the feature permission manager. ## ## @return reference to the feature permission manager ## @rtype FeaturePermissionManager ## """ ## if cls._featurePermissionManager is None: ## from .FeaturePermissions.FeaturePermissionManager import \ ## FeaturePermissionManager ## cls._featurePermissionManager = FeaturePermissionManager() ## ## return cls._featurePermissionManager ## ## @classmethod ## def flashCookieManager(cls): ## """ ## Class method to get a reference to the flash cookies manager. ## ## @return reference to the flash cookies manager ## @rtype FlashCookieManager ## """ ## if cls._flashCookieManager is None: ## from .FlashCookieManager.FlashCookieManager import \ ## FlashCookieManager ## cls._flashCookieManager = FlashCookieManager() ## ## return cls._flashCookieManager ## ## @classmethod ## def zoomManager(cls): ## """ ## Class method to get a reference to the zoom values manager. ## ## @return reference to the zoom values manager ## @rtype ZoomManager ## """ ## if cls._zoomManager is None: ## from .ZoomManager.ZoomManager import ZoomManager ## cls._zoomManager = ZoomManager() ## ## return cls._zoomManager ## @classmethod def mainWindow(cls): """ Class method to get a reference to the main window. @return reference to the main window (WebBrowserWindow) """ if cls.BrowserWindows: return cls.BrowserWindows[0] else: return None @classmethod def mainWindows(cls): """ Class method to get references to all main windows. @return references to all main window (list of WebBrowserWindow) """ return cls.BrowserWindows def __appFocusChanged(self, old, now): """ Private slot to handle a change of the focus. @param old reference to the widget, that lost focus (QWidget or None) @param now reference to the widget having the focus (QWidget or None) """ if isinstance(now, WebBrowserWindow): self.__lastActiveWindow = now def getWindow(self): """ Public method to get a reference to the most recent active web browser window. @return reference to most recent web browser window @rtype WebBrowserWindow """ if self.__lastActiveWindow: return self.__lastActiveWindow return self.mainWindow() ## def openSearchManager(self): ## """ ## Public method to get a reference to the opensearch manager object. ## ## @return reference to the opensearch manager object (OpenSearchManager) ## """ ## return self.searchEdit.openSearchManager() ## def __aboutToShowTextEncodingMenu(self): """ Private slot to populate the text encoding menu. """ self.__textEncodingMenu.clear() codecs = [] for codec in QTextCodec.availableCodecs(): codecs.append(str(codec, encoding="utf-8").lower()) codecs.sort() defaultTextEncoding = \ QWebEngineSettings.globalSettings().defaultTextEncoding().lower() 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) for codec in codecs: if codec.startswith(("iso", "latin", "csisolatin")): act = isoMenu.addAction(codec) elif codec.startswith(("windows", "cp1")): act = winMenu.addAction(codec) elif codec.startswith("iscii"): act = isciiMenu.addAction(codec) elif codec.startswith("utf"): act = uniMenu.addAction(codec) elif codec.startswith(("ibm", "csibm", "cp")): act = ibmMenu.addAction(codec) 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) def __setTextEncoding(self, act): """ Private slot to set the selected text encoding as the default for this session. @param act reference to the selected action (QAction) """ codec = act.data() if codec == "": QWebEngineSettings.globalSettings().setDefaultTextEncoding("") else: QWebEngineSettings.globalSettings().setDefaultTextEncoding(codec) ## def eventMouseButtons(self): ## """ ## Public method to get the last recorded mouse buttons. ## ## @return mouse buttons (Qt.MouseButtons) ## """ ## return self.__eventMouseButtons ## ## def eventKeyboardModifiers(self): ## """ ## Public method to get the last recorded keyboard modifiers. ## ## @return keyboard modifiers (Qt.KeyboardModifiers) ## """ ## return self.__eventKeyboardModifiers ## ## def setEventMouseButtons(self, buttons): ## """ ## Public method to record mouse buttons. ## ## @param buttons mouse buttons to record (Qt.MouseButtons) ## """ ## self.__eventMouseButtons = buttons ## ## def setEventKeyboardModifiers(self, modifiers): ## """ ## Public method to record keyboard modifiers. ## ## @param modifiers keyboard modifiers to record (Qt.KeyboardModifiers) ## """ ## self.__eventKeyboardModifiers = modifiers ## def mousePressEvent(self, evt): """ Protected method called by a mouse press event. @param evt reference to the mouse event (QMouseEvent) """ if evt.button() == Qt.XButton1: self.currentBrowser().triggerPageAction(QWebEnginePage.Back) elif evt.button() == Qt.XButton2: self.currentBrowser().triggerPageAction(QWebEnginePage.Forward) else: super(WebBrowserWindow, self).mousePressEvent(evt) ## @classmethod ## def feedsManager(cls): ## """ ## Class method to get a reference to the RSS feeds manager. ## ## @return reference to the RSS feeds manager (FeedsManager) ## """ ## if cls._feedsManager is None: ## from .Feeds.FeedsManager import FeedsManager ## cls._feedsManager = FeedsManager() ## ## return cls._feedsManager ## ## def __showFeedsManager(self): ## """ ## Private slot to show the feeds manager dialog. ## """ ## feedsManager = self.feedsManager() ## feedsManager.openUrl.connect(self.openUrl) ## feedsManager.newUrl.connect(self.openUrlNewTab) ## feedsManager.rejected.connect(self.__feedsManagerClosed) ## feedsManager.show() ## ## def __feedsManagerClosed(self): ## """ ## Private slot to handle closing the feeds manager dialog. ## """ ## feedsManager = self.sender() ## feedsManager.openUrl.disconnect(self.openUrl) ## feedsManager.newUrl.disconnect(self.openUrlNewTab) ## feedsManager.rejected.disconnect(self.__feedsManagerClosed) ## ## def __showSiteinfoDialog(self): ## """ ## Private slot to show the site info dialog. ## """ ## from .SiteInfo.SiteInfoDialog import SiteInfoDialog ## self.__siteinfoDialog = SiteInfoDialog(self.currentBrowser(), self) ## self.__siteinfoDialog.show() ## ## @classmethod ## def userAgentsManager(cls): ## """ ## Class method to get a reference to the user agents manager. ## ## @return reference to the user agents manager (UserAgentManager) ## """ ## if cls._userAgentsManager is None: ## from .UserAgent.UserAgentManager import UserAgentManager ## cls._userAgentsManager = UserAgentManager() ## ## return cls._userAgentsManager ## ## def __showUserAgentsDialog(self): ## """ ## Private slot to show the user agents management dialog. ## """ ## from .UserAgent.UserAgentsDialog import UserAgentsDialog ## ## dlg = UserAgentsDialog(self) ## dlg.exec_() ## ## @classmethod ## def syncManager(cls): ## """ ## Class method to get a reference to the data synchronization manager. ## ## @return reference to the data synchronization manager (SyncManager) ## """ ## if cls._syncManager is None: ## from .Sync.SyncManager import SyncManager ## cls._syncManager = SyncManager() ## ## return cls._syncManager ## ## def __showSyncDialog(self): ## """ ## Private slot to show the synchronization dialog. ## """ ## self.syncManager().showSyncDialog() ## ## @classmethod ## def speedDial(cls): ## """ ## Class methdo to get a reference to the speed dial. ## ## @return reference to the speed dial (SpeedDial) ## """ ## if cls._speedDial is None: ## from .SpeedDial.SpeedDial import SpeedDial ## cls._speedDial = SpeedDial() ## ## return cls._speedDial ## def keyPressEvent(self, evt): """ Protected method to handle key presses. @param evt reference to the key press event (QKeyEvent) """ number = -1 key = evt.key() if key == Qt.Key_1: number = 1 elif key == Qt.Key_2: number = 2 elif key == Qt.Key_3: number = 3 elif key == Qt.Key_4: number = 4 elif key == Qt.Key_5: number = 5 elif key == Qt.Key_6: number = 6 elif key == Qt.Key_7: number = 7 elif key == Qt.Key_8: number = 8 elif key == Qt.Key_9: number = 9 elif key == Qt.Key_0: number = 10 if number != -1: if evt.modifiers() == Qt.KeyboardModifiers(Qt.AltModifier): if number == 10: number = self.__tabWidget.count() self.__tabWidget.setCurrentIndex(number - 1) return ## ## if evt.modifiers() == Qt.KeyboardModifiers(Qt.MetaModifier): ## url = self.speedDial().urlForShortcut(number - 1) ## if url.isValid(): ## self.__linkActivated(url) ## return super(WebBrowserWindow, self).keyPressEvent(evt) ## ########################################################################### ## ## Interface to VirusTotal below ## ## ########################################################################### ## ## def __virusTotalScanCurrentSite(self): ## """ ## Private slot to ask VirusTotal for a scan of the URL of the current ## browser. ## """ ## cb = self.currentBrowser() ## if cb is not None: ## url = cb.url() ## if url.scheme() in ["http", "https", "ftp"]: ## self.requestVirusTotalScan(url) ## ## def requestVirusTotalScan(self, url): ## """ ## Public method to submit a request to scan an URL by VirusTotal. ## ## @param url URL to be scanned (QUrl) ## """ ## self.__virusTotal.submitUrl(url) ## ## def __virusTotalSubmitUrlError(self, msg): ## """ ## Private slot to handle an URL scan submission error. ## ## @param msg error message (str) ## """ ## E5MessageBox.critical( ## self, ## self.tr("VirusTotal Scan"), ## self.tr("""<p>The VirusTotal scan could not be""" ## """ scheduled.<p>\n<p>Reason: {0}</p>""").format(msg)) ## ## def __virusTotalUrlScanReport(self, url): ## """ ## Private slot to initiate the display of the URL scan report page. ## ## @param url URL of the URL scan report page (string) ## """ ## self.newTab(url) ## ## def __virusTotalFileScanReport(self, url): ## """ ## Private slot to initiate the display of the file scan report page. ## ## @param url URL of the file scan report page (string) ## """ ## self.newTab(url) ## ## def __virusTotalIpAddressReport(self): ## """ ## Private slot to retrieve an IP address report. ## """ ## ip, ok = QInputDialog.getText( ## self, ## self.tr("IP Address Report"), ## self.tr("Enter a valid IPv4 address in dotted quad notation:"), ## QLineEdit.Normal) ## if ok and ip: ## if ip.count(".") == 3: ## self.__virusTotal.getIpAddressReport(ip) ## else: ## E5MessageBox.information( ## self, ## self.tr("IP Address Report"), ## self.tr("""The given IP address is not in dotted quad""" ## """ notation.""")) ## ## def __virusTotalDomainReport(self): ## """ ## Private slot to retrieve a domain report. ## """ ## domain, ok = QInputDialog.getText( ## self, ## self.tr("Domain Report"), ## self.tr("Enter a valid domain name:"), ## QLineEdit.Normal) ## if ok and domain: ## self.__virusTotal.getDomainReport(domain) ## ## ########################################################################### ## ## Style sheet handling below ## ## ########################################################################### ## ## def reloadUserStyleSheet(self): ## """ ## Public method to reload the user style sheet. ## """ ## settings = QWebSettings.globalSettings() ## styleSheet = Preferences.getHelp("UserStyleSheet") ## settings.setUserStyleSheetUrl(self.__userStyleSheet(styleSheet)) ## ## def __userStyleSheet(self, styleSheetFile): ## """ ## Private method to generate the user style sheet. ## ## @param styleSheetFile name of the user style sheet file (string) ## @return style sheet (QUrl) ## """ ## userStyle = self.adBlockManager().elementHidingRules() + \ ## "{display:none !important;}" ## ## if styleSheetFile: ## try: ## f = open(styleSheetFile, "r") ## fileData = f.read() ## f.close() ## fileData = fileData.replace("\n", "") ## userStyle += fileData ## except IOError: ## pass ## ## encodedStyle = bytes(QByteArray(userStyle.encode("utf-8")).toBase64())\ ## .decode() ## dataString = "data:text/css;charset=utf-8;base64,{0}".format( ## encodedStyle) ## ## return QUrl(dataString) ########################################## ## Support for desktop notifications below ########################################## @classmethod def showNotification(cls, icon, heading, text): """ Class method to show a desktop notification. @param icon icon to be shown in the notification (QPixmap) @param heading heading of the notification (string) @param text text of the notification (string) """ if cls._fromEric: e5App().getObject("UserInterface").showNotification( icon, heading, text) else: if Preferences.getUI("NotificationsEnabled"): if cls._notification is None: from UI.NotificationWidget import NotificationWidget cls._notification = NotificationWidget() cls._notification.setPixmap(icon) cls._notification.setHeading(heading) cls._notification.setText(text) cls._notification.setTimeout( Preferences.getUI("NotificationTimeout")) cls._notification.move( Preferences.getUI("NotificationPosition")) cls._notification.show() @classmethod def notificationsEnabled(cls): """ Class method to check, if notifications are enabled. @return flag indicating, if notifications are enabled (boolean) """ if cls._fromEric: return e5App().getObject("UserInterface").notificationsEnabled() else: return Preferences.getUI("NotificationsEnabled")