diff -r 27fba2b81749 -r 7ac0959842f9 WebBrowser/WebBrowserWindow.py --- a/WebBrowser/WebBrowserWindow.py Sun May 08 19:42:41 2016 +0200 +++ b/WebBrowser/WebBrowserWindow.py Sun May 08 19:48:19 2016 +0200 @@ -66,9 +66,19 @@ """ Class implementing the web browser main window. - @signal webBrowserClosed() emitted after the window was requested to close + @signal webBrowserWindowOpened(window) emitted after a new web browser + window was opened + @signal webBrowserWindowClosed(window) emitted after the window was + requested to close + @signal webBrowserOpened(browser) emitted after a new web browser tab was + created + @signal webBrowserClosed(browser) emitted after a web browser tab was + closed """ - webBrowserClosed = pyqtSignal() + webBrowserWindowClosed = pyqtSignal(E5MainWindow) + webBrowserWindowOpened = pyqtSignal(E5MainWindow) + webBrowserOpened = pyqtSignal(QWidget) + webBrowserClosed = pyqtSignal(QWidget) BrowserWindows = [] @@ -96,6 +106,7 @@ _flashCookieManager = None _imageSearchEngine = None _autoScroller = None + _tabManager = None def __init__(self, home, path, parent, name, fromEric=False, initShortcutsOnly=False, searchWord=None, @@ -198,6 +209,8 @@ self.__tabWidget.showMessage.connect(self.statusBar().showMessage) self.__tabWidget.browserZoomValueChanged.connect( self.__zoomWidget.setValue) + self.__tabWidget.browserClosed.connect(self.webBrowserClosed) + self.__tabWidget.browserOpened.connect(self.webBrowserOpened) self.__searchWidget = SearchWidget(self, self) centralWidget = QWidget() @@ -300,6 +313,9 @@ self.__tabWidget.sourceChanged.connect( self.__adBlockIcon.sourceChanged) + self.__tabManagerIcon = self.tabManager().createStatusBarIcon() + self.statusBar().addPermanentWidget(self.__tabManagerIcon) + self.networkIcon = E5NetworkIcon(self) self.statusBar().addPermanentWidget(self.networkIcon) @@ -1667,6 +1683,20 @@ self.__toggleJavaScriptConsole) self.__actions.append(self.showJavaScriptConsoleAct) + self.showTabManagerAct = E5Action( + self.tr('Tab Manager'), + self.tr('Tab Manager'), + 0, 0, self, 'webbrowser_show_tab_manager') + self.showTabManagerAct.setStatusTip(self.tr( + 'Shows the tab manager window')) + self.showTabManagerAct.setWhatsThis(self.tr( + """<b>Tab Manager</b>""" + """<p>Shows the tab manager window.</p>""" + )) + if not self.__initShortcutsOnly: + self.showTabManagerAct.triggered.connect(self.__showTabManager) + self.__actions.append(self.showTabManagerAct) + self.backAct.setEnabled(False) self.forwardAct.setEnabled(False) @@ -1829,6 +1859,7 @@ menu.setTearOffEnabled(True) menu.addAction(self.showDownloadManagerAct) menu.addAction(self.showJavaScriptConsoleAct) + menu.addAction(self.showTabManagerAct) if WebBrowserWindow.useQtHelp: menu.addSeparator() menu.addAction(self.showTocAct) @@ -2096,6 +2127,8 @@ h = WebBrowserWindow(linkName, ".", self.parent(), "webbrowser", self.__fromEric, private=self.isPrivate()) h.show() + + self.webBrowserWindowOpened.emit(h) @pyqtSlot() def newPrivateWindow(self, link=None): @@ -2395,7 +2428,7 @@ if res: e.accept() - self.webBrowserClosed.emit() + self.webBrowserWindowClosed.emit(self) else: e.ignore() else: @@ -2442,6 +2475,10 @@ self.searchEdit.openSearchManager().close() + if len(WebBrowserWindow.BrowserWindows) == 1: + # it is the last window + self.tabManager().close() + if WebBrowserWindow.useQtHelp: self.__searchEngine.cancelIndexing() self.__searchEngine.cancelSearching() @@ -3497,6 +3534,32 @@ return cls._autoScroller @classmethod + def tabManager(cls): + """ + Class method to get a reference to the tab manager widget. + + @return reference to the tab manager widget + @rtype TabManagerWidget + """ + if cls._tabManager is None: + from .TabManager.TabManagerWidget import TabManagerWidget + cls._tabManager = TabManagerWidget(cls.mainWindow()) + + # do the connections + for window in cls.mainWindows(): + cls._tabManager.mainWindowCreated(window, False) + + cls._tabManager.delayedRefreshTree() + + return cls._tabManager + + def __showTabManager(self): + """ + Private method to show the tab manager window. + """ + self.tabManager().raiseTabManager() + + @classmethod def mainWindow(cls): """ Class method to get a reference to the main window.