201 UI.PixmapCache.getIcon("addBookmark.png"), |
201 UI.PixmapCache.getIcon("addBookmark.png"), |
202 self.tr('Bookmark All Tabs'), self.__mainWindow.bookmarkAll) |
202 self.tr('Bookmark All Tabs'), self.__mainWindow.bookmarkAll) |
203 self.__tabBackContextMenu.addSeparator() |
203 self.__tabBackContextMenu.addSeparator() |
204 self.__restoreClosedTabAct = self.__tabBackContextMenu.addAction( |
204 self.__restoreClosedTabAct = self.__tabBackContextMenu.addAction( |
205 UI.PixmapCache.getIcon("trash.png"), |
205 UI.PixmapCache.getIcon("trash.png"), |
206 self.tr('Restore Closed Tab'), self.restoreClosedTab) |
206 self.tr('Restore Closed Tab')) |
207 self.__restoreClosedTabAct.setEnabled(False) |
207 self.__restoreClosedTabAct.setEnabled(False) |
208 self.__restoreClosedTabAct.setData(0) |
208 self.__restoreClosedTabAct.setData(0) |
|
209 self.__restoreClosedTabAct.triggered.connect( |
|
210 lambda: self.restoreClosedTab(self.__restoreClosedTabAct)) |
209 |
211 |
210 def __showContextMenu(self, coord, index): |
212 def __showContextMenu(self, coord, index): |
211 """ |
213 """ |
212 Private slot to show the tab context menu. |
214 Private slot to show the tab context menu. |
213 |
215 |
326 .historyFilterModel()) |
328 .historyFilterModel()) |
327 self.__historyCompleter = HistoryCompleter( |
329 self.__historyCompleter = HistoryCompleter( |
328 self.__historyCompletionModel, self) |
330 self.__historyCompletionModel, self) |
329 self.__historyCompleter.activated[str].connect(self.__pathSelected) |
331 self.__historyCompleter.activated[str].connect(self.__pathSelected) |
330 urlbar.setCompleter(self.__historyCompleter) |
332 urlbar.setCompleter(self.__historyCompleter) |
331 urlbar.returnPressed.connect(self.__lineEditReturnPressed) |
333 urlbar.returnPressed.connect( |
|
334 lambda: self.__lineEditReturnPressed(urlbar)) |
332 if position == -1: |
335 if position == -1: |
333 self.__stackedUrlBar.addWidget(urlbar) |
336 self.__stackedUrlBar.addWidget(urlbar) |
334 else: |
337 else: |
335 self.__stackedUrlBar.insertWidget(position, urlbar) |
338 self.__stackedUrlBar.insertWidget(position, urlbar) |
336 |
339 |
337 browser = HelpBrowser(self.__mainWindow, self) |
340 browser = HelpBrowser(self.__mainWindow, self) |
338 urlbar.setBrowser(browser) |
341 urlbar.setBrowser(browser) |
339 |
342 |
340 browser.sourceChanged.connect(self.__sourceChanged) |
343 browser.sourceChanged.connect( |
341 browser.titleChanged.connect(self.__titleChanged) |
344 lambda url: self.__sourceChanged(url, browser)) |
|
345 browser.titleChanged.connect( |
|
346 lambda title: self.__titleChanged(title, browser)) |
342 browser.highlighted.connect(self.showMessage) |
347 browser.highlighted.connect(self.showMessage) |
343 browser.backwardAvailable.connect( |
348 browser.backwardAvailable.connect( |
344 self.__mainWindow.setBackwardAvailable) |
349 self.__mainWindow.setBackwardAvailable) |
345 browser.forwardAvailable.connect(self.__mainWindow.setForwardAvailable) |
350 browser.forwardAvailable.connect(self.__mainWindow.setForwardAvailable) |
346 browser.loadStarted.connect(self.__loadStarted) |
351 browser.loadStarted.connect( |
347 browser.loadFinished.connect(self.__loadFinished) |
352 lambda: self.__loadStarted(browser)) |
348 browser.iconChanged.connect(self.__iconChanged) |
353 browser.loadFinished.connect( |
|
354 lambda ok: self.__loadFinished(ok, browser)) |
|
355 browser.faviconChanged.connect( |
|
356 lambda: self.__iconChanged(browser)) |
349 browser.search.connect(self.newBrowser) |
357 browser.search.connect(self.newBrowser) |
350 browser.page().windowCloseRequested.connect( |
358 browser.page().windowCloseRequested.connect( |
351 self.__windowCloseRequested) |
359 lambda: self.__windowCloseRequested(browser.page())) |
352 browser.page().printRequested.connect(self.__printRequested) |
360 browser.page().printRequested.connect(self.__printRequested) |
353 browser.zoomValueChanged.connect(self.browserZoomValueChanged) |
361 browser.zoomValueChanged.connect(self.browserZoomValueChanged) |
354 |
362 |
355 if position == -1: |
363 if position == -1: |
356 index = self.addTab(browser, self.tr("...")) |
364 index = self.addTab(browser, self.tr("...")) |
670 self.tr( |
677 self.tr( |
671 """<p>Printing is not available due to a bug in PyQt5.""" |
678 """<p>Printing is not available due to a bug in PyQt5.""" |
672 """Please upgrade.</p>""")) |
679 """Please upgrade.</p>""")) |
673 return |
680 return |
674 |
681 |
675 def __sourceChanged(self, url): |
682 def __sourceChanged(self, url, browser): |
676 """ |
683 """ |
677 Private slot to handle a change of a browsers source. |
684 Private slot to handle a change of a browsers source. |
678 |
685 |
679 @param url URL of the new site (QUrl) |
686 @param url URL of the new site |
680 """ |
687 @type QUrl |
681 browser = self.sender() |
688 @param browser reference to the web browser |
682 |
689 @type HelpBrowser |
683 if browser is not None: |
690 """ |
684 self.sourceChanged.emit(browser, url) |
691 self.sourceChanged.emit(browser, url) |
685 |
692 |
686 def __titleChanged(self, title): |
693 def __titleChanged(self, title, browser): |
687 """ |
694 """ |
688 Private slot to handle a change of a browsers title. |
695 Private slot to handle a change of a browsers title. |
689 |
696 |
690 @param title new title (string) |
697 @param title new title |
691 """ |
698 @type str |
692 browser = self.sender() |
699 @param browser reference to the web browser |
693 |
700 @type HelpBrowser |
694 if browser is not None and isinstance(browser, QWidget): |
701 """ |
695 index = self.indexOf(browser) |
702 index = self.indexOf(browser) |
696 if title == "": |
703 if title == "": |
697 title = browser.url().toString() |
704 title = browser.url().toString() |
698 |
705 |
699 self.setTabText(index, self.__elide(title.replace("&", "&&"))) |
706 self.setTabText(index, self.__elide(title.replace("&", "&&"))) |
700 self.setTabToolTip(index, title) |
707 self.setTabToolTip(index, title) |
701 |
708 |
702 self.titleChanged.emit(browser, title) |
709 self.titleChanged.emit(browser, title) |
703 |
710 |
704 def __elide(self, txt, mode=Qt.ElideRight, length=40): |
711 def __elide(self, txt, mode=Qt.ElideRight, length=40): |
705 """ |
712 """ |
706 Private method to elide some text. |
713 Private method to elide some text. |
707 |
714 |
744 else: |
751 else: |
745 self.setTabsClosable(True) |
752 self.setTabsClosable(True) |
746 self.tabCloseRequested.connect(self.closeBrowserAt) |
753 self.tabCloseRequested.connect(self.closeBrowserAt) |
747 self.__closeButton.hide() |
754 self.__closeButton.hide() |
748 |
755 |
749 def __loadStarted(self): |
756 def __loadStarted(self, browser): |
750 """ |
757 """ |
751 Private method to handle the loadStarted signal. |
758 Private method to handle the loadStarted signal. |
752 """ |
759 |
753 browser = self.sender() |
760 @param browser reference to the web browser |
754 |
761 @type HelpBrowser |
755 if browser is not None: |
762 """ |
756 index = self.indexOf(browser) |
763 index = self.indexOf(browser) |
757 anim = self.animationLabel( |
764 anim = self.animationLabel( |
758 index, os.path.join(getConfig("ericPixDir"), "loading.gif"), |
765 index, os.path.join(getConfig("ericPixDir"), "loading.gif"), |
759 100) |
766 100) |
760 if not anim: |
767 if not anim: |
761 loading = QIcon(os.path.join(getConfig("ericPixDir"), |
768 loading = QIcon(os.path.join(getConfig("ericPixDir"), |
762 "loading.gif")) |
769 "loading.gif")) |
763 self.setTabIcon(index, loading) |
770 self.setTabIcon(index, loading) |
764 else: |
771 else: |
765 self.setTabIcon(index, QIcon()) |
772 self.setTabIcon(index, QIcon()) |
766 self.setTabText(index, self.tr("Loading...")) |
773 self.setTabText(index, self.tr("Loading...")) |
767 self.setTabToolTip(index, self.tr("Loading...")) |
774 self.setTabToolTip(index, self.tr("Loading...")) |
768 self.showMessage.emit(self.tr("Loading...")) |
775 self.showMessage.emit(self.tr("Loading...")) |
769 |
776 |
770 self.__mainWindow.setLoadingActions(True) |
777 self.__mainWindow.setLoadingActions(True) |
771 |
778 |
772 def __loadFinished(self, ok): |
779 def __loadFinished(self, ok, browser): |
773 """ |
780 """ |
774 Private method to handle the loadFinished signal. |
781 Private method to handle the loadFinished signal. |
775 |
782 |
776 @param ok flag indicating the result (boolean) |
783 @param ok flag indicating the result |
777 """ |
784 @type bool |
778 browser = self.sender() |
785 @param browser reference to the web browser |
779 if not isinstance(browser, HelpBrowser): |
786 @type HelpBrowser |
780 return |
787 """ |
781 |
788 import Helpviewer.HelpWindow |
782 if browser is not None: |
789 index = self.indexOf(browser) |
783 import Helpviewer.HelpWindow |
790 self.resetAnimation(index) |
784 index = self.indexOf(browser) |
791 self.setTabIcon( |
785 self.resetAnimation(index) |
792 index, Helpviewer.HelpWindow.HelpWindow.icon(browser.url())) |
786 self.setTabIcon( |
793 if ok: |
787 index, Helpviewer.HelpWindow.HelpWindow.icon(browser.url())) |
794 self.showMessage.emit(self.tr("Finished loading")) |
788 if ok: |
795 else: |
789 self.showMessage.emit(self.tr("Finished loading")) |
796 self.showMessage.emit(self.tr("Failed to load")) |
790 else: |
797 |
791 self.showMessage.emit(self.tr("Failed to load")) |
798 self.__mainWindow.setLoadingActions(False) |
792 |
799 |
793 self.__mainWindow.setLoadingActions(False) |
800 def __iconChanged(self, browser): |
794 |
|
795 def __iconChanged(self): |
|
796 """ |
801 """ |
797 Private slot to handle the icon change. |
802 Private slot to handle the icon change. |
798 """ |
803 |
799 browser = self.sender() |
804 @param browser reference to the web browser |
800 |
805 @type HelpBrowser |
801 if browser is not None and isinstance(browser, QWidget): |
806 """ |
802 import Helpviewer.HelpWindow |
807 import Helpviewer.HelpWindow |
803 self.setTabIcon( |
808 self.setTabIcon( |
804 self.indexOf(browser), |
809 self.indexOf(browser), |
805 Helpviewer.HelpWindow.HelpWindow.icon(browser.url())) |
810 Helpviewer.HelpWindow.HelpWindow.icon(browser.url())) |
806 Helpviewer.HelpWindow.HelpWindow.bookmarksManager()\ |
811 Helpviewer.HelpWindow.HelpWindow.bookmarksManager()\ |
807 .iconChanged(browser.url()) |
812 .iconChanged(browser.url()) |
808 |
813 |
809 def getSourceFileList(self): |
814 def getSourceFileList(self): |
810 """ |
815 """ |
811 Public method to get a list of all opened source files. |
816 Public method to get a list of all opened source files. |
812 |
817 |
871 |
876 |
872 @return reference to the current url bar (UrlBar) |
877 @return reference to the current url bar (UrlBar) |
873 """ |
878 """ |
874 return self.__stackedUrlBar.currentWidget() |
879 return self.__stackedUrlBar.currentWidget() |
875 |
880 |
876 def __lineEditReturnPressed(self): |
881 def __lineEditReturnPressed(self, edit): |
877 """ |
882 """ |
878 Private slot to handle the entering of an URL. |
883 Private slot to handle the entering of an URL. |
879 """ |
884 |
880 edit = self.sender() |
885 @param edit reference to the line edit |
|
886 @type UrlBar |
|
887 """ |
881 url = self.__guessUrlFromPath(edit.text()) |
888 url = self.__guessUrlFromPath(edit.text()) |
882 request = QNetworkRequest(url) |
889 request = QNetworkRequest(url) |
883 request.setRawHeader(b"X-Eric6-UserLoadAction", b"1") |
890 request.setRawHeader(b"X-Eric6-UserLoadAction", b"1") |
884 if e5App().keyboardModifiers() == Qt.AltModifier: |
891 if e5App().keyboardModifiers() == Qt.AltModifier: |
885 self.newBrowser( |
892 self.newBrowser( |
945 if browser.url() == "" and browser.hasFocus(): |
952 if browser.url() == "" and browser.hasFocus(): |
946 self.__stackedUrlBar.currentWidget.setFocus() |
953 self.__stackedUrlBar.currentWidget.setFocus() |
947 elif browser.url() != "": |
954 elif browser.url() != "": |
948 browser.setFocus() |
955 browser.setFocus() |
949 |
956 |
950 def restoreClosedTab(self): |
957 def restoreClosedTab(self, act): |
951 """ |
958 """ |
952 Public slot to restore the most recently closed tab. |
959 Public slot to restore the most recently closed tab. |
|
960 |
|
961 @param act reference to the action that triggered |
|
962 @type QAction |
953 """ |
963 """ |
954 if not self.canRestoreClosedTab(): |
964 if not self.canRestoreClosedTab(): |
955 return |
965 return |
956 |
966 |
957 act = self.sender() |
|
958 tab = self.__closedTabsManager.getClosedTabAt(act.data()) |
967 tab = self.__closedTabsManager.getClosedTabAt(act.data()) |
959 |
968 |
960 self.newBrowser(tab.url.toString(), position=tab.position) |
969 self.newBrowser(tab.url.toString(), position=tab.position) |
961 |
970 |
962 def canRestoreClosedTab(self): |
971 def canRestoreClosedTab(self): |
993 |
1002 |
994 self.__closedTabsMenu.clear() |
1003 self.__closedTabsMenu.clear() |
995 index = 0 |
1004 index = 0 |
996 for tab in self.__closedTabsManager.allClosedTabs(): |
1005 for tab in self.__closedTabsManager.allClosedTabs(): |
997 title = fm.elidedText(tab.title, Qt.ElideRight, maxWidth) |
1006 title = fm.elidedText(tab.title, Qt.ElideRight, maxWidth) |
998 self.__closedTabsMenu.addAction( |
1007 act = self.__closedTabsMenu.addAction( |
999 self.__mainWindow.icon(tab.url), title, |
1008 self.__mainWindow.icon(tab.url), title) |
1000 self.restoreClosedTab).setData(index) |
1009 act.setData(index) |
|
1010 act.triggered.connect(lambda: self.restoreClosedTab(act)) |
1001 index += 1 |
1011 index += 1 |
1002 self.__closedTabsMenu.addSeparator() |
1012 self.__closedTabsMenu.addSeparator() |
1003 self.__closedTabsMenu.addAction( |
1013 self.__closedTabsMenu.addAction( |
1004 self.tr("Restore All Closed Tabs"), self.restoreAllClosedTabs) |
1014 self.tr("Restore All Closed Tabs"), self.restoreAllClosedTabs) |
1005 self.__closedTabsMenu.addAction( |
1015 self.__closedTabsMenu.addAction( |