WebBrowser/Navigation/NavigationBar.py

changeset 5745
4f4316e83318
parent 5734
d8b99b5fa673
child 6048
82ad8ec9548c
equal deleted inserted replaced
5744:d53474dcb9e6 5745:4f4316e83318
7 Module implementing the navigation bar widget. 7 Module implementing the navigation bar widget.
8 """ 8 """
9 9
10 from __future__ import unicode_literals 10 from __future__ import unicode_literals
11 11
12 from PyQt5.QtCore import Qt 12 from PyQt5.QtCore import Qt, QUrl
13 from PyQt5.QtWidgets import QWidget, QHBoxLayout, QStyle, QToolButton, \ 13 from PyQt5.QtWidgets import QWidget, QHBoxLayout, QStyle, QToolButton, \
14 QSplitter, QSizePolicy, QMenu, QAction 14 QSplitter, QSizePolicy, QMenu, QAction
15 15
16 from E5Gui.E5ToolButton import E5ToolButton
17
16 from WebBrowser.WebBrowserWindow import WebBrowserWindow 18 from WebBrowser.WebBrowserWindow import WebBrowserWindow
17 19
18 import UI.PixmapCache 20 import UI.PixmapCache
21 import Preferences
19 22
20 from .ReloadStopButton import ReloadStopButton 23 from .ReloadStopButton import ReloadStopButton
21 24
22 25
23 class NavigationBar(QWidget): 26 class NavigationBar(QWidget):
44 self.__layout.setContentsMargins(margin, margin, margin, margin) 47 self.__layout.setContentsMargins(margin, margin, margin, margin)
45 self.__layout.setSpacing( 48 self.__layout.setSpacing(
46 self.style().pixelMetric(QStyle.PM_ToolBarItemSpacing, None, self)) 49 self.style().pixelMetric(QStyle.PM_ToolBarItemSpacing, None, self))
47 self.setLayout(self.__layout) 50 self.setLayout(self.__layout)
48 51
49 self.__backButton = QToolButton(self) 52 self.__backButton = E5ToolButton(self)
50 self.__backButton.setObjectName("navigation_back_button") 53 self.__backButton.setObjectName("navigation_back_button")
51 self.__backButton.setToolTip(self.tr("Move one screen backward")) 54 self.__backButton.setToolTip(self.tr("Move one screen backward"))
52 self.__backButton.setToolButtonStyle(Qt.ToolButtonIconOnly) 55 self.__backButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
53 self.__backButton.setFocusPolicy(Qt.NoFocus) 56 self.__backButton.setFocusPolicy(Qt.NoFocus)
54 self.__backButton.setAutoRaise(True) 57 self.__backButton.setAutoRaise(True)
55 self.__backButton.setIcon( 58 self.__backButton.setIcon(
56 UI.PixmapCache.getIcon("back.png")) 59 UI.PixmapCache.getIcon("back.png"))
57 self.__backButton.setEnabled(False) 60 self.__backButton.setEnabled(False)
58 61
59 self.__forwardButton = QToolButton(self) 62 self.__forwardButton = E5ToolButton(self)
60 self.__forwardButton.setObjectName("navigation_forward_button") 63 self.__forwardButton.setObjectName("navigation_forward_button")
61 self.__forwardButton.setToolTip(self.tr("Move one screen forward")) 64 self.__forwardButton.setToolTip(self.tr("Move one screen forward"))
62 self.__forwardButton.setToolButtonStyle(Qt.ToolButtonIconOnly) 65 self.__forwardButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
63 self.__forwardButton.setFocusPolicy(Qt.NoFocus) 66 self.__forwardButton.setFocusPolicy(Qt.NoFocus)
64 self.__forwardButton.setAutoRaise(True) 67 self.__forwardButton.setAutoRaise(True)
72 self.__backNextLayout.addWidget(self.__backButton) 75 self.__backNextLayout.addWidget(self.__backButton)
73 self.__backNextLayout.addWidget(self.__forwardButton) 76 self.__backNextLayout.addWidget(self.__forwardButton)
74 77
75 self.__reloadStopButton = ReloadStopButton(self) 78 self.__reloadStopButton = ReloadStopButton(self)
76 79
77 self.__homeButton = QToolButton(self) 80 self.__homeButton = E5ToolButton(self)
78 self.__homeButton.setObjectName("navigation_home_button") 81 self.__homeButton.setObjectName("navigation_home_button")
79 self.__homeButton.setToolTip(self.tr("Move to the initial screen")) 82 self.__homeButton.setToolTip(self.tr("Move to the initial screen"))
80 self.__homeButton.setToolButtonStyle(Qt.ToolButtonIconOnly) 83 self.__homeButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
81 self.__homeButton.setFocusPolicy(Qt.NoFocus) 84 self.__homeButton.setFocusPolicy(Qt.NoFocus)
82 self.__homeButton.setAutoRaise(True) 85 self.__homeButton.setAutoRaise(True)
83 self.__homeButton.setIcon( 86 self.__homeButton.setIcon(
84 UI.PixmapCache.getIcon("home.png")) 87 UI.PixmapCache.getIcon("home.png"))
85 88
86 self.__exitFullScreenButton = QToolButton(self) 89 self.__exitFullScreenButton = E5ToolButton(self)
87 self.__exitFullScreenButton.setObjectName( 90 self.__exitFullScreenButton.setObjectName(
88 "navigation_exitfullscreen_button") 91 "navigation_exitfullscreen_button")
92 self.__exitFullScreenButton.setIcon(
93 UI.PixmapCache.getIcon("windowRestore.png"))
89 self.__exitFullScreenButton.setToolTip(self.tr("Exit Fullscreen")) 94 self.__exitFullScreenButton.setToolTip(self.tr("Exit Fullscreen"))
90 self.__exitFullScreenButton.setToolButtonStyle(Qt.ToolButtonIconOnly) 95 self.__exitFullScreenButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
91 self.__exitFullScreenButton.setFocusPolicy(Qt.NoFocus) 96 self.__exitFullScreenButton.setFocusPolicy(Qt.NoFocus)
92 self.__exitFullScreenButton.setAutoRaise(True) 97 self.__exitFullScreenButton.setAutoRaise(True)
93 self.__exitFullScreenButton.setIcon(
94 UI.PixmapCache.getIcon("windowRestore.png"))
95 self.__exitFullScreenButton.clicked.connect(self.__mw.toggleFullScreen) 98 self.__exitFullScreenButton.clicked.connect(self.__mw.toggleFullScreen)
96 self.__exitFullScreenButton.setVisible(False) 99 self.__exitFullScreenButton.setVisible(False)
100
101 self.__superMenuButton = E5ToolButton(self)
102 self.__superMenuButton.setObjectName(
103 "navigation_supermenu_button")
104 self.__superMenuButton.setIcon(UI.PixmapCache.getIcon("superMenu.png"))
105 self.__superMenuButton.setToolTip(self.tr("Main Menu"))
106 self.__superMenuButton.setPopupMode(QToolButton.InstantPopup)
107 self.__superMenuButton.setToolButtonStyle(Qt.ToolButtonIconOnly)
108 self.__superMenuButton.setFocusPolicy(Qt.NoFocus)
109 self.__superMenuButton.setAutoRaise(True)
110 self.__superMenuButton.setShowMenuInside(True)
97 111
98 self.__navigationSplitter = QSplitter(self) 112 self.__navigationSplitter = QSplitter(self)
99 urlBar = self.__mw.tabWidget().stackedUrlBar() 113 urlBar = self.__mw.tabWidget().stackedUrlBar()
100 self.__navigationSplitter.addWidget(urlBar) 114 self.__navigationSplitter.addWidget(urlBar)
101 115
116 self.__layout.addLayout(self.__backNextLayout) 130 self.__layout.addLayout(self.__backNextLayout)
117 self.__layout.addWidget(self.__reloadStopButton) 131 self.__layout.addWidget(self.__reloadStopButton)
118 self.__layout.addWidget(self.__homeButton) 132 self.__layout.addWidget(self.__homeButton)
119 self.__layout.addWidget(self.__navigationSplitter) 133 self.__layout.addWidget(self.__navigationSplitter)
120 self.__layout.addWidget(self.__exitFullScreenButton) 134 self.__layout.addWidget(self.__exitFullScreenButton)
135 self.__layout.addWidget(self.__superMenuButton)
136
137 self.setContextMenuPolicy(Qt.CustomContextMenu)
138 self.customContextMenuRequested.connect(self.__contextMenuRequested)
121 139
122 self.__backMenu = QMenu(self) 140 self.__backMenu = QMenu(self)
123 self.__backMenu.aboutToShow.connect(self.__showBackMenu)
124 self.__backMenu.triggered.connect(self.__navigationMenuActionTriggered) 141 self.__backMenu.triggered.connect(self.__navigationMenuActionTriggered)
125 self.__backButton.setMenu(self.__backMenu) 142 self.__backButton.setMenu(self.__backMenu)
126 self.__backButton.setPopupMode(QToolButton.MenuButtonPopup) 143 self.__backButton.aboutToShowMenu.connect(self.__showBackMenu)
127 144
128 self.__forwardMenu = QMenu(self) 145 self.__forwardMenu = QMenu(self)
129 self.__forwardMenu.aboutToShow.connect(self.__showForwardMenu)
130 self.__forwardMenu.triggered.connect( 146 self.__forwardMenu.triggered.connect(
131 self.__navigationMenuActionTriggered) 147 self.__navigationMenuActionTriggered)
132 self.__forwardButton.setMenu(self.__forwardMenu) 148 self.__forwardButton.setMenu(self.__forwardMenu)
133 self.__forwardButton.setPopupMode(QToolButton.MenuButtonPopup) 149 self.__forwardButton.aboutToShowMenu.connect(self.__showForwardMenu)
134 150
135 self.__backButton.clicked.connect(self.__goBack) 151 self.__backButton.clicked.connect(self.__goBack)
152 self.__backButton.middleClicked.connect(self.__goBackInNewTab)
153 self.__backButton.controlClicked.connect(self.__goBackInNewTab)
136 self.__forwardButton.clicked.connect(self.__goForward) 154 self.__forwardButton.clicked.connect(self.__goForward)
155 self.__forwardButton.middleClicked.connect(self.__goForwardInNewTab)
156 self.__forwardButton.controlClicked.connect(self.__goForwardInNewTab)
137 self.__reloadStopButton.reloadClicked.connect(self.__reload) 157 self.__reloadStopButton.reloadClicked.connect(self.__reload)
138 self.__reloadStopButton.stopClicked.connect(self.__stopLoad) 158 self.__reloadStopButton.stopClicked.connect(self.__stopLoad)
139 self.__homeButton.clicked.connect(self.__goHome) 159 self.__homeButton.clicked.connect(self.__goHome)
160 self.__homeButton.middleClicked.connect(self.__goHomeInNewTab)
161 self.__homeButton.controlClicked.connect(self.__goHomeInNewTab)
162
163 def superMenuButton(self):
164 """
165 Public method to get a reference to the super menu button.
166
167 @return reference to the super menu button
168 @rtype QToolButton
169 """
170 return self.__superMenuButton
140 171
141 def backButton(self): 172 def backButton(self):
142 """ 173 """
143 Public method to get a reference to the back button. 174 Public method to get a reference to the back button.
144 175
261 """ 292 """
262 Private slot called to handle the backward button. 293 Private slot called to handle the backward button.
263 """ 294 """
264 self.__mw.currentBrowser().backward() 295 self.__mw.currentBrowser().backward()
265 296
297 def __goBackInNewTab(self):
298 """
299 Private slot handling a middle click or Ctrl left click of the
300 backward button.
301 """
302 history = self.__mw.currentBrowser().history()
303 if history.canGoBack():
304 backItem = history.backItem()
305 self.__mw.newTab(link=backItem.url(),
306 addNextTo=self.__mw.currentBrowser(),
307 background=True)
308
266 def __goForward(self): 309 def __goForward(self):
267 """ 310 """
268 Private slot called to handle the forward button. 311 Private slot called to handle the forward button.
269 """ 312 """
270 self.__mw.currentBrowser().forward() 313 self.__mw.currentBrowser().forward()
271 314
315 def __goForwardInNewTab(self):
316 """
317 Private slot handling a middle click or Ctrl left click of the
318 forward button.
319 """
320 history = self.__mw.currentBrowser().history()
321 if history.canGoForward():
322 forwardItem = history.forwardItem()
323 self.__mw.newTab(link=forwardItem.url(),
324 addNextTo=self.__mw.currentBrowser(),
325 background=True)
326
272 def __goHome(self): 327 def __goHome(self):
273 """ 328 """
274 Private slot called to handle the home button. 329 Private slot called to handle the home button.
275 """ 330 """
276 self.__mw.currentBrowser().home() 331 self.__mw.currentBrowser().home()
332
333 def __goHomeInNewTab(self):
334 """
335 Private slot handling a middle click or Ctrl left click of the
336 home button.
337 """
338 homeUrl = QUrl(Preferences.getWebBrowser("HomePage"))
339 self.__mw.newTab(link=homeUrl,
340 addNextTo=self.__mw.currentBrowser(),
341 background=True)
277 342
278 def __reload(self): 343 def __reload(self):
279 """ 344 """
280 Private slot called to handle the reload button. 345 Private slot called to handle the reload button.
281 """ 346 """
294 cb = self.__mw.currentBrowser() 359 cb = self.__mw.currentBrowser()
295 if cb is not None: 360 if cb is not None:
296 cb.history().clear() 361 cb.history().clear()
297 self.__mw.setForwardAvailable(cb.isForwardAvailable()) 362 self.__mw.setForwardAvailable(cb.isForwardAvailable())
298 self.__mw.setBackwardAvailable(cb.isBackwardAvailable()) 363 self.__mw.setBackwardAvailable(cb.isBackwardAvailable())
364
365 def __contextMenuRequested(self, pos):
366 """
367 Private method to handle a context menu request.
368
369 @param pos position of the request
370 @type QPoint
371 """
372 menu = self.__mw.createPopupMenu()
373 menu.exec_(self.mapToGlobal(pos))

eric ide

mercurial