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("...")) |
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( |