WebBrowser/WebBrowserTabWidget.py

changeset 6122
e7d98249f393
parent 6048
82ad8ec9548c
child 6221
35ec993034e1
equal deleted inserted replaced
6121:d3d64f3128b3 6122:e7d98249f393
224 UI.PixmapCache.getIcon("addBookmark.png"), 224 UI.PixmapCache.getIcon("addBookmark.png"),
225 self.tr('Bookmark All Tabs'), self.__mainWindow.bookmarkAll) 225 self.tr('Bookmark All Tabs'), self.__mainWindow.bookmarkAll)
226 self.__tabBackContextMenu.addSeparator() 226 self.__tabBackContextMenu.addSeparator()
227 self.__restoreClosedTabAct = self.__tabBackContextMenu.addAction( 227 self.__restoreClosedTabAct = self.__tabBackContextMenu.addAction(
228 UI.PixmapCache.getIcon("trash.png"), 228 UI.PixmapCache.getIcon("trash.png"),
229 self.tr('Restore Closed Tab'), self.restoreClosedTab) 229 self.tr('Restore Closed Tab'))
230 self.__restoreClosedTabAct.setEnabled(False) 230 self.__restoreClosedTabAct.setEnabled(False)
231 self.__restoreClosedTabAct.setData(0) 231 self.__restoreClosedTabAct.setData(0)
232 self.__restoreClosedTabAct.triggered.connect(
233 lambda: self.restoreClosedTab(self.__restoreClosedTabAct))
232 234
233 def __showContextMenu(self, coord, index): 235 def __showContextMenu(self, coord, index):
234 """ 236 """
235 Private slot to show the tab context menu. 237 Private slot to show the tab context menu.
236 238
330 page = self.widget(self.__tabContextMenuIndex).page() 332 page = self.widget(self.__tabContextMenuIndex).page()
331 muted = page.isAudioMuted() 333 muted = page.isAudioMuted()
332 page.setAudioMuted(not muted) 334 page.setAudioMuted(not muted)
333 335
334 @pyqtSlot(bool) 336 @pyqtSlot(bool)
335 def __recentlyAudibleChanged(self, recentlyAudible): 337 def __recentlyAudibleChanged(self, recentlyAudible, page):
336 """ 338 """
337 Private slot to react on the audible state of a page. 339 Private slot to react on the audible state of a page.
338 340
339 @param recentlyAudible flag indicating the new audible state 341 @param recentlyAudible flag indicating the new audible state
340 @type bool 342 @type bool
341 """ 343 @param page reference to the web page
342 page = self.sender() 344 @type WebBrowserPage
343 if page is None: 345 """
344 return
345
346 browser = page.view() 346 browser = page.view()
347 if browser is None: 347 if browser is None:
348 return 348 return
349 349
350 index = self.indexOf(browser) 350 index = self.indexOf(browser)
410 .historyFilterModel()) 410 .historyFilterModel())
411 self.__historyCompleter = HistoryCompleter( 411 self.__historyCompleter = HistoryCompleter(
412 self.__historyCompletionModel, self) 412 self.__historyCompletionModel, self)
413 self.__historyCompleter.activated[str].connect(self.__pathSelected) 413 self.__historyCompleter.activated[str].connect(self.__pathSelected)
414 urlbar.setCompleter(self.__historyCompleter) 414 urlbar.setCompleter(self.__historyCompleter)
415 urlbar.returnPressed.connect(self.__lineEditReturnPressed) 415 urlbar.returnPressed.connect(
416 lambda: self.__lineEditReturnPressed(urlbar))
416 if position == -1: 417 if position == -1:
417 self.__stackedUrlBar.addWidget(urlbar) 418 self.__stackedUrlBar.addWidget(urlbar)
418 else: 419 else:
419 self.__stackedUrlBar.insertWidget(position, urlbar) 420 self.__stackedUrlBar.insertWidget(position, urlbar)
420 421
421 browser = WebBrowserView(self.__mainWindow, self) 422 browser = WebBrowserView(self.__mainWindow, self)
422 urlbar.setBrowser(browser) 423 urlbar.setBrowser(browser)
423 424
424 browser.sourceChanged.connect(self.__sourceChanged) 425 browser.sourceChanged.connect(
425 browser.titleChanged.connect(self.__titleChanged) 426 lambda url: self.__sourceChanged(url, browser))
427 browser.titleChanged.connect(
428 lambda title: self.__titleChanged(title, browser))
426 browser.highlighted.connect(self.showMessage) 429 browser.highlighted.connect(self.showMessage)
427 browser.backwardAvailable.connect( 430 browser.backwardAvailable.connect(
428 self.__mainWindow.setBackwardAvailable) 431 self.__mainWindow.setBackwardAvailable)
429 browser.forwardAvailable.connect(self.__mainWindow.setForwardAvailable) 432 browser.forwardAvailable.connect(self.__mainWindow.setForwardAvailable)
430 browser.loadStarted.connect(self.__loadStarted) 433 browser.loadStarted.connect(
431 browser.loadFinished.connect(self.__loadFinished) 434 lambda: self.__loadStarted(browser))
432 browser.faviconChanged.connect(self.__iconChanged) 435 browser.loadFinished.connect(
436 lambda ok: self.__loadFinished(ok, browser))
437 browser.faviconChanged.connect(
438 lambda: self.__iconChanged(browser))
433 browser.search.connect(self.newBrowser) 439 browser.search.connect(self.newBrowser)
434 browser.page().windowCloseRequested.connect( 440 browser.page().windowCloseRequested.connect(
435 self.__windowCloseRequested) 441 lambda: self.__windowCloseRequested(browser.page()))
436 browser.zoomValueChanged.connect(self.browserZoomValueChanged) 442 browser.zoomValueChanged.connect(self.browserZoomValueChanged)
437 if hasattr(WebBrowserPage, "recentlyAudibleChanged"): 443 if hasattr(WebBrowserPage, "recentlyAudibleChanged"):
438 browser.page().recentlyAudibleChanged.connect( 444 browser.page().recentlyAudibleChanged.connect(
439 self.__recentlyAudibleChanged) 445 lambda audible: self.__recentlyAudibleChanged(
446 audible, browser.page()))
440 447
441 if position == -1: 448 if position == -1:
442 index = self.addTab(browser, self.tr("...")) 449 index = self.addTab(browser, self.tr("..."))
443 else: 450 else:
444 index = self.insertTab(position, browser, self.tr("...")) 451 index = self.insertTab(position, browser, self.tr("..."))
512 """ 519 """
513 index = act.data() 520 index = act.data()
514 if index is not None: 521 if index is not None:
515 self.setCurrentIndex(index) 522 self.setCurrentIndex(index)
516 523
517 def __windowCloseRequested(self): 524 def __windowCloseRequested(self, page):
518 """ 525 """
519 Private slot to handle the windowCloseRequested signal of a browser. 526 Private slot to handle the windowCloseRequested signal of a browser.
520 """ 527
521 page = self.sender() 528 @param page reference to the web page
522 if page is None: 529 @type WebBrowserPage
523 return 530 """
524
525 browser = page.view() 531 browser = page.view()
526 if browser is None: 532 if browser is None:
527 return 533 return
528 534
529 index = self.indexOf(browser) 535 index = self.indexOf(browser)
842 """ 848 """
843 QApplication.setOverrideCursor(Qt.WaitCursor) 849 QApplication.setOverrideCursor(Qt.WaitCursor)
844 browser.page().execPrintPage(printer, 10 * 1000) 850 browser.page().execPrintPage(printer, 10 * 1000)
845 QApplication.restoreOverrideCursor() 851 QApplication.restoreOverrideCursor()
846 852
847 def __sourceChanged(self, url): 853 def __sourceChanged(self, url, browser):
848 """ 854 """
849 Private slot to handle a change of a browsers source. 855 Private slot to handle a change of a browsers source.
850 856
851 @param url URL of the new site (QUrl) 857 @param url URL of the new site
852 """ 858 @type QUrl
853 browser = self.sender() 859 @param browser reference to the web browser
854 860 @type WebBrowserView
855 if browser is not None: 861 """
856 self.sourceChanged.emit(browser, url) 862 self.sourceChanged.emit(browser, url)
857 863
858 if browser == self.currentBrowser(): 864 if browser == self.currentBrowser():
859 self.currentUrlChanged.emit(url) 865 self.currentUrlChanged.emit(url)
860 866
861 def __titleChanged(self, title): 867 def __titleChanged(self, title, browser):
862 """ 868 """
863 Private slot to handle a change of a browsers title. 869 Private slot to handle a change of a browsers title.
864 870
865 @param title new title (string) 871 @param title new title
866 """ 872 @type str
867 browser = self.sender() 873 @param browser reference to the web browser
868 874 @type WebBrowserView
869 if browser is not None and isinstance(browser, QWidget): 875 """
870 index = self.indexOf(browser) 876 index = self.indexOf(browser)
871 if title == "": 877 if title == "":
872 title = browser.url().toString() 878 title = browser.url().toString()
873 879
874 self.setTabText(index, self.__elide(title.replace("&", "&&"))) 880 self.setTabText(index, self.__elide(title.replace("&", "&&")))
875 self.setTabToolTip(index, title) 881 self.setTabToolTip(index, title)
876 882
877 self.titleChanged.emit(browser, title) 883 self.titleChanged.emit(browser, title)
878 884
879 def __elide(self, txt, mode=Qt.ElideRight, length=40): 885 def __elide(self, txt, mode=Qt.ElideRight, length=40):
880 """ 886 """
881 Private method to elide some text. 887 Private method to elide some text.
882 888
917 else: 923 else:
918 self.setTabsClosable(True) 924 self.setTabsClosable(True)
919 self.tabCloseRequested.connect(self.closeBrowserAt) 925 self.tabCloseRequested.connect(self.closeBrowserAt)
920 self.__closeButton.hide() 926 self.__closeButton.hide()
921 927
922 def __loadStarted(self): 928 def __loadStarted(self, browser):
923 """ 929 """
924 Private method to handle the loadStarted signal. 930 Private method to handle the loadStarted signal.
925 """ 931
926 browser = self.sender() 932 @param browser reference to the web browser
927 933 @type WebBrowserView
928 if browser is not None: 934 """
929 index = self.indexOf(browser) 935 index = self.indexOf(browser)
930 anim = self.animationLabel( 936 anim = self.animationLabel(
931 index, os.path.join(getConfig("ericPixDir"), "loading.gif"), 937 index, os.path.join(getConfig("ericPixDir"), "loading.gif"),
932 100) 938 100)
933 if not anim: 939 if not anim:
934 loading = QIcon(os.path.join(getConfig("ericPixDir"), 940 loading = QIcon(os.path.join(getConfig("ericPixDir"),
935 "loading.gif")) 941 "loading.gif"))
936 self.setTabIcon(index, loading) 942 self.setTabIcon(index, loading)
937 else: 943 else:
938 self.setTabIcon(index, QIcon()) 944 self.setTabIcon(index, QIcon())
939 self.setTabText(index, self.tr("Loading...")) 945 self.setTabText(index, self.tr("Loading..."))
940 self.setTabToolTip(index, self.tr("Loading...")) 946 self.setTabToolTip(index, self.tr("Loading..."))
941 self.showMessage.emit(self.tr("Loading...")) 947 self.showMessage.emit(self.tr("Loading..."))
942 948
943 self.__mainWindow.setLoadingActions(True) 949 self.__mainWindow.setLoadingActions(True)
944 950
945 def __loadFinished(self, ok): 951 def __loadFinished(self, ok, browser):
946 """ 952 """
947 Private method to handle the loadFinished signal. 953 Private method to handle the loadFinished signal.
948 954
949 @param ok flag indicating the result (boolean) 955 @param ok flag indicating the result
950 """ 956 @type bool
951 browser = self.sender() 957 @param browser reference to the web browser
952 if not isinstance(browser, WebBrowserView): 958 @type WebBrowserView
953 return 959 """
954 960 import WebBrowser.WebBrowserWindow
955 if browser is not None: 961 index = self.indexOf(browser)
956 import WebBrowser.WebBrowserWindow 962 self.resetAnimation(index)
957 index = self.indexOf(browser) 963 self.setTabIcon(
958 self.resetAnimation(index) 964 index, WebBrowser.WebBrowserWindow.WebBrowserWindow.icon(
959 self.setTabIcon( 965 browser.url()))
960 index, WebBrowser.WebBrowserWindow.WebBrowserWindow.icon( 966 if ok:
961 browser.url())) 967 self.showMessage.emit(self.tr("Finished loading"))
962 if ok: 968 else:
963 self.showMessage.emit(self.tr("Finished loading")) 969 self.showMessage.emit(self.tr("Failed to load"))
964 else: 970
965 self.showMessage.emit(self.tr("Failed to load")) 971 self.__mainWindow.setLoadingActions(False)
966 972
967 self.__mainWindow.setLoadingActions(False) 973 def __iconChanged(self, browser):
968
969 def __iconChanged(self):
970 """ 974 """
971 Private slot to handle a change of the web site icon. 975 Private slot to handle a change of the web site icon.
972 """ 976
973 browser = self.sender() 977 @param browser reference to the web browser
974 978 @type WebBrowserView
975 if browser is not None and isinstance(browser, QWidget): 979 """
976 self.setTabIcon( 980 self.setTabIcon(
977 self.indexOf(browser), 981 self.indexOf(browser),
978 browser.icon()) 982 browser.icon())
979 self.__mainWindow.bookmarksManager().faviconChanged(browser.url()) 983 self.__mainWindow.bookmarksManager().faviconChanged(browser.url())
980 984
981 def getSourceFileList(self): 985 def getSourceFileList(self):
982 """ 986 """
983 Public method to get a list of all opened Qt help files. 987 Public method to get a list of all opened Qt help files.
984 988
1044 1048
1045 @return reference to the current url bar (UrlBar) 1049 @return reference to the current url bar (UrlBar)
1046 """ 1050 """
1047 return self.__stackedUrlBar.currentWidget() 1051 return self.__stackedUrlBar.currentWidget()
1048 1052
1049 def __lineEditReturnPressed(self): 1053 def __lineEditReturnPressed(self, edit):
1050 """ 1054 """
1051 Private slot to handle the entering of an URL. 1055 Private slot to handle the entering of an URL.
1052 """ 1056
1053 edit = self.sender() 1057 @param edit reference to the line edit
1058 @type UrlBar
1059 """
1054 url = self.__guessUrlFromPath(edit.text()) 1060 url = self.__guessUrlFromPath(edit.text())
1055 if e5App().keyboardModifiers() == Qt.AltModifier: 1061 if e5App().keyboardModifiers() == Qt.AltModifier:
1056 self.newBrowser(url) 1062 self.newBrowser(url)
1057 else: 1063 else:
1058 self.currentBrowser().setSource(url) 1064 self.currentBrowser().setSource(url)
1114 if browser.url() == "" and browser.hasFocus(): 1120 if browser.url() == "" and browser.hasFocus():
1115 self.__stackedUrlBar.currentWidget.setFocus() 1121 self.__stackedUrlBar.currentWidget.setFocus()
1116 elif browser.url() != "": 1122 elif browser.url() != "":
1117 browser.setFocus() 1123 browser.setFocus()
1118 1124
1119 def restoreClosedTab(self): 1125 def restoreClosedTab(self, act):
1120 """ 1126 """
1121 Public slot to restore the most recently closed tab. 1127 Public slot to restore the most recently closed tab.
1128
1129 @param act reference to the action that triggered
1130 @type QAction
1122 """ 1131 """
1123 if not self.canRestoreClosedTab(): 1132 if not self.canRestoreClosedTab():
1124 return 1133 return
1125 1134
1126 act = self.sender()
1127 tab = self.__closedTabsManager.getClosedTabAt(act.data()) 1135 tab = self.__closedTabsManager.getClosedTabAt(act.data())
1128 1136
1129 self.newBrowser(tab.url.toString(), position=tab.position) 1137 self.newBrowser(tab.url.toString(), position=tab.position)
1130 1138
1131 def canRestoreClosedTab(self): 1139 def canRestoreClosedTab(self):
1162 1170
1163 self.__closedTabsMenu.clear() 1171 self.__closedTabsMenu.clear()
1164 index = 0 1172 index = 0
1165 for tab in self.__closedTabsManager.allClosedTabs(): 1173 for tab in self.__closedTabsManager.allClosedTabs():
1166 title = fm.elidedText(tab.title, Qt.ElideRight, maxWidth) 1174 title = fm.elidedText(tab.title, Qt.ElideRight, maxWidth)
1167 self.__closedTabsMenu.addAction( 1175 act = self.__closedTabsMenu.addAction(
1168 self.__mainWindow.icon(tab.url), title, 1176 self.__mainWindow.icon(tab.url), title)
1169 self.restoreClosedTab).setData(index) 1177 act.setData(index)
1178 act.triggered.connect(lambda: self.restoreClosedTab(act))
1170 index += 1 1179 index += 1
1171 self.__closedTabsMenu.addSeparator() 1180 self.__closedTabsMenu.addSeparator()
1172 self.__closedTabsMenu.addAction( 1181 self.__closedTabsMenu.addAction(
1173 self.tr("Restore All Closed Tabs"), self.restoreAllClosedTabs) 1182 self.tr("Restore All Closed Tabs"), self.restoreAllClosedTabs)
1174 self.__closedTabsMenu.addAction( 1183 self.__closedTabsMenu.addAction(

eric ide

mercurial