13 from PyQt4.QtGui import QWidget, QHBoxLayout, QMenu, QToolButton, QPrinter, \ |
13 from PyQt4.QtGui import QWidget, QHBoxLayout, QMenu, QToolButton, QPrinter, \ |
14 QPrintDialog, QDialog, QIcon |
14 QPrintDialog, QDialog, QIcon |
15 |
15 |
16 from E5Gui.E5TabWidget import E5TabWidget |
16 from E5Gui.E5TabWidget import E5TabWidget |
17 from E5Gui import E5MessageBox |
17 from E5Gui import E5MessageBox |
|
18 from E5Gui.E5Application import e5App |
18 |
19 |
19 from .HelpTabBar import HelpTabBar |
20 from .HelpTabBar import HelpTabBar |
20 from .HelpBrowserWV import HelpBrowser |
21 from .HelpBrowserWV import HelpBrowser |
21 import Helpviewer |
22 import Helpviewer |
22 |
23 |
|
24 from .History.HistoryCompleter import HistoryCompletionModel, HistoryCompleter |
|
25 |
|
26 from .UrlBar.StackedUrlBar import StackedUrlBar |
|
27 from .UrlBar.UrlBar import UrlBar |
|
28 |
23 import UI.PixmapCache |
29 import UI.PixmapCache |
24 |
30 |
|
31 import Utilities |
25 import Preferences |
32 import Preferences |
26 |
33 |
27 from eric5config import getConfig |
34 from eric5config import getConfig |
28 |
35 |
29 class HelpTabWidget(E5TabWidget): |
36 class HelpTabWidget(E5TabWidget): |
39 Constructor |
46 Constructor |
40 |
47 |
41 @param parent reference to the parent widget (QWidget) |
48 @param parent reference to the parent widget (QWidget) |
42 """ |
49 """ |
43 E5TabWidget.__init__(self, parent, dnd = True) |
50 E5TabWidget.__init__(self, parent, dnd = True) |
44 self.setCustomTabBar(True, HelpTabBar(self)) |
51 self.__tabBar = HelpTabBar(self) |
|
52 self.setCustomTabBar(True, self.__tabBar) |
45 |
53 |
46 self.__mainWindow = parent |
54 self.__mainWindow = parent |
47 |
55 |
|
56 self.__stackedUrlBar = StackedUrlBar(self) |
|
57 self.__tabBar.tabMoved.connect(self.__stackedUrlBar.moveBar) |
|
58 |
48 self.__tabContextMenuIndex = -1 |
59 self.__tabContextMenuIndex = -1 |
49 ## self.currentChanged[int].connect(self.__currentChanged) |
60 self.currentChanged[int].connect(self.__currentChanged) |
50 self.setTabContextMenuPolicy(Qt.CustomContextMenu) |
61 self.setTabContextMenuPolicy(Qt.CustomContextMenu) |
51 self.customTabContextMenuRequested.connect(self.__showContextMenu) |
62 self.customTabContextMenuRequested.connect(self.__showContextMenu) |
52 |
63 |
53 self.__rightCornerWidget = QWidget(self) |
64 self.__rightCornerWidget = QWidget(self) |
54 self.__rightCornerWidgetLayout = QHBoxLayout(self.__rightCornerWidget) |
65 self.__rightCornerWidgetLayout = QHBoxLayout(self.__rightCornerWidget) |
87 self.__newTabButton.setToolTip(self.trUtf8("Open a new help window tab")) |
98 self.__newTabButton.setToolTip(self.trUtf8("Open a new help window tab")) |
88 self.setCornerWidget(self.__newTabButton, Qt.TopLeftCorner) |
99 self.setCornerWidget(self.__newTabButton, Qt.TopLeftCorner) |
89 self.__newTabButton.clicked[bool].connect(self.newBrowser) |
100 self.__newTabButton.clicked[bool].connect(self.newBrowser) |
90 |
101 |
91 self.__initTabContextMenu() |
102 self.__initTabContextMenu() |
|
103 |
|
104 self.__historyCompleter = None |
92 |
105 |
93 def __initTabContextMenu(self): |
106 def __initTabContextMenu(self): |
94 """ |
107 """ |
95 Private mezhod to create the tab context menu. |
108 Private method to create the tab context menu. |
96 """ |
109 """ |
97 self.__tabContextMenu = QMenu(self) |
110 self.__tabContextMenu = QMenu(self) |
98 self.tabContextNewAct = \ |
111 self.tabContextNewAct = \ |
99 self.__tabContextMenu.addAction(UI.PixmapCache.getIcon("tabNew.png"), |
112 self.__tabContextMenu.addAction(UI.PixmapCache.getIcon("tabNew.png"), |
100 self.trUtf8('New Tab'), self.newBrowser) |
113 self.trUtf8('New Tab'), self.newBrowser) |
216 elif isinstance(link, QUrl): |
229 elif isinstance(link, QUrl): |
217 linkName = link.toString() |
230 linkName = link.toString() |
218 else: |
231 else: |
219 linkName = link |
232 linkName = link |
220 |
233 |
|
234 urlbar = UrlBar(self.__mainWindow, self) |
|
235 if self.__historyCompleter is None: |
|
236 self.__historyCompletionModel = HistoryCompletionModel(self) |
|
237 self.__historyCompletionModel.setSourceModel( |
|
238 Helpviewer.HelpWindow.HelpWindow.historyManager().historyFilterModel()) |
|
239 self.__historyCompleter = HistoryCompleter( |
|
240 self.__historyCompletionModel, self) |
|
241 self.__historyCompleter.activated[str].connect(self.__pathSelected) |
|
242 urlbar.setCompleter(self.__historyCompleter) |
|
243 urlbar.returnPressed.connect(self.__lineEditReturnPressed) |
|
244 self.__stackedUrlBar.addWidget(urlbar) |
|
245 |
221 browser = HelpBrowser(self.__mainWindow, self) |
246 browser = HelpBrowser(self.__mainWindow, self) |
|
247 urlbar.setBrowser(browser) |
222 |
248 |
223 browser.sourceChanged.connect(self.__sourceChanged) |
249 browser.sourceChanged.connect(self.__sourceChanged) |
224 browser.titleChanged.connect(self.__titleChanged) |
250 browser.titleChanged.connect(self.__titleChanged) |
225 browser.highlighted.connect(self.showMessage) |
251 browser.highlighted.connect(self.showMessage) |
226 browser.backwardAvailable.connect(self.__mainWindow.setBackwardAvailable) |
252 browser.backwardAvailable.connect(self.__mainWindow.setBackwardAvailable) |
305 """ |
331 """ |
306 Public slot to close a browser based on it's index. |
332 Public slot to close a browser based on it's index. |
307 |
333 |
308 @param index index of browser to close (integer) |
334 @param index index of browser to close (integer) |
309 """ |
335 """ |
|
336 urlbar = self.__stackedUrlBar.widget(index) |
|
337 self.__stackedUrlBar.removeWidget(urlbar) |
|
338 del urlbar |
|
339 |
310 browser = self.widget(index) |
340 browser = self.widget(index) |
311 self.removeTab(index) |
341 self.removeTab(index) |
312 del browser |
342 del browser |
|
343 |
313 if self.count() == 0: |
344 if self.count() == 0: |
314 self.newBrowser() |
345 self.newBrowser() |
315 else: |
346 else: |
316 self.currentChanged[int].emit(self.currentIndex()) |
347 self.currentChanged[int].emit(self.currentIndex()) |
317 |
348 |
512 """ |
543 """ |
513 Public slot to handle a change of preferences. |
544 Public slot to handle a change of preferences. |
514 """ |
545 """ |
515 for browser in self.browsers(): |
546 for browser in self.browsers(): |
516 browser.preferencesChanged() |
547 browser.preferencesChanged() |
|
548 |
|
549 for urlbar in self.__stackedUrlBar.urlBars(): |
|
550 urlbar.preferencesChanged() |
517 |
551 |
518 def __loadStarted(self): |
552 def __loadStarted(self): |
519 """ |
553 """ |
520 Private method to handle the loadStarted signal. |
554 Private method to handle the loadStarted signal. |
521 """ |
555 """ |
556 Private slot to handle the icon change. |
590 Private slot to handle the icon change. |
557 """ |
591 """ |
558 browser = self.sender() |
592 browser = self.sender() |
559 |
593 |
560 if browser is not None: |
594 if browser is not None: |
561 self.__mainWindow.iconChanged(browser.icon()) |
|
562 self.setTabIcon(self.indexOf(browser), browser.icon()) |
595 self.setTabIcon(self.indexOf(browser), browser.icon()) |
563 Helpviewer.HelpWindow.HelpWindow.bookmarksManager().iconChanged(browser.url()) |
596 Helpviewer.HelpWindow.HelpWindow.bookmarksManager().iconChanged(browser.url()) |
564 |
597 |
565 def getSourceFileList(self): |
598 def getSourceFileList(self): |
566 """ |
599 """ |
607 if mb.clickedButton() == closeTabButton: |
640 if mb.clickedButton() == closeTabButton: |
608 self.closeBrowser() |
641 self.closeBrowser() |
609 return False |
642 return False |
610 |
643 |
611 return True |
644 return True |
|
645 |
|
646 def stackedUrlBar(self): |
|
647 """ |
|
648 Public method to get a reference to the stacked url bar. |
|
649 |
|
650 @return reference to the stacked url bar (StackedUrlBar) |
|
651 """ |
|
652 return self.__stackedUrlBar |
|
653 |
|
654 def currentUrlBar(self): |
|
655 """ |
|
656 Public method to get a reference to the current url bar. |
|
657 |
|
658 @return reference to the current url bar (UrlBar) |
|
659 """ |
|
660 return self.__stackedUrlBar.currentWidget() |
|
661 |
|
662 def __lineEditReturnPressed(self): |
|
663 """ |
|
664 Private slot to handle the entering of an URL. |
|
665 """ |
|
666 edit = self.sender() |
|
667 if e5App().keyboardModifiers() == Qt.AltModifier: |
|
668 self.newBrowser(edit.text()) |
|
669 else: |
|
670 self.currentBrowser().setSource(QUrl(edit.text())) |
|
671 self.currentBrowser().setFocus() |
|
672 |
|
673 def __pathSelected(self, path): |
|
674 """ |
|
675 Private slot called when a URL is selected from the completer. |
|
676 |
|
677 @param path path to be shown (string) |
|
678 """ |
|
679 url = self.__guessUrlFromPath(path) |
|
680 self.currentBrowser().setSource(url) |
|
681 |
|
682 def __guessUrlFromPath(self, path): |
|
683 """ |
|
684 Private method to guess an URL given a path string. |
|
685 |
|
686 @param path path string to guess an URL for (string) |
|
687 @return guessed URL (QUrl) |
|
688 """ |
|
689 manager = self.__mainWindow.openSearchManager() |
|
690 path = Utilities.fromNativeSeparators(path) |
|
691 url = manager.convertKeywordSearchToUrl(path) |
|
692 if url.isValid(): |
|
693 return url |
|
694 |
|
695 try: |
|
696 return QUrl.fromUserInput(path) |
|
697 except AttributeError: |
|
698 return QUrl(path) |
|
699 |
|
700 def __currentChanged(self, index): |
|
701 """ |
|
702 Private slot to handle an index change. |
|
703 |
|
704 @param index new index (integer) |
|
705 """ |
|
706 self.__stackedUrlBar.setCurrentIndex(index) |
|
707 |
|
708 browser = self.browserAt(index) |
|
709 if browser.url() == "" and browser.hasFocus(): |
|
710 self.__stackedUrlBar.currentWidget.setFocus() |
|
711 elif browser.url() != "": |
|
712 browser.setFocus() |