18 from E5Gui.E5Application import e5App |
18 from E5Gui.E5Application import e5App |
19 |
19 |
20 from .HelpTabBar import HelpTabBar |
20 from .HelpTabBar import HelpTabBar |
21 from .HelpBrowserWV import HelpBrowser |
21 from .HelpBrowserWV import HelpBrowser |
22 import Helpviewer |
22 import Helpviewer |
|
23 from .ClosedTabsManager import ClosedTabsManager |
23 |
24 |
24 from .History.HistoryCompleter import HistoryCompletionModel, HistoryCompleter |
25 from .History.HistoryCompleter import HistoryCompletionModel, HistoryCompleter |
25 |
26 |
26 from .UrlBar.StackedUrlBar import StackedUrlBar |
27 from .UrlBar.StackedUrlBar import StackedUrlBar |
27 from .UrlBar.UrlBar import UrlBar |
28 from .UrlBar.UrlBar import UrlBar |
64 |
65 |
65 self.setUsesScrollButtons(True) |
66 self.setUsesScrollButtons(True) |
66 self.setDocumentMode(True) |
67 self.setDocumentMode(True) |
67 self.setElideMode(Qt.ElideNone) |
68 self.setElideMode(Qt.ElideNone) |
68 |
69 |
|
70 self.__closedTabsManager = ClosedTabsManager(self) |
|
71 self.__closedTabsManager.closedTabAvailable.connect(self.__closedTabAvailable) |
|
72 |
69 self.__stackedUrlBar = StackedUrlBar(self) |
73 self.__stackedUrlBar = StackedUrlBar(self) |
70 self.__tabBar.tabMoved.connect(self.__stackedUrlBar.moveBar) |
74 self.__tabBar.tabMoved.connect(self.__stackedUrlBar.moveBar) |
71 |
75 |
72 self.__tabContextMenuIndex = -1 |
76 self.__tabContextMenuIndex = -1 |
73 self.currentChanged[int].connect(self.__currentChanged) |
77 self.currentChanged[int].connect(self.__currentChanged) |
88 self.__navigationButton.setToolTip(self.trUtf8("Show a navigation menu")) |
92 self.__navigationButton.setToolTip(self.trUtf8("Show a navigation menu")) |
89 self.__navigationButton.setPopupMode(QToolButton.InstantPopup) |
93 self.__navigationButton.setPopupMode(QToolButton.InstantPopup) |
90 self.__navigationButton.setMenu(self.__navigationMenu) |
94 self.__navigationButton.setMenu(self.__navigationMenu) |
91 self.__navigationButton.setEnabled(False) |
95 self.__navigationButton.setEnabled(False) |
92 self.__rightCornerWidgetLayout.addWidget(self.__navigationButton) |
96 self.__rightCornerWidgetLayout.addWidget(self.__navigationButton) |
|
97 |
|
98 self.__closedTabsMenu = QMenu(self) |
|
99 self.__closedTabsMenu.aboutToShow.connect(self.__aboutToShowClosedTabsMenu) |
|
100 |
|
101 self.__closedTabsButton = QToolButton(self) |
|
102 self.__closedTabsButton.setIcon(UI.PixmapCache.getIcon("trash.png")) |
|
103 self.__closedTabsButton.setToolTip( |
|
104 self.trUtf8("Show a navigation menu for closed tabs")) |
|
105 self.__closedTabsButton.setPopupMode(QToolButton.InstantPopup) |
|
106 self.__closedTabsButton.setMenu(self.__closedTabsMenu) |
|
107 self.__closedTabsButton.setEnabled(False) |
|
108 self.__rightCornerWidgetLayout.addWidget(self.__closedTabsButton) |
93 |
109 |
94 self.__closeButton = QToolButton(self) |
110 self.__closeButton = QToolButton(self) |
95 self.__closeButton.setIcon(UI.PixmapCache.getIcon("close.png")) |
111 self.__closeButton.setIcon(UI.PixmapCache.getIcon("close.png")) |
96 self.__closeButton.setToolTip(self.trUtf8("Close the current help window")) |
112 self.__closeButton.setToolTip(self.trUtf8("Close the current help window")) |
97 self.__closeButton.setEnabled(False) |
113 self.__closeButton.setEnabled(False) |
151 self.__tabContextMenu.addAction(UI.PixmapCache.getIcon("print.png"), |
167 self.__tabContextMenu.addAction(UI.PixmapCache.getIcon("print.png"), |
152 self.trUtf8('Print'), self.__tabContextMenuPrint) |
168 self.trUtf8('Print'), self.__tabContextMenuPrint) |
153 self.__tabContextMenu.addAction(UI.PixmapCache.getIcon("printPdf.png"), |
169 self.__tabContextMenu.addAction(UI.PixmapCache.getIcon("printPdf.png"), |
154 self.trUtf8('Print as PDF'), self.__tabContextMenuPrintPdf) |
170 self.trUtf8('Print as PDF'), self.__tabContextMenuPrintPdf) |
155 self.__tabContextMenu.addSeparator() |
171 self.__tabContextMenu.addSeparator() |
|
172 self.__tabContextMenu.addAction(UI.PixmapCache.getIcon("reload.png"), |
|
173 self.trUtf8('Reload All'), self.reloadAllBrowsers) |
|
174 self.__tabContextMenu.addSeparator() |
156 self.__tabContextMenu.addAction(self.trUtf8('Bookmark All Tabs'), |
175 self.__tabContextMenu.addAction(self.trUtf8('Bookmark All Tabs'), |
157 self.__mainWindow.bookmarkAll) |
176 self.__mainWindow.bookmarkAll) |
|
177 |
|
178 self.__tabBackContextMenu = QMenu(self) |
|
179 self.__tabBackContextMenu.addAction(self.trUtf8('Close All'), |
|
180 self.closeAllBrowsers) |
|
181 self.__tabBackContextMenu.addAction(UI.PixmapCache.getIcon("reload.png"), |
|
182 self.trUtf8('Reload All'), self.reloadAllBrowsers) |
|
183 self.__tabBackContextMenu.addAction(self.trUtf8('Bookmark All Tabs'), |
|
184 self.__mainWindow.bookmarkAll) |
|
185 self.__tabBackContextMenu.addSeparator() |
|
186 self.__restoreClosedTabAct = self.__tabBackContextMenu.addAction( |
|
187 UI.PixmapCache.getIcon("trash.png"), |
|
188 self.trUtf8('Restore Closed Tab'), |
|
189 self.restoreClosedTab) |
|
190 self.__restoreClosedTabAct.setEnabled(False) |
|
191 self.__restoreClosedTabAct.setData(0) |
158 |
192 |
159 def __showContextMenu(self, coord, index): |
193 def __showContextMenu(self, coord, index): |
160 """ |
194 """ |
161 Private slot to show the tab context menu. |
195 Private slot to show the tab context menu. |
162 |
196 |
163 @param coord the position of the mouse pointer (QPoint) |
197 @param coord the position of the mouse pointer (QPoint) |
164 @param index index of the tab the menu is requested for (integer) |
198 @param index index of the tab the menu is requested for (integer) |
165 """ |
199 """ |
166 self.__tabContextMenuIndex = index |
|
167 self.leftMenuAct.setEnabled(index > 0) |
|
168 self.rightMenuAct.setEnabled(index < self.count() - 1) |
|
169 |
|
170 self.tabContextCloseOthersAct.setEnabled(self.count() > 1) |
|
171 |
|
172 coord = self.mapToGlobal(coord) |
200 coord = self.mapToGlobal(coord) |
173 self.__tabContextMenu.popup(coord) |
201 if index == -1: |
|
202 self.__tabBackContextMenu.popup(coord) |
|
203 else: |
|
204 self.__tabContextMenuIndex = index |
|
205 self.leftMenuAct.setEnabled(index > 0) |
|
206 self.rightMenuAct.setEnabled(index < self.count() - 1) |
|
207 |
|
208 self.tabContextCloseOthersAct.setEnabled(self.count() > 1) |
|
209 |
|
210 self.__tabContextMenu.popup(coord) |
174 |
211 |
175 def __tabContextMenuMoveLeft(self): |
212 def __tabContextMenuMoveLeft(self): |
176 """ |
213 """ |
177 Private method to move a tab one position to the left. |
214 Private method to move a tab one position to the left. |
178 """ |
215 """ |
230 Private method to show a print preview of the selected tab. |
267 Private method to show a print preview of the selected tab. |
231 """ |
268 """ |
232 browser = self.widget(self.__tabContextMenuIndex) |
269 browser = self.widget(self.__tabContextMenuIndex) |
233 self.printPreviewBrowser(browser) |
270 self.printPreviewBrowser(browser) |
234 |
271 |
235 def newBrowser(self, link=None, requestData=None): |
272 def newBrowser(self, link=None, requestData=None, position=-1): |
236 """ |
273 """ |
237 Public method to create a new web browser tab. |
274 Public method to create a new web browser tab. |
238 |
275 |
239 @param link link to be shown (string or QUrl) |
276 @param link link to be shown (string or QUrl) |
240 @param requestData tuple containing the request data (QNetworkRequest, |
277 @param requestData tuple containing the request data (QNetworkRequest, |
241 QNetworkAccessManager.Operation, QByteArray) |
278 QNetworkAccessManager.Operation, QByteArray) |
|
279 @keyparam position position to create the new tab at or -1 to add it to the end |
|
280 (integer) |
242 """ |
281 """ |
243 if link is None: |
282 if link is None: |
244 linkName = "" |
283 linkName = "" |
245 elif isinstance(link, QUrl): |
284 elif isinstance(link, QUrl): |
246 linkName = link.toString() |
285 linkName = link.toString() |
255 self.__historyCompleter = HistoryCompleter( |
294 self.__historyCompleter = HistoryCompleter( |
256 self.__historyCompletionModel, self) |
295 self.__historyCompletionModel, self) |
257 self.__historyCompleter.activated[str].connect(self.__pathSelected) |
296 self.__historyCompleter.activated[str].connect(self.__pathSelected) |
258 urlbar.setCompleter(self.__historyCompleter) |
297 urlbar.setCompleter(self.__historyCompleter) |
259 urlbar.returnPressed.connect(self.__lineEditReturnPressed) |
298 urlbar.returnPressed.connect(self.__lineEditReturnPressed) |
260 self.__stackedUrlBar.addWidget(urlbar) |
299 if position == -1: |
|
300 self.__stackedUrlBar.addWidget(urlbar) |
|
301 else: |
|
302 self.__stackedUrlBar.insertWidget(position, urlbar) |
261 |
303 |
262 browser = HelpBrowser(self.__mainWindow, self) |
304 browser = HelpBrowser(self.__mainWindow, self) |
263 urlbar.setBrowser(browser) |
305 urlbar.setBrowser(browser) |
264 |
306 |
265 browser.sourceChanged.connect(self.__sourceChanged) |
307 browser.sourceChanged.connect(self.__sourceChanged) |
272 browser.iconChanged.connect(self.__iconChanged) |
314 browser.iconChanged.connect(self.__iconChanged) |
273 browser.search.connect(self.newBrowser) |
315 browser.search.connect(self.newBrowser) |
274 browser.page().windowCloseRequested.connect(self.__windowCloseRequested) |
316 browser.page().windowCloseRequested.connect(self.__windowCloseRequested) |
275 browser.page().printRequested.connect(self.__printRequested) |
317 browser.page().printRequested.connect(self.__printRequested) |
276 |
318 |
277 index = self.addTab(browser, self.trUtf8("...")) |
319 if position == -1: |
|
320 index = self.addTab(browser, self.trUtf8("...")) |
|
321 else: |
|
322 index = self.insertTab(position, browser, self.trUtf8("...")) |
278 self.setCurrentIndex(index) |
323 self.setCurrentIndex(index) |
279 |
324 |
280 self.__mainWindow.closeAct.setEnabled(True) |
325 self.__mainWindow.closeAct.setEnabled(True) |
281 self.__mainWindow.closeAllAct.setEnabled(True) |
326 self.__mainWindow.closeAllAct.setEnabled(True) |
282 self.__closeButton.setEnabled(True) |
327 self.__closeButton.setEnabled(True) |
333 return |
378 return |
334 |
379 |
335 index = self.indexOf(browser) |
380 index = self.indexOf(browser) |
336 self.closeBrowserAt(index) |
381 self.closeBrowserAt(index) |
337 |
382 |
|
383 def reloadAllBrowsers(self): |
|
384 """ |
|
385 Public slot to reload all browsers. |
|
386 """ |
|
387 for index in range(self.count()): |
|
388 browser = self.widget(index) |
|
389 browser and browser.reload() |
|
390 |
338 def closeBrowser(self): |
391 def closeBrowser(self): |
339 """ |
392 """ |
340 Public slot called to handle the close action. |
393 Public slot called to handle the close action. |
341 """ |
394 """ |
342 self.closeBrowserAt(self.currentIndex()) |
395 self.closeBrowserAt(self.currentIndex()) |
792 if browser is not None: |
848 if browser is not None: |
793 if browser.url() == "" and browser.hasFocus(): |
849 if browser.url() == "" and browser.hasFocus(): |
794 self.__stackedUrlBar.currentWidget.setFocus() |
850 self.__stackedUrlBar.currentWidget.setFocus() |
795 elif browser.url() != "": |
851 elif browser.url() != "": |
796 browser.setFocus() |
852 browser.setFocus() |
|
853 |
|
854 def restoreClosedTab(self): |
|
855 """ |
|
856 Public slot to restore the most recently closed tab. |
|
857 """ |
|
858 if not self.canRestoreClosedTab(): |
|
859 return |
|
860 |
|
861 act = self.sender() |
|
862 tab = self.__closedTabsManager.getClosedTabAt(act.data()) |
|
863 |
|
864 self.newBrowser(tab.url.toString(), position = tab.position) |
|
865 |
|
866 def canRestoreClosedTab(self): |
|
867 """ |
|
868 Public method to check, if closed tabs can be restored. |
|
869 |
|
870 @return flag indicating that closed tabs can be restored (boolean) |
|
871 """ |
|
872 return self.__closedTabsManager.isClosedTabAvailable() |
|
873 |
|
874 def restoreAllClosedTabs(self): |
|
875 """ |
|
876 Public slot to restore all closed tabs. |
|
877 """ |
|
878 if not self.canRestoreClosedTab(): |
|
879 return |
|
880 |
|
881 for tab in self.__closedTabsManager.allClosedTabs(): |
|
882 self.newBrowser(tab.url.toString(), position = tab.position) |
|
883 self.__closedTabsManager.clearList() |
|
884 |
|
885 def clearClosedTabsList(self): |
|
886 """ |
|
887 Public slot to clear the list of closed tabs. |
|
888 """ |
|
889 self.__closedTabsManager.clearList() |
|
890 |
|
891 def __aboutToShowClosedTabsMenu(self): |
|
892 """ |
|
893 Private slot to populate the closed tabs menu. |
|
894 """ |
|
895 fm = self.__closedTabsMenu.fontMetrics() |
|
896 maxWidth = fm.width('m') * 40 |
|
897 |
|
898 self.__closedTabsMenu.clear() |
|
899 index = 0 |
|
900 for tab in self.__closedTabsManager.allClosedTabs(): |
|
901 title = fm.elidedText(tab.title, Qt.ElideRight, maxWidth) |
|
902 self.__closedTabsMenu.addAction(self.__mainWindow.icon(tab.url), title, |
|
903 self.restoreClosedTab).setData(index) |
|
904 index += 1 |
|
905 self.__closedTabsMenu.addSeparator() |
|
906 self.__closedTabsMenu.addAction(self.trUtf8("Restore All Closed Tabs"), |
|
907 self.restoreAllClosedTabs) |
|
908 self.__closedTabsMenu.addAction(self.trUtf8("Clear List"), |
|
909 self.clearClosedTabsList) |
|
910 |
|
911 def closedTabsManager(self): |
|
912 """ |
|
913 Public slot to get a reference to the closed tabs manager. |
|
914 |
|
915 @return reference to the closed tabs manager (ClosedTabsManager) |
|
916 """ |
|
917 return self.__closedTabsManager |
|
918 |
|
919 def __closedTabAvailable(self, avail): |
|
920 """ |
|
921 Private slot to handle changes of the availability of closed tabs. |
|
922 |
|
923 @param avail flag indicating the availability of closed tabs (boolean) |
|
924 """ |
|
925 self.__closedTabsButton.setEnabled(avail) |
|
926 self.__restoreClosedTabAct.setEnabled(avail) |