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 """ |