Helpviewer/HelpTabWidget.py

changeset 1694
648466a9451b
parent 1673
06eeffc8c97d
child 1781
34a44041c4cb
equal deleted inserted replaced
1693:9bb872e26a33 1694:648466a9451b
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())
359 del urlbar 412 del urlbar
360 413
361 browser = self.widget(index) 414 browser = self.widget(index)
362 if browser is None: 415 if browser is None:
363 return 416 return
417
418 self.__closedTabsManager.recordBrowser(browser, index)
419
364 browser.home() 420 browser.home()
365 self.removeTab(index) 421 self.removeTab(index)
366 self.browserClosed.emit(browser) 422 self.browserClosed.emit(browser)
367 del browser 423 del browser
368 424
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)

eric ide

mercurial