diff -r 643ec3a53d17 -r bddd12f27a4c Helpviewer/HelpWindow.py --- a/Helpviewer/HelpWindow.py Fri Dec 14 19:52:38 2018 +0100 +++ b/Helpviewer/HelpWindow.py Sat Dec 15 16:21:38 2018 +0100 @@ -16,7 +16,7 @@ import os from PyQt5.QtCore import pyqtSlot, pyqtSignal, Qt, QByteArray, QSize, QTimer, \ - QUrl, QThread, QTextCodec + QUrl, QThread, QTextCodec, QFileInfo from PyQt5.QtGui import QDesktopServices, QKeySequence, QFont, QFontMetrics, \ QIcon from PyQt5.QtWidgets import QWidget, QVBoxLayout, QSizePolicy, QDockWidget, \ @@ -56,6 +56,8 @@ import UI.Config from UI.Info import Version +from .HelpSingleApplication import HelpSingleApplicationServer + class HelpWindow(E5MainWindow): """ @@ -72,7 +74,6 @@ helpwindows = [] - _fromEric = False _useQtHelp = QTHELP_AVAILABLE _networkAccessManager = None @@ -94,218 +95,231 @@ _flashCookieManager = None _zoomManager = None - def __init__(self, home, path, parent, name, fromEric=False, - initShortcutsOnly=False, searchWord=None): + def __init__(self, home, path, parent, name, + searchWord=None, qthelp=False, single=False, saname=""): """ 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) + @param home the URL to be shown + @type str + @param path the path of the working dir (usually '.') + @type str + @param parent parent widget of this window + @type QWidget + @param name name of this window + @type str + @param searchWord word to search for + @type str + @param qthelp flag indicating to enable the QtHelp support + @type bool + @param single flag indicating to start in single application mode + @type bool + @param saname name to be used for the single application server + @type str """ super(HelpWindow, self).__init__(parent) self.setObjectName(name) self.setWindowTitle(self.tr("eric6 Web Browser")) - self.fromEric = fromEric - self.__class__._fromEric = fromEric - self.initShortcutsOnly = initShortcutsOnly self.setWindowIcon(UI.PixmapCache.getIcon("ericWeb.png")) self.mHistory = [] self.__lastConfigurationPageName = "" self.__lastActiveWindow = None + self.__shortcutsDialog = None + self.__eventMouseButtons = Qt.NoButton self.__eventKeyboardModifiers = Qt.NoModifier - if self.initShortcutsOnly: - self.__initActions() - else: - from .SearchWidget import SearchWidget - from .HelpTocWidget import HelpTocWidget - from .HelpIndexWidget import HelpIndexWidget - from .HelpSearchWidget import HelpSearchWidget - from .HelpBrowserWV import HelpBrowser - from .HelpTabWidget import HelpTabWidget - from .AdBlock.AdBlockIcon import AdBlockIcon - from .VirusTotal.VirusTotalApi import VirusTotalAPI - - HelpWindow.setUseQtHelp(self.fromEric) - - if not self.fromEric: - self.setStyle(Preferences.getUI("Style"), - Preferences.getUI("StyleSheet")) - - # initialize some SSL stuff - from E5Network.E5SslUtilities import initSSL - initSSL() - - if HelpWindow._useQtHelp: - self.__helpEngine = QHelpEngine( - HelpWindow.getQtHelpCollectionFileName(), - 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) + HelpWindow.setUseQtHelp(qthelp or bool(searchWord)) - self.tabWidget = HelpTabWidget(self) - self.tabWidget.currentChanged[int].connect(self.__currentChanged) - self.tabWidget.titleChanged.connect(self.__titleChanged) - self.tabWidget.showMessage.connect(self.statusBar().showMessage) - self.tabWidget.browserZoomValueChanged.connect( - self.__zoomWidget.setValue) - - self.findDlg = SearchWidget(self, self) - centralWidget = QWidget() - layout = QVBoxLayout() - layout.setContentsMargins(1, 1, 1, 1) - layout.addWidget(self.tabWidget) - layout.addWidget(self.findDlg) - self.tabWidget.setSizePolicy( - QSizePolicy.Preferred, QSizePolicy.Expanding) - centralWidget.setLayout(layout) - self.setCentralWidget(centralWidget) - self.findDlg.hide() + from .SearchWidget import SearchWidget + from .HelpTocWidget import HelpTocWidget + from .HelpIndexWidget import HelpIndexWidget + from .HelpSearchWidget import HelpSearchWidget + from .HelpBrowserWV import HelpBrowser + from .HelpTabWidget import HelpTabWidget + from .AdBlock.AdBlockIcon import AdBlockIcon + from .VirusTotal.VirusTotalApi import VirusTotalAPI + + self.setStyle(Preferences.getUI("Style"), + Preferences.getUI("StyleSheet")) + + # initialize some SSL stuff + from E5Network.E5SslUtilities import initSSL + initSSL() + + if HelpWindow._useQtHelp: + self.__helpEngine = QHelpEngine( + HelpWindow.getQtHelpCollectionFileName(), + 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 = HelpTabWidget(self) + self.tabWidget.currentChanged[int].connect(self.__currentChanged) + self.tabWidget.titleChanged.connect(self.__titleChanged) + self.tabWidget.showMessage.connect(self.statusBar().showMessage) + self.tabWidget.browserZoomValueChanged.connect( + self.__zoomWidget.setValue) + + self.findDlg = SearchWidget(self, self) + centralWidget = QWidget() + layout = QVBoxLayout() + layout.setContentsMargins(1, 1, 1, 1) + layout.addWidget(self.tabWidget) + layout.addWidget(self.findDlg) + self.tabWidget.setSizePolicy( + QSizePolicy.Preferred, QSizePolicy.Expanding) + centralWidget.setLayout(layout) + self.setCentralWidget(centralWidget) + self.findDlg.hide() + + if HelpWindow._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) - if HelpWindow._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) + # 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) - if Preferences.getHelp("SaveGeometry"): - g = Preferences.getGeometry("HelpViewerGeometry") - else: - g = QByteArray() - if g.isEmpty(): - s = QSize(800, 800) - self.resize(s) - else: - self.restoreGeometry(g) - - self.__setIconDatabasePath() - self.__initWebSettings() - - 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() - - self.__class__.helpwindows.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) + # 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.getHelp("SaveGeometry"): + g = Preferences.getGeometry("HelpViewerGeometry") + else: + g = QByteArray() + if g.isEmpty(): + s = QSize(800, 800) + self.resize(s) + else: + self.restoreGeometry(g) + + self.__setIconDatabasePath() + self.__initWebSettings() + + 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() + + self.__class__.helpwindows.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) + + if len(HelpWindow.helpwindows): + QDesktopServices.setUrlHandler( + "http", HelpWindow.helpwindows[0].urlHandler) + QDesktopServices.setUrlHandler( + "https", HelpWindow.helpwindows[0].urlHandler) + + # setup connections + self.__activating = False + if HelpWindow._useQtHelp: + # TOC window + self.__tocWindow.linkActivated.connect(self.__linkActivated) + self.__tocWindow.escapePressed.connect( + self.__activateCurrentBrowser) - if not self.fromEric and len(HelpWindow.helpwindows): - QDesktopServices.setUrlHandler( - "http", HelpWindow.helpwindows[0].urlHandler) - QDesktopServices.setUrlHandler( - "https", HelpWindow.helpwindows[0].urlHandler) - - # setup connections - self.__activating = False - if HelpWindow._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) + # index window + self.__indexWindow.linkActivated.connect(self.__linkActivated) + self.__indexWindow.linksActivated.connect( + self.__linksActivated) + self.__indexWindow.escapePressed.connect( + self.__activateCurrentBrowser) - state = Preferences.getHelp("HelpViewerState") - 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.__shutdownCalled = False - - self.flashCookieManager() - - if HelpWindow._useQtHelp: - QTimer.singleShot(0, self.__lookForNewDocumentation) - if self.__searchWord is not None: - QTimer.singleShot(0, self.__searchForWord) - - e5App().focusChanged.connect(self.__appFocusChanged) - - QTimer.singleShot(0, syncMgr.loadSettings) + # search window + self.__searchWindow.linkActivated.connect( + self.__linkActivated) + self.__searchWindow.escapePressed.connect( + self.__activateCurrentBrowser) + + state = Preferences.getHelp("HelpViewerState") + 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.__shutdownCalled = False + + self.flashCookieManager() + + if single: + self.SAServer = HelpSingleApplicationServer(saname) + self.SAServer.loadUrl.connect(self.__saLoadUrl) + self.SAServer.newTab.connect(self.__saNewTab) + self.SAServer.search.connect(self.__saSearchWord) + self.SAServer.shutdown.connect(self.shutdown) + else: + self.SAServer = None + + if HelpWindow._useQtHelp: + QTimer.singleShot(50, self.__lookForNewDocumentation) + if self.__searchWord is not None: + QTimer.singleShot(0, self.__searchForWord) + + e5App().focusChanged.connect(self.__appFocusChanged) + + QTimer.singleShot(0, syncMgr.loadSettings) def __del__(self): """ @@ -467,8 +481,7 @@ """<b>New Tab</b>""" """<p>This opens a new help window tab.</p>""" )) - if not self.initShortcutsOnly: - self.newTabAct.triggered.connect(self.newTab) + self.newTabAct.triggered.connect(self.newTab) self.__actions.append(self.newTabAct) self.newAct = E5Action( @@ -482,8 +495,7 @@ """<b>New Window</b>""" """<p>This opens a new help browser window.</p>""" )) - if not self.initShortcutsOnly: - self.newAct.triggered.connect(self.newWindow) + self.newAct.triggered.connect(self.newWindow) self.__actions.append(self.newAct) self.openAct = E5Action( @@ -498,8 +510,7 @@ """<p>This opens a new help file for display.""" """ It pops up a file selection dialog.</p>""" )) - if not self.initShortcutsOnly: - self.openAct.triggered.connect(self.__openFile) + self.openAct.triggered.connect(self.__openFile) self.__actions.append(self.openAct) self.openTabAct = E5Action( @@ -515,8 +526,7 @@ """<p>This opens a new help 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.openTabAct.triggered.connect(self.__openFileNewTab) self.__actions.append(self.openTabAct) self.saveAsAct = E5Action( @@ -531,8 +541,7 @@ """<b>Save As...</b>""" """<p>Saves the current page to disk.</p>""" )) - if not self.initShortcutsOnly: - self.saveAsAct.triggered.connect(self.__savePageAs) + self.saveAsAct.triggered.connect(self.__savePageAs) self.__actions.append(self.saveAsAct) self.savePageScreenAct = E5Action( @@ -546,8 +555,7 @@ """<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.savePageScreenAct.triggered.connect(self.__savePageScreen) self.__actions.append(self.savePageScreenAct) self.saveVisiblePageScreenAct = E5Action( @@ -563,9 +571,8 @@ """<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.saveVisiblePageScreenAct.triggered.connect( + self.__saveVisiblePageScreen) self.__actions.append(self.saveVisiblePageScreenAct) bookmarksManager = self.bookmarksManager() @@ -579,9 +586,8 @@ """<b>Import Bookmarks</b>""" """<p>Import bookmarks from other browsers.</p>""" )) - if not self.initShortcutsOnly: - self.importBookmarksAct.triggered.connect( - bookmarksManager.importBookmarks) + self.importBookmarksAct.triggered.connect( + bookmarksManager.importBookmarks) self.__actions.append(self.importBookmarksAct) self.exportBookmarksAct = E5Action( @@ -594,9 +600,8 @@ """<b>Export Bookmarks</b>""" """<p>Export the bookmarks into a file.</p>""" )) - if not self.initShortcutsOnly: - self.exportBookmarksAct.triggered.connect( - bookmarksManager.exportBookmarks) + self.exportBookmarksAct.triggered.connect( + bookmarksManager.exportBookmarks) self.__actions.append(self.exportBookmarksAct) self.printAct = E5Action( @@ -610,8 +615,7 @@ """<b>Print</b>""" """<p>Print the displayed help text.</p>""" )) - if not self.initShortcutsOnly: - self.printAct.triggered.connect(self.tabWidget.printBrowser) + self.printAct.triggered.connect(self.tabWidget.printBrowser) self.__actions.append(self.printAct) if Globals.isLinuxPlatform(): @@ -626,9 +630,8 @@ """<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.printPdfAct.triggered.connect( + self.tabWidget.printBrowserPdf) self.__actions.append(self.printPdfAct) else: self.printPdfAct = None @@ -644,9 +647,8 @@ """<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.printPreviewAct.triggered.connect( + self.tabWidget.printPreviewBrowser) self.__actions.append(self.printPreviewAct) self.closeAct = E5Action( @@ -661,8 +663,7 @@ """<b>Close</b>""" """<p>Closes the current help window.</p>""" )) - if not self.initShortcutsOnly: - self.closeAct.triggered.connect(self.tabWidget.closeBrowser) + self.closeAct.triggered.connect(self.tabWidget.closeBrowser) self.__actions.append(self.closeAct) self.closeAllAct = E5Action( @@ -674,9 +675,8 @@ """<b>Close All</b>""" """<p>Closes all help windows except the first one.</p>""" )) - if not self.initShortcutsOnly: - self.closeAllAct.triggered.connect( - self.tabWidget.closeAllBrowsers) + self.closeAllAct.triggered.connect( + self.tabWidget.closeAllBrowsers) self.__actions.append(self.closeAllAct) self.privateBrowsingAct = E5Action( @@ -690,9 +690,8 @@ """<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.triggered.connect( + self.__privateBrowsing) self.privateBrowsingAct.setCheckable(True) self.__actions.append(self.privateBrowsingAct) @@ -707,11 +706,7 @@ """<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.exitAct.triggered.connect(self.__closeAllWindows) self.__actions.append(self.exitAct) self.backAct = E5Action( @@ -727,8 +722,7 @@ """<p>Moves one help screen backward. If none is""" """ available, this action is disabled.</p>""" )) - if not self.initShortcutsOnly: - self.backAct.triggered.connect(self.__backward) + self.backAct.triggered.connect(self.__backward) self.__actions.append(self.backAct) self.forwardAct = E5Action( @@ -745,8 +739,7 @@ """<p>Moves one help screen forward. If none is""" """ available, this action is disabled.</p>""" )) - if not self.initShortcutsOnly: - self.forwardAct.triggered.connect(self.__forward) + self.forwardAct.triggered.connect(self.__forward) self.__actions.append(self.forwardAct) self.homeAct = E5Action( @@ -761,8 +754,7 @@ """<b>Home</b>""" """<p>Moves to the initial help screen.</p>""" )) - if not self.initShortcutsOnly: - self.homeAct.triggered.connect(self.__home) + self.homeAct.triggered.connect(self.__home) self.__actions.append(self.homeAct) self.reloadAct = E5Action( @@ -778,8 +770,7 @@ """<b>Reload</b>""" """<p>Reloads the current help screen.</p>""" )) - if not self.initShortcutsOnly: - self.reloadAct.triggered.connect(self.__reload) + self.reloadAct.triggered.connect(self.__reload) self.__actions.append(self.reloadAct) self.stopAct = E5Action( @@ -794,8 +785,7 @@ """<b>Stop</b>""" """<p>Stops loading of the current tab.</p>""" )) - if not self.initShortcutsOnly: - self.stopAct.triggered.connect(self.__stopLoading) + self.stopAct.triggered.connect(self.__stopLoading) self.__actions.append(self.stopAct) self.copyAct = E5Action( @@ -809,8 +799,7 @@ """<b>Copy</b>""" """<p>Copy the selected text to the clipboard.</p>""" )) - if not self.initShortcutsOnly: - self.copyAct.triggered.connect(self.__copy) + self.copyAct.triggered.connect(self.__copy) self.__actions.append(self.copyAct) self.findAct = E5Action( @@ -824,8 +813,7 @@ """<b>Find</b>""" """<p>Find text in the current page.</p>""" )) - if not self.initShortcutsOnly: - self.findAct.triggered.connect(self.__find) + self.findAct.triggered.connect(self.__find) self.__actions.append(self.findAct) self.findNextAct = E5Action( @@ -840,8 +828,7 @@ """<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.findDlg.findNext) + self.findNextAct.triggered.connect(self.findDlg.findNext) self.__actions.append(self.findNextAct) self.findPrevAct = E5Action( @@ -857,8 +844,7 @@ """<p>Find the previous occurrence of text in the current""" """ page.</p>""" )) - if not self.initShortcutsOnly: - self.findPrevAct.triggered.connect(self.findDlg.findPrevious) + self.findPrevAct.triggered.connect(self.findDlg.findPrevious) self.__actions.append(self.findPrevAct) self.bookmarksManageAct = E5Action( @@ -872,9 +858,8 @@ """<b>Manage Bookmarks...</b>""" """<p>Open a dialog to manage the bookmarks.</p>""" )) - if not self.initShortcutsOnly: - self.bookmarksManageAct.triggered.connect( - self.__showBookmarksDialog) + self.bookmarksManageAct.triggered.connect( + self.__showBookmarksDialog) self.__actions.append(self.bookmarksManageAct) self.bookmarksAddAct = E5Action( @@ -890,8 +875,7 @@ """<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.bookmarksAddAct.triggered.connect(self.__addBookmark) self.__actions.append(self.bookmarksAddAct) self.bookmarksAddFolderAct = E5Action( @@ -904,9 +888,8 @@ """<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.bookmarksAddFolderAct.triggered.connect( + self.__addBookmarkFolder) self.__actions.append(self.bookmarksAddFolderAct) self.bookmarksAllTabsAct = E5Action( @@ -920,8 +903,7 @@ """<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.bookmarksAllTabsAct.triggered.connect(self.bookmarkAll) self.__actions.append(self.bookmarksAllTabsAct) self.whatsThisAct = E5Action( @@ -939,8 +921,7 @@ """ 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.whatsThisAct.triggered.connect(self.__whatsThis) self.__actions.append(self.whatsThisAct) self.aboutAct = E5Action( @@ -953,8 +934,7 @@ """<b>About</b>""" """<p>Display some information about this software.</p>""" )) - if not self.initShortcutsOnly: - self.aboutAct.triggered.connect(self.__about) + self.aboutAct.triggered.connect(self.__about) self.__actions.append(self.aboutAct) self.aboutQtAct = E5Action( @@ -967,8 +947,7 @@ """<b>About Qt</b>""" """<p>Display some information about the Qt toolkit.</p>""" )) - if not self.initShortcutsOnly: - self.aboutQtAct.triggered.connect(self.__aboutQt) + self.aboutQtAct.triggered.connect(self.__aboutQt) self.__actions.append(self.aboutQtAct) self.zoomInAct = E5Action( @@ -983,8 +962,7 @@ """<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.zoomInAct.triggered.connect(self.__zoomIn) self.__actions.append(self.zoomInAct) self.zoomOutAct = E5Action( @@ -999,8 +977,7 @@ """<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.zoomOutAct.triggered.connect(self.__zoomOut) self.__actions.append(self.zoomOutAct) self.zoomResetAct = E5Action( @@ -1016,8 +993,7 @@ """<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.zoomResetAct.triggered.connect(self.__zoomReset) self.__actions.append(self.zoomResetAct) if hasattr(QWebSettings, 'ZoomTextOnly'): @@ -1032,9 +1008,8 @@ """<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.zoomTextOnlyAct.triggered[bool].connect( + self.__zoomTextOnly) self.__actions.append(self.zoomTextOnlyAct) else: self.zoomTextOnlyAct = None @@ -1050,8 +1025,7 @@ """<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.pageSourceAct.triggered.connect(self.__showPageSource) self.__actions.append(self.pageSourceAct) self.addAction(self.pageSourceAct) @@ -1061,8 +1035,7 @@ self.tr('&Full Screen'), QKeySequence(self.tr('F11')), 0, self, 'help_view_full_scree') - if not self.initShortcutsOnly: - self.fullScreenAct.triggered.connect(self.__viewFullScreen) + self.fullScreenAct.triggered.connect(self.__viewFullScreen) self.__actions.append(self.fullScreenAct) self.addAction(self.fullScreenAct) @@ -1071,8 +1044,7 @@ self.tr('Show next tab'), QKeySequence(self.tr('Ctrl+Alt+Tab')), 0, self, 'help_view_next_tab') - if not self.initShortcutsOnly: - self.nextTabAct.triggered.connect(self.__nextTab) + self.nextTabAct.triggered.connect(self.__nextTab) self.__actions.append(self.nextTabAct) self.addAction(self.nextTabAct) @@ -1081,8 +1053,7 @@ self.tr('Show previous tab'), QKeySequence(self.tr('Shift+Ctrl+Alt+Tab')), 0, self, 'help_view_previous_tab') - if not self.initShortcutsOnly: - self.prevTabAct.triggered.connect(self.__prevTab) + self.prevTabAct.triggered.connect(self.__prevTab) self.__actions.append(self.prevTabAct) self.addAction(self.prevTabAct) @@ -1091,8 +1062,7 @@ self.tr('Switch between tabs'), QKeySequence(self.tr('Ctrl+1')), 0, self, 'help_switch_tabs') - if not self.initShortcutsOnly: - self.switchTabAct.triggered.connect(self.__switchTab) + self.switchTabAct.triggered.connect(self.__switchTab) self.__actions.append(self.switchTabAct) self.addAction(self.switchTabAct) @@ -1107,8 +1077,7 @@ """<p>Set the configuration items of the application""" """ with your prefered values.</p>""" )) - if not self.initShortcutsOnly: - self.prefAct.triggered.connect(self.__showPreferences) + self.prefAct.triggered.connect(self.__showPreferences) self.__actions.append(self.prefAct) self.acceptedLanguagesAct = E5Action( @@ -1122,9 +1091,8 @@ """<b>Languages</b>""" """<p>Configure the accepted languages for web pages.</p>""" )) - if not self.initShortcutsOnly: - self.acceptedLanguagesAct.triggered.connect( - self.__showAcceptedLanguages) + self.acceptedLanguagesAct.triggered.connect( + self.__showAcceptedLanguages) self.__actions.append(self.acceptedLanguagesAct) self.cookiesAct = E5Action( @@ -1137,9 +1105,8 @@ """<b>Cookies</b>""" """<p>Configure cookies handling.</p>""" )) - if not self.initShortcutsOnly: - self.cookiesAct.triggered.connect( - self.__showCookiesConfiguration) + self.cookiesAct.triggered.connect( + self.__showCookiesConfiguration) self.__actions.append(self.cookiesAct) self.flashCookiesAct = E5Action( @@ -1152,9 +1119,8 @@ """<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.flashCookiesAct.triggered.connect( + self.__showFlashCookiesManagement) self.__actions.append(self.flashCookiesAct) self.offlineStorageAct = E5Action( @@ -1168,9 +1134,8 @@ """<b>Offline Storage</b>""" """<p>Opens a dialog to configure offline storage.</p>""" )) - if not self.initShortcutsOnly: - self.offlineStorageAct.triggered.connect( - self.__showOfflineStorageConfiguration) + self.offlineStorageAct.triggered.connect( + self.__showOfflineStorageConfiguration) self.__actions.append(self.offlineStorageAct) self.personalDataAct = E5Action( @@ -1186,9 +1151,8 @@ """<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.personalDataAct.triggered.connect( + self.__showPersonalInformationDialog) self.__actions.append(self.personalDataAct) self.greaseMonkeyAct = E5Action( @@ -1204,9 +1168,8 @@ """<p>Opens a dialog to configure the available GreaseMonkey""" """ Scripts.</p>""" )) - if not self.initShortcutsOnly: - self.greaseMonkeyAct.triggered.connect( - self.__showGreaseMonkeyConfigDialog) + self.greaseMonkeyAct.triggered.connect( + self.__showGreaseMonkeyConfigDialog) self.__actions.append(self.greaseMonkeyAct) self.editMessageFilterAct = E5Action( @@ -1222,9 +1185,8 @@ """ suppress unwanted messages been shown in an error""" """ window.</p>""" )) - if not self.initShortcutsOnly: - self.editMessageFilterAct.triggered.connect( - E5ErrorMessage.editMessageFilters) + self.editMessageFilterAct.triggered.connect( + E5ErrorMessage.editMessageFilters) self.__actions.append(self.editMessageFilterAct) self.featurePermissionAct = E5Action( @@ -1239,12 +1201,11 @@ """<p>Opens a dialog to edit the remembered HTML5""" """ feature permissions.</p>""" )) - if not self.initShortcutsOnly: - self.featurePermissionAct.triggered.connect( - self.__showFeaturePermissionDialog) + self.featurePermissionAct.triggered.connect( + self.__showFeaturePermissionDialog) self.__actions.append(self.featurePermissionAct) - if HelpWindow._useQtHelp or self.initShortcutsOnly: + if HelpWindow._useQtHelp: self.syncTocAct = E5Action( self.tr('Sync with Table of Contents'), UI.PixmapCache.getIcon("syncToc.png"), @@ -1257,8 +1218,7 @@ """<p>Synchronizes the table of contents with current""" """ page.</p>""" )) - if not self.initShortcutsOnly: - self.syncTocAct.triggered.connect(self.__syncTOC) + self.syncTocAct.triggered.connect(self.__syncTOC) self.__actions.append(self.syncTocAct) self.showTocAct = E5Action( @@ -1271,8 +1231,7 @@ """<b>Table of Contents</b>""" """<p>Shows the table of contents window.</p>""" )) - if not self.initShortcutsOnly: - self.showTocAct.triggered.connect(self.__showTocWindow) + self.showTocAct.triggered.connect(self.__showTocWindow) self.__actions.append(self.showTocAct) self.showIndexAct = E5Action( @@ -1285,8 +1244,7 @@ """<b>Index</b>""" """<p>Shows the index window.</p>""" )) - if not self.initShortcutsOnly: - self.showIndexAct.triggered.connect(self.__showIndexWindow) + self.showIndexAct.triggered.connect(self.__showIndexWindow) self.__actions.append(self.showIndexAct) self.showSearchAct = E5Action( @@ -1299,9 +1257,8 @@ """<b>Search</b>""" """<p>Shows the search window.</p>""" )) - if not self.initShortcutsOnly: - self.showSearchAct.triggered.connect( - self.__showSearchWindow) + self.showSearchAct.triggered.connect( + self.__showSearchWindow) self.__actions.append(self.showSearchAct) self.manageQtHelpDocsAct = E5Action( @@ -1315,9 +1272,8 @@ """<p>Shows a dialog to manage the QtHelp documentation""" """ set.</p>""" )) - if not self.initShortcutsOnly: - self.manageQtHelpDocsAct.triggered.connect( - self.__manageQtHelpDocumentation) + self.manageQtHelpDocsAct.triggered.connect( + self.__manageQtHelpDocumentation) self.__actions.append(self.manageQtHelpDocsAct) self.manageQtHelpFiltersAct = E5Action( @@ -1330,9 +1286,8 @@ """<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.manageQtHelpFiltersAct.triggered.connect( + self.__manageQtHelpFilters) self.__actions.append(self.manageQtHelpFiltersAct) self.reindexDocumentationAct = E5Action( @@ -1345,9 +1300,8 @@ """<b>Reindex Documentation</b>""" """<p>Reindexes the documentation set.</p>""" )) - if not self.initShortcutsOnly: - self.reindexDocumentationAct.triggered.connect( - self.__searchEngine.reindexDocumentation) + self.reindexDocumentationAct.triggered.connect( + self.__searchEngine.reindexDocumentation) self.__actions.append(self.reindexDocumentationAct) self.clearPrivateDataAct = E5Action( @@ -1363,9 +1317,8 @@ """<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.clearPrivateDataAct.triggered.connect( + self.__clearPrivateData) self.__actions.append(self.clearPrivateDataAct) self.clearIconsAct = E5Action( @@ -1380,8 +1333,7 @@ """<p>Clears the database of favicons of previously visited""" """ URLs.</p>""" )) - if not self.initShortcutsOnly: - self.clearIconsAct.triggered.connect(self.__clearIconsDatabase) + self.clearIconsAct.triggered.connect(self.__clearIconsDatabase) self.__actions.append(self.clearIconsAct) self.searchEnginesAct = E5Action( @@ -1396,9 +1348,8 @@ """<p>Opens a dialog to configure the available search""" """ engines.</p>""" )) - if not self.initShortcutsOnly: - self.searchEnginesAct.triggered.connect( - self.__showEnginesConfigurationDialog) + self.searchEnginesAct.triggered.connect( + self.__showEnginesConfigurationDialog) self.__actions.append(self.searchEnginesAct) self.passwordsAct = E5Action( @@ -1413,8 +1364,7 @@ """<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.passwordsAct.triggered.connect(self.__showPasswordsDialog) self.__actions.append(self.passwordsAct) self.adblockAct = E5Action( @@ -1430,8 +1380,7 @@ """<p>Opens a dialog to configure AdBlock subscriptions and""" """ rules.</p>""" )) - if not self.initShortcutsOnly: - self.adblockAct.triggered.connect(self.__showAdBlockDialog) + self.adblockAct.triggered.connect(self.__showAdBlockDialog) self.__actions.append(self.adblockAct) self.flashblockAct = E5Action( @@ -1447,9 +1396,8 @@ """<p>Opens a dialog to configure the ClickToFlash""" """ whitelist.</p>""" )) - if not self.initShortcutsOnly: - self.flashblockAct.triggered.connect( - self.__showClickToFlashDialog) + self.flashblockAct.triggered.connect( + self.__showClickToFlashDialog) self.__actions.append(self.flashblockAct) if SSL_AVAILABLE: @@ -1466,9 +1414,8 @@ """<p>Opens a dialog to manage the saved SSL""" """ certificates.</p>""" )) - if not self.initShortcutsOnly: - self.certificatesAct.triggered.connect( - self.__showCertificatesDialog) + self.certificatesAct.triggered.connect( + self.__showCertificatesDialog) self.__actions.append(self.certificatesAct) self.toolsMonitorAct = E5Action( @@ -1482,9 +1429,8 @@ """<b>Network Monitor...</b>""" """<p>Shows the network monitor dialog.</p>""" )) - if not self.initShortcutsOnly: - self.toolsMonitorAct.triggered.connect( - self.__showNetworkMonitor) + self.toolsMonitorAct.triggered.connect( + self.__showNetworkMonitor) self.__actions.append(self.toolsMonitorAct) self.showDownloadManagerAct = E5Action( @@ -1497,9 +1443,8 @@ """<b>Downloads</b>""" """<p>Shows the downloads window.</p>""" )) - if not self.initShortcutsOnly: - self.showDownloadManagerAct.triggered.connect( - self.__showDownloadsWindow) + self.showDownloadManagerAct.triggered.connect( + self.__showDownloadsWindow) self.__actions.append(self.showDownloadManagerAct) self.feedsManagerAct = E5Action( @@ -1516,8 +1461,7 @@ """ 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.feedsManagerAct.triggered.connect(self.__showFeedsManager) self.__actions.append(self.feedsManagerAct) self.siteInfoAct = E5Action( @@ -1533,8 +1477,7 @@ """<p>Opens a dialog showing some information about the current""" """ site.</p>""" )) - if not self.initShortcutsOnly: - self.siteInfoAct.triggered.connect(self.__showSiteinfoDialog) + self.siteInfoAct.triggered.connect(self.__showSiteinfoDialog) self.__actions.append(self.siteInfoAct) self.userAgentManagerAct = E5Action( @@ -1547,9 +1490,8 @@ """<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.userAgentManagerAct.triggered.connect( + self.__showUserAgentsDialog) self.__actions.append(self.userAgentManagerAct) self.synchronizationAct = E5Action( @@ -1564,9 +1506,8 @@ """<p>This shows a dialog to synchronize data via the""" """ network.</p>""" )) - if not self.initShortcutsOnly: - self.synchronizationAct.triggered.connect( - self.__showSyncDialog) + self.synchronizationAct.triggered.connect( + self.__showSyncDialog) self.__actions.append(self.synchronizationAct) self.zoomValuesAct = E5Action( @@ -1581,9 +1522,52 @@ """<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.zoomValuesAct.triggered.connect(self.__showZoomValuesDialog) self.__actions.append(self.zoomValuesAct) + + self.shortcutsAct = E5Action( + self.tr('Keyboard Shortcuts'), + UI.PixmapCache.getIcon("configureShortcuts.png"), + self.tr('Keyboard &Shortcuts...'), + 0, 0, + self, 'webbrowser_keyboard_shortcuts') + self.shortcutsAct.setStatusTip(self.tr( + 'Set the keyboard shortcuts')) + self.shortcutsAct.setWhatsThis(self.tr( + """<b>Keyboard Shortcuts</b>""" + """<p>Set the keyboard shortcuts of the application""" + """ with your prefered values.</p>""" + )) + self.shortcutsAct.triggered.connect(self.__configShortcuts) + self.__actions.append(self.shortcutsAct) + + self.exportShortcutsAct = E5Action( + self.tr('Export Keyboard Shortcuts'), + UI.PixmapCache.getIcon("exportShortcuts.png"), + self.tr('&Export Keyboard Shortcuts...'), + 0, 0, self, 'export_keyboard_shortcuts') + self.exportShortcutsAct.setStatusTip(self.tr( + 'Export the keyboard shortcuts')) + self.exportShortcutsAct.setWhatsThis(self.tr( + """<b>Export Keyboard Shortcuts</b>""" + """<p>Export the keyboard shortcuts of the application.</p>""" + )) + self.exportShortcutsAct.triggered.connect(self.__exportShortcuts) + self.__actions.append(self.exportShortcutsAct) + + self.importShortcutsAct = E5Action( + self.tr('Import Keyboard Shortcuts'), + UI.PixmapCache.getIcon("importShortcuts.png"), + self.tr('&Import Keyboard Shortcuts...'), + 0, 0, self, 'import_keyboard_shortcuts') + self.importShortcutsAct.setStatusTip(self.tr( + 'Import the keyboard shortcuts')) + self.importShortcutsAct.setWhatsThis(self.tr( + """<b>Import Keyboard Shortcuts</b>""" + """<p>Import the keyboard shortcuts of the application.</p>""" + )) + self.importShortcutsAct.triggered.connect(self.__importShortcuts) + self.__actions.append(self.importShortcutsAct) self.backAct.setEnabled(False) self.forwardAct.setEnabled(False) @@ -1703,6 +1687,11 @@ menu = mb.addMenu(self.tr('&Settings')) menu.setTearOffEnabled(True) menu.addAction(self.prefAct) + menu.addSeparator() + menu.addAction(self.shortcutsAct) + menu.addAction(self.exportShortcutsAct) + menu.addAction(self.importShortcutsAct) + menu.addSeparator() menu.addAction(self.acceptedLanguagesAct) menu.addAction(self.cookiesAct) menu.addAction(self.flashCookiesAct) @@ -1837,6 +1826,7 @@ settingstb.setObjectName("SettingsToolBar") settingstb.setIconSize(UI.Config.ToolBarIconSize) settingstb.addAction(self.prefAct) + settingstb.addAction(self.shortcutsAct) settingstb.addAction(self.acceptedLanguagesAct) settingstb.addAction(self.cookiesAct) settingstb.addAction(self.flashCookiesAct) @@ -2011,7 +2001,7 @@ linkName = link.toString() else: linkName = link - h = HelpWindow(linkName, ".", self.parent(), "qbrowser", self.fromEric) + h = HelpWindow(linkName, ".", self.parent(), "qbrowser") h.show() def __openFile(self): @@ -2298,7 +2288,7 @@ try: browserIndex = HelpWindow.helpwindows.index(self) - if not self.fromEric and len(HelpWindow.helpwindows): + if len(HelpWindow.helpwindows): if browserIndex == 0: if len(HelpWindow.helpwindows) > 1: # first window will be deleted @@ -2311,13 +2301,12 @@ else: QDesktopServices.unsetUrlHandler("http") QDesktopServices.unsetUrlHandler("https") - if self.fromEric or len(HelpWindow.helpwindows) > 0: + if len(HelpWindow.helpwindows) > 0: del HelpWindow.helpwindows[browserIndex] except ValueError: pass - if not self.fromEric: - Preferences.syncPreferences() + Preferences.syncPreferences() self.__shutdownCalled = True return True @@ -2510,7 +2499,7 @@ """ from Preferences.ConfigurationDialog import ConfigurationDialog dlg = ConfigurationDialog( - self, 'Configuration', True, fromEric=self.fromEric, + self, 'Configuration', True, fromEric=False, displayMode=ConfigurationDialog.HelpBrowserMode) dlg.preferencesChanged.connect(self.preferencesChanged) dlg.masterPasswordChanged.connect( @@ -2532,9 +2521,8 @@ """ Public slot to handle a change of preferences. """ - if not self.fromEric: - self.setStyle(Preferences.getUI("Style"), - Preferences.getUI("StyleSheet")) + self.setStyle(Preferences.getUI("Style"), + Preferences.getUI("StyleSheet")) self.__initWebSettings() @@ -2570,7 +2558,7 @@ @type bool """ self.passwordManager().masterPasswordChanged(oldPassword, newPassword) - if self.fromEric and local: + if local: # we were called from our local configuration dialog Preferences.convertPasswords(oldPassword, newPassword) Utilities.crypto.changeRememberedMaster(newPassword) @@ -2919,10 +2907,11 @@ """ 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) + if HelpWindow._useQtHelp: + for namespace in self.__helpEngine.registeredDocumentations(): + docFile = self.__helpEngine.documentationFileName(namespace) + if not os.path.exists(docFile): + self.__helpEngine.unregisterDocumentation(namespace) def __lookForNewDocumentation(self): """ @@ -3918,22 +3907,18 @@ @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() + 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): @@ -3942,7 +3927,96 @@ @return flag indicating, if notifications are enabled (boolean) """ - if cls._fromEric: - return e5App().getObject("UserInterface").notificationsEnabled() - else: - return Preferences.getUI("NotificationsEnabled") + return Preferences.getUI("NotificationsEnabled") + + ############################################################### + ## Methods below implement single application related functions + ############################################################### + + @pyqtSlot(str) + def __saLoadUrl(self, urlStr): + """ + Private slot to load an URL received via the single application + protocol. + + @param urlStr URL to be loaded + @type str + """ + url = QUrl.fromUserInput(urlStr) + self.__linkActivated(url) + + @pyqtSlot(str) + def __saNewTab(self, urlStr): + """ + Private slot to load an URL received via the single application + protocol in a new tab. + + @param urlStr URL to be loaded + @type str + """ + url = QUrl.fromUserInput(urlStr) + self.newTab(url) + + @pyqtSlot(str) + def __saSearchWord(self, word): + """ + Private slot to search for the given word. + + @param word word to be searched for + @type str + """ + if HelpWindow._useQtHelp: + self.__searchWord = word + self.__searchForWord() + + ###################################################### + ## Methods below implement shortcuts related functions + ###################################################### + + def __configShortcuts(self): + """ + Private slot to configure the keyboard shortcuts. + """ + if self.__shortcutsDialog is None: + from Preferences.ShortcutsDialog import ShortcutsDialog + self.__shortcutsDialog = ShortcutsDialog(self) + self.__shortcutsDialog.populate(helpViewer=self) + self.__shortcutsDialog.show() + + def __exportShortcuts(self): + """ + Private slot to export the keyboard shortcuts. + """ + fn, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( + None, + self.tr("Export Keyboard Shortcuts"), + "", + self.tr("Keyboard shortcut file (*.e4k)"), + "", + E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) + + if not fn: + return + + ext = QFileInfo(fn).suffix() + if not ext: + ex = selectedFilter.split("(*")[1].split(")")[0] + if ex: + fn += ex + + from Preferences import Shortcuts + Shortcuts.exportShortcuts(fn, helpViewer=self) + + def __importShortcuts(self): + """ + Private slot to import the keyboard shortcuts. + """ + fn = E5FileDialog.getOpenFileName( + None, + self.tr("Import Keyboard Shortcuts"), + "", + self.tr("Keyboard shortcut file (*.e4k)")) + + if fn: + from Preferences import Shortcuts + Shortcuts.importShortcuts(fn, helpViewer=self)