diff -r d53474dcb9e6 -r 4f4316e83318 WebBrowser/Navigation/NavigationBar.py --- a/WebBrowser/Navigation/NavigationBar.py Sat May 27 18:51:22 2017 +0200 +++ b/WebBrowser/Navigation/NavigationBar.py Sun May 28 16:59:18 2017 +0200 @@ -9,13 +9,16 @@ from __future__ import unicode_literals -from PyQt5.QtCore import Qt +from PyQt5.QtCore import Qt, QUrl from PyQt5.QtWidgets import QWidget, QHBoxLayout, QStyle, QToolButton, \ QSplitter, QSizePolicy, QMenu, QAction +from E5Gui.E5ToolButton import E5ToolButton + from WebBrowser.WebBrowserWindow import WebBrowserWindow import UI.PixmapCache +import Preferences from .ReloadStopButton import ReloadStopButton @@ -46,7 +49,7 @@ self.style().pixelMetric(QStyle.PM_ToolBarItemSpacing, None, self)) self.setLayout(self.__layout) - self.__backButton = QToolButton(self) + self.__backButton = E5ToolButton(self) self.__backButton.setObjectName("navigation_back_button") self.__backButton.setToolTip(self.tr("Move one screen backward")) self.__backButton.setToolButtonStyle(Qt.ToolButtonIconOnly) @@ -56,7 +59,7 @@ UI.PixmapCache.getIcon("back.png")) self.__backButton.setEnabled(False) - self.__forwardButton = QToolButton(self) + self.__forwardButton = E5ToolButton(self) self.__forwardButton.setObjectName("navigation_forward_button") self.__forwardButton.setToolTip(self.tr("Move one screen forward")) self.__forwardButton.setToolButtonStyle(Qt.ToolButtonIconOnly) @@ -74,7 +77,7 @@ self.__reloadStopButton = ReloadStopButton(self) - self.__homeButton = QToolButton(self) + self.__homeButton = E5ToolButton(self) self.__homeButton.setObjectName("navigation_home_button") self.__homeButton.setToolTip(self.tr("Move to the initial screen")) self.__homeButton.setToolButtonStyle(Qt.ToolButtonIconOnly) @@ -83,18 +86,29 @@ self.__homeButton.setIcon( UI.PixmapCache.getIcon("home.png")) - self.__exitFullScreenButton = QToolButton(self) + self.__exitFullScreenButton = E5ToolButton(self) self.__exitFullScreenButton.setObjectName( "navigation_exitfullscreen_button") + self.__exitFullScreenButton.setIcon( + UI.PixmapCache.getIcon("windowRestore.png")) self.__exitFullScreenButton.setToolTip(self.tr("Exit Fullscreen")) self.__exitFullScreenButton.setToolButtonStyle(Qt.ToolButtonIconOnly) self.__exitFullScreenButton.setFocusPolicy(Qt.NoFocus) self.__exitFullScreenButton.setAutoRaise(True) - self.__exitFullScreenButton.setIcon( - UI.PixmapCache.getIcon("windowRestore.png")) self.__exitFullScreenButton.clicked.connect(self.__mw.toggleFullScreen) self.__exitFullScreenButton.setVisible(False) + self.__superMenuButton = E5ToolButton(self) + self.__superMenuButton.setObjectName( + "navigation_supermenu_button") + self.__superMenuButton.setIcon(UI.PixmapCache.getIcon("superMenu.png")) + self.__superMenuButton.setToolTip(self.tr("Main Menu")) + self.__superMenuButton.setPopupMode(QToolButton.InstantPopup) + self.__superMenuButton.setToolButtonStyle(Qt.ToolButtonIconOnly) + self.__superMenuButton.setFocusPolicy(Qt.NoFocus) + self.__superMenuButton.setAutoRaise(True) + self.__superMenuButton.setShowMenuInside(True) + self.__navigationSplitter = QSplitter(self) urlBar = self.__mw.tabWidget().stackedUrlBar() self.__navigationSplitter.addWidget(urlBar) @@ -118,25 +132,42 @@ self.__layout.addWidget(self.__homeButton) self.__layout.addWidget(self.__navigationSplitter) self.__layout.addWidget(self.__exitFullScreenButton) + self.__layout.addWidget(self.__superMenuButton) + + self.setContextMenuPolicy(Qt.CustomContextMenu) + self.customContextMenuRequested.connect(self.__contextMenuRequested) self.__backMenu = QMenu(self) - self.__backMenu.aboutToShow.connect(self.__showBackMenu) self.__backMenu.triggered.connect(self.__navigationMenuActionTriggered) self.__backButton.setMenu(self.__backMenu) - self.__backButton.setPopupMode(QToolButton.MenuButtonPopup) + self.__backButton.aboutToShowMenu.connect(self.__showBackMenu) self.__forwardMenu = QMenu(self) - self.__forwardMenu.aboutToShow.connect(self.__showForwardMenu) self.__forwardMenu.triggered.connect( self.__navigationMenuActionTriggered) self.__forwardButton.setMenu(self.__forwardMenu) - self.__forwardButton.setPopupMode(QToolButton.MenuButtonPopup) + self.__forwardButton.aboutToShowMenu.connect(self.__showForwardMenu) self.__backButton.clicked.connect(self.__goBack) + self.__backButton.middleClicked.connect(self.__goBackInNewTab) + self.__backButton.controlClicked.connect(self.__goBackInNewTab) self.__forwardButton.clicked.connect(self.__goForward) + self.__forwardButton.middleClicked.connect(self.__goForwardInNewTab) + self.__forwardButton.controlClicked.connect(self.__goForwardInNewTab) self.__reloadStopButton.reloadClicked.connect(self.__reload) self.__reloadStopButton.stopClicked.connect(self.__stopLoad) self.__homeButton.clicked.connect(self.__goHome) + self.__homeButton.middleClicked.connect(self.__goHomeInNewTab) + self.__homeButton.controlClicked.connect(self.__goHomeInNewTab) + + def superMenuButton(self): + """ + Public method to get a reference to the super menu button. + + @return reference to the super menu button + @rtype QToolButton + """ + return self.__superMenuButton def backButton(self): """ @@ -263,18 +294,52 @@ """ self.__mw.currentBrowser().backward() + def __goBackInNewTab(self): + """ + Private slot handling a middle click or Ctrl left click of the + backward button. + """ + history = self.__mw.currentBrowser().history() + if history.canGoBack(): + backItem = history.backItem() + self.__mw.newTab(link=backItem.url(), + addNextTo=self.__mw.currentBrowser(), + background=True) + def __goForward(self): """ Private slot called to handle the forward button. """ self.__mw.currentBrowser().forward() + def __goForwardInNewTab(self): + """ + Private slot handling a middle click or Ctrl left click of the + forward button. + """ + history = self.__mw.currentBrowser().history() + if history.canGoForward(): + forwardItem = history.forwardItem() + self.__mw.newTab(link=forwardItem.url(), + addNextTo=self.__mw.currentBrowser(), + background=True) + def __goHome(self): """ Private slot called to handle the home button. """ self.__mw.currentBrowser().home() + def __goHomeInNewTab(self): + """ + Private slot handling a middle click or Ctrl left click of the + home button. + """ + homeUrl = QUrl(Preferences.getWebBrowser("HomePage")) + self.__mw.newTab(link=homeUrl, + addNextTo=self.__mw.currentBrowser(), + background=True) + def __reload(self): """ Private slot called to handle the reload button. @@ -296,3 +361,13 @@ cb.history().clear() self.__mw.setForwardAvailable(cb.isForwardAvailable()) self.__mw.setBackwardAvailable(cb.isBackwardAvailable()) + + def __contextMenuRequested(self, pos): + """ + Private method to handle a context menu request. + + @param pos position of the request + @type QPoint + """ + menu = self.__mw.createPopupMenu() + menu.exec_(self.mapToGlobal(pos))