WebBrowser/Navigation/NavigationBar.py

changeset 5745
4f4316e83318
parent 5734
d8b99b5fa673
child 6048
82ad8ec9548c
--- 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))

eric ide

mercurial