25 QDialog, QSplitter, QApplication, QMenu, QVBoxLayout, QDockWidget, \ |
25 QDialog, QSplitter, QApplication, QMenu, QVBoxLayout, QDockWidget, \ |
26 QAction, QLabel |
26 QAction, QLabel |
27 from PyQt5.Qsci import QSCINTILLA_VERSION_STR |
27 from PyQt5.Qsci import QSCINTILLA_VERSION_STR |
28 from PyQt5.QtNetwork import QNetworkProxyFactory, QNetworkAccessManager, \ |
28 from PyQt5.QtNetwork import QNetworkProxyFactory, QNetworkAccessManager, \ |
29 QNetworkRequest, QNetworkReply |
29 QNetworkRequest, QNetworkReply |
|
30 try: |
|
31 from PyQt5 import QtWebKit # __IGNORE_WARNING__ |
|
32 WEBKIT_AVAILABLE = True |
|
33 except ImportError: |
|
34 WEBKIT_AVAILABLE = False |
30 |
35 |
31 from .Info import Version, BugAddress, Program, FeatureAddress |
36 from .Info import Version, BugAddress, Program, FeatureAddress |
32 from . import Config |
37 from . import Config |
33 |
38 |
34 from E5Gui.E5SingleApplication import E5SingleApplicationServer |
39 from E5Gui.E5SingleApplication import E5SingleApplicationServer |
455 self.toolGroups, self.currentToolGroup = Preferences.readToolGroups() |
460 self.toolGroups, self.currentToolGroup = Preferences.readToolGroups() |
456 self.toolProcs = [] |
461 self.toolProcs = [] |
457 self.__initExternalToolsActions() |
462 self.__initExternalToolsActions() |
458 |
463 |
459 # create a dummy help window for shortcuts handling |
464 # create a dummy help window for shortcuts handling |
460 from Helpviewer.HelpWindow import HelpWindow |
465 if WEBKIT_AVAILABLE: |
461 self.dummyHelpViewer = \ |
466 from Helpviewer.HelpWindow import HelpWindow |
462 HelpWindow(None, '.', None, 'help viewer', True, True) |
467 self.dummyHelpViewer = \ |
|
468 HelpWindow(None, '.', None, 'help viewer', True, True) |
463 |
469 |
464 # register all relevant objects |
470 # register all relevant objects |
465 splash.showMessage(self.tr("Registering Objects...")) |
471 splash.showMessage(self.tr("Registering Objects...")) |
466 e5App().registerObject("UserInterface", self) |
472 e5App().registerObject("UserInterface", self) |
467 e5App().registerObject("DebugUI", self.debuggerUI) |
473 e5App().registerObject("DebugUI", self.debuggerUI) |
472 e5App().registerObject("ProjectBrowser", self.projectBrowser) |
478 e5App().registerObject("ProjectBrowser", self.projectBrowser) |
473 e5App().registerObject("MultiProject", self.multiProject) |
479 e5App().registerObject("MultiProject", self.multiProject) |
474 e5App().registerObject("TaskViewer", self.taskViewer) |
480 e5App().registerObject("TaskViewer", self.taskViewer) |
475 e5App().registerObject("TemplateViewer", self.templateViewer) |
481 e5App().registerObject("TemplateViewer", self.templateViewer) |
476 e5App().registerObject("Shell", self.shell) |
482 e5App().registerObject("Shell", self.shell) |
477 e5App().registerObject("DummyHelpViewer", self.dummyHelpViewer) |
483 if WEBKIT_AVAILABLE: |
|
484 e5App().registerObject("DummyHelpViewer", self.dummyHelpViewer) |
478 e5App().registerObject("PluginManager", self.pluginManager) |
485 e5App().registerObject("PluginManager", self.pluginManager) |
479 e5App().registerObject("ToolbarManager", self.toolbarManager) |
486 e5App().registerObject("ToolbarManager", self.toolbarManager) |
480 e5App().registerObject("Cooperation", self.cooperation) |
487 e5App().registerObject("Cooperation", self.cooperation) |
481 e5App().registerObject("IRC", self.irc) |
488 e5App().registerObject("IRC", self.irc) |
482 e5App().registerObject("Symbols", self.symbolsViewer) |
489 e5App().registerObject("Symbols", self.symbolsViewer) |
1581 """ context help button in the titlebar.</p>""" |
1588 """ context help button in the titlebar.</p>""" |
1582 )) |
1589 )) |
1583 self.whatsThisAct.triggered.connect(self.__whatsThis) |
1590 self.whatsThisAct.triggered.connect(self.__whatsThis) |
1584 self.actions.append(self.whatsThisAct) |
1591 self.actions.append(self.whatsThisAct) |
1585 |
1592 |
1586 self.helpviewerAct = E5Action( |
1593 if WEBKIT_AVAILABLE: |
1587 self.tr('Helpviewer'), |
1594 self.helpviewerAct = E5Action( |
1588 UI.PixmapCache.getIcon("help.png"), |
1595 self.tr('Helpviewer'), |
1589 self.tr('&Helpviewer...'), |
1596 UI.PixmapCache.getIcon("help.png"), |
1590 QKeySequence(self.tr("F1")), |
1597 self.tr('&Helpviewer...'), |
1591 0, self, 'helpviewer') |
1598 QKeySequence(self.tr("F1")), |
1592 self.helpviewerAct.setStatusTip(self.tr( |
1599 0, self, 'helpviewer') |
1593 'Open the helpviewer window')) |
1600 self.helpviewerAct.setStatusTip(self.tr( |
1594 self.helpviewerAct.setWhatsThis(self.tr( |
1601 'Open the helpviewer window')) |
1595 """<b>Helpviewer</b>""" |
1602 self.helpviewerAct.setWhatsThis(self.tr( |
1596 """<p>Display the eric6 web browser. This window will show""" |
1603 """<b>Helpviewer</b>""" |
1597 """ HTML help files and help from Qt help collections. It has""" |
1604 """<p>Display the eric6 web browser. This window will show""" |
1598 """ the capability to navigate to links, set bookmarks, print""" |
1605 """ HTML help files and help from Qt help collections. It""" |
1599 """ the displayed help and some more features. You may use it to""" |
1606 """ has the capability to navigate to links, set bookmarks,""" |
1600 """ browse the internet as well</p><p>If called with a word""" |
1607 """ print the displayed help and some more features. You may""" |
1601 """ selected, this word is search in the Qt help collection.</p>""" |
1608 """ use it to browse the internet as well</p><p>If called""" |
1602 )) |
1609 """ with a word selected, this word is search in the Qt help""" |
1603 self.helpviewerAct.triggered.connect(self.__helpViewer) |
1610 """ collection.</p>""" |
1604 self.actions.append(self.helpviewerAct) |
1611 )) |
|
1612 self.helpviewerAct.triggered.connect(self.__helpViewer) |
|
1613 self.actions.append(self.helpviewerAct) |
|
1614 else: |
|
1615 self.helpviewerAct = None |
1605 |
1616 |
1606 self.__initQtDocActions() |
1617 self.__initQtDocActions() |
1607 self.__initPythonDocActions() |
1618 self.__initPythonDocActions() |
1608 self.__initEricDocAction() |
1619 self.__initEricDocAction() |
1609 self.__initPySideDocAction() |
1620 self.__initPySideDocAction() |
1891 """<p>Open a dialog with a simplified editor.</p>""" |
1902 """<p>Open a dialog with a simplified editor.</p>""" |
1892 )) |
1903 )) |
1893 self.miniEditorAct.triggered.connect(self.__openMiniEditor) |
1904 self.miniEditorAct.triggered.connect(self.__openMiniEditor) |
1894 self.actions.append(self.miniEditorAct) |
1905 self.actions.append(self.miniEditorAct) |
1895 |
1906 |
1896 self.webBrowserAct = E5Action( |
1907 if WEBKIT_AVAILABLE: |
1897 self.tr('eric6 Web Browser'), |
1908 self.webBrowserAct = E5Action( |
1898 UI.PixmapCache.getIcon("ericWeb.png"), |
1909 self.tr('eric6 Web Browser'), |
1899 self.tr('eric6 &Web Browser...'), |
1910 UI.PixmapCache.getIcon("ericWeb.png"), |
1900 0, 0, self, 'web_browser') |
1911 self.tr('eric6 &Web Browser...'), |
1901 self.webBrowserAct.setStatusTip(self.tr( |
1912 0, 0, self, 'web_browser') |
1902 'Start the eric6 Web Browser')) |
1913 self.webBrowserAct.setStatusTip(self.tr( |
1903 self.webBrowserAct.setWhatsThis(self.tr( |
1914 'Start the eric6 Web Browser')) |
1904 """<b>eric6 Web Browser</b>""" |
1915 self.webBrowserAct.setWhatsThis(self.tr( |
1905 """<p>Browse the Internet with the eric6 Web Browser.</p>""" |
1916 """<b>eric6 Web Browser</b>""" |
1906 )) |
1917 """<p>Browse the Internet with the eric6 Web Browser.</p>""" |
1907 self.webBrowserAct.triggered.connect(self.__startWebBrowser) |
1918 )) |
1908 self.actions.append(self.webBrowserAct) |
1919 self.webBrowserAct.triggered.connect(self.__startWebBrowser) |
|
1920 self.actions.append(self.webBrowserAct) |
|
1921 else: |
|
1922 self.webBrowserAct = None |
1909 |
1923 |
1910 self.iconEditorAct = E5Action( |
1924 self.iconEditorAct = E5Action( |
1911 self.tr('Icon Editor'), |
1925 self.tr('Icon Editor'), |
1912 UI.PixmapCache.getIcon("iconEditor.png"), |
1926 UI.PixmapCache.getIcon("iconEditor.png"), |
1913 self.tr('&Icon Editor...'), |
1927 self.tr('&Icon Editor...'), |
2517 mb.addSeparator() |
2531 mb.addSeparator() |
2518 |
2532 |
2519 self.__menus["help"] = QMenu(self.tr('&Help'), self) |
2533 self.__menus["help"] = QMenu(self.tr('&Help'), self) |
2520 mb.addMenu(self.__menus["help"]) |
2534 mb.addMenu(self.__menus["help"]) |
2521 self.__menus["help"].setTearOffEnabled(True) |
2535 self.__menus["help"].setTearOffEnabled(True) |
2522 self.__menus["help"].addAction(self.helpviewerAct) |
2536 if self.helpviewerAct: |
2523 self.__menus["help"].addSeparator() |
2537 self.__menus["help"].addAction(self.helpviewerAct) |
|
2538 self.__menus["help"].addSeparator() |
2524 self.__menus["help"].addAction(self.ericDocAct) |
2539 self.__menus["help"].addAction(self.ericDocAct) |
2525 self.__menus["help"].addAction(self.pythonDocAct) |
2540 self.__menus["help"].addAction(self.pythonDocAct) |
2526 self.__menus["help"].addAction(self.python2DocAct) |
2541 self.__menus["help"].addAction(self.python2DocAct) |
2527 self.__menus["help"].addAction(self.qt4DocAct) |
2542 self.__menus["help"].addAction(self.qt4DocAct) |
2528 self.__menus["help"].addAction(self.qt5DocAct) |
2543 self.__menus["help"].addAction(self.qt5DocAct) |
2626 toolstb.addAction(self.sqlBrowserAct) |
2641 toolstb.addAction(self.sqlBrowserAct) |
2627 toolstb.addSeparator() |
2642 toolstb.addSeparator() |
2628 toolstb.addAction(self.miniEditorAct) |
2643 toolstb.addAction(self.miniEditorAct) |
2629 toolstb.addAction(self.iconEditorAct) |
2644 toolstb.addAction(self.iconEditorAct) |
2630 toolstb.addAction(self.snapshotAct) |
2645 toolstb.addAction(self.snapshotAct) |
2631 toolstb.addSeparator() |
2646 if self.webBrowserAct: |
2632 toolstb.addAction(self.webBrowserAct) |
2647 toolstb.addSeparator() |
|
2648 toolstb.addAction(self.webBrowserAct) |
2633 self.toolbarManager.addToolBar(toolstb, toolstb.windowTitle()) |
2649 self.toolbarManager.addToolBar(toolstb, toolstb.windowTitle()) |
2634 |
2650 |
2635 # setup the settings toolbar |
2651 # setup the settings toolbar |
2636 settingstb.addAction(self.prefAct) |
2652 settingstb.addAction(self.prefAct) |
2637 settingstb.addAction(self.configViewProfilesAct) |
2653 settingstb.addAction(self.configViewProfilesAct) |
2645 self.importShortcutsAct, settingstb.windowTitle()) |
2661 self.importShortcutsAct, settingstb.windowTitle()) |
2646 |
2662 |
2647 # setup the help toolbar |
2663 # setup the help toolbar |
2648 helptb.addAction(self.whatsThisAct) |
2664 helptb.addAction(self.whatsThisAct) |
2649 self.toolbarManager.addToolBar(helptb, helptb.windowTitle()) |
2665 self.toolbarManager.addToolBar(helptb, helptb.windowTitle()) |
2650 self.toolbarManager.addAction(self.helpviewerAct, helptb.windowTitle()) |
2666 if self.helpviewerAct: |
|
2667 self.toolbarManager.addAction(self.helpviewerAct, |
|
2668 helptb.windowTitle()) |
2651 |
2669 |
2652 # setup the view profiles toolbar |
2670 # setup the view profiles toolbar |
2653 profilestb.addActions(self.viewProfileActGrp.actions()) |
2671 profilestb.addActions(self.viewProfileActGrp.actions()) |
2654 self.toolbarManager.addToolBar(profilestb, profilestb.windowTitle()) |
2672 self.toolbarManager.addToolBar(profilestb, profilestb.windowTitle()) |
2655 |
2673 |
3320 btMenu.addAction(self.compareAct) |
3338 btMenu.addAction(self.compareAct) |
3321 btMenu.addAction(self.sqlBrowserAct) |
3339 btMenu.addAction(self.sqlBrowserAct) |
3322 btMenu.addAction(self.miniEditorAct) |
3340 btMenu.addAction(self.miniEditorAct) |
3323 btMenu.addAction(self.iconEditorAct) |
3341 btMenu.addAction(self.iconEditorAct) |
3324 btMenu.addAction(self.snapshotAct) |
3342 btMenu.addAction(self.snapshotAct) |
3325 btMenu.addAction(self.webBrowserAct) |
3343 if self.webBrowserAct: |
|
3344 btMenu.addAction(self.webBrowserAct) |
3326 |
3345 |
3327 ptMenu = QMenu(self.tr("&Plugin Tools"), self) |
3346 ptMenu = QMenu(self.tr("&Plugin Tools"), self) |
3328 ptMenu.aboutToShow.connect(self.__showPluginToolsMenu) |
3347 ptMenu.aboutToShow.connect(self.__showPluginToolsMenu) |
3329 |
3348 |
3330 utMenu = QMenu(self.tr("&User Tools"), self) |
3349 utMenu = QMenu(self.tr("&User Tools"), self) |
4790 else: |
4809 else: |
4791 hvType = Preferences.getHelp("HelpViewerType") |
4810 hvType = Preferences.getHelp("HelpViewerType") |
4792 if hvType == 1: |
4811 if hvType == 1: |
4793 self.launchHelpViewer(home) |
4812 self.launchHelpViewer(home) |
4794 elif hvType == 2: |
4813 elif hvType == 2: |
4795 self.__assistant(home, version=4) |
4814 if home.startswith("qthelp://"): |
4796 elif hvType == 3: |
4815 self.__assistant(home, version=4) |
|
4816 else: |
|
4817 self.__webBrowser(home) |
|
4818 elif hvType in 3: |
4797 self.__webBrowser(home) |
4819 self.__webBrowser(home) |
4798 else: |
4820 else: |
4799 self.__customViewer(home) |
4821 self.__customViewer(home) |
4800 |
4822 |
4801 def __showPython2Doc(self): |
4823 def __showPython2Doc(self): |
5135 """ |
5175 """ |
5136 if len(home) > 0: |
5176 if len(home) > 0: |
5137 homeUrl = QUrl(home) |
5177 homeUrl = QUrl(home) |
5138 if not homeUrl.scheme(): |
5178 if not homeUrl.scheme(): |
5139 home = QUrl.fromLocalFile(home).toString() |
5179 home = QUrl.fromLocalFile(home).toString() |
5140 if not (useSingle or Preferences.getHelp("SingleHelpWindow")) or \ |
5180 |
5141 self.helpWindow is None: |
5181 if WEBKIT_AVAILABLE: |
5142 from Helpviewer.HelpWindow import HelpWindow |
5182 if not (useSingle or Preferences.getHelp("SingleHelpWindow")) or \ |
5143 help = HelpWindow(home, '.', None, 'help viewer', True, |
5183 self.helpWindow is None: |
5144 searchWord=searchWord) |
5184 from Helpviewer.HelpWindow import HelpWindow |
5145 |
5185 help = HelpWindow(home, '.', None, 'help viewer', True, |
5146 if QApplication.desktop().width() > 400 and \ |
5186 searchWord=searchWord) |
5147 QApplication.desktop().height() > 500: |
5187 |
5148 help.show() |
5188 if QApplication.desktop().width() > 400 and \ |
|
5189 QApplication.desktop().height() > 500: |
|
5190 help.show() |
|
5191 else: |
|
5192 help.showMaximized() |
|
5193 |
|
5194 if useSingle or Preferences.getHelp("SingleHelpWindow"): |
|
5195 self.helpWindow = help |
|
5196 self.helpWindow.helpClosed.connect(self.__helpClosed) |
|
5197 self.preferencesChanged.connect( |
|
5198 self.helpWindow.preferencesChanged) |
|
5199 self.masterPasswordChanged.connect( |
|
5200 self.helpWindow.masterPasswordChanged) |
|
5201 elif searchWord is not None: |
|
5202 self.helpWindow.search(searchWord) |
|
5203 self.helpWindow.raise_() |
5149 else: |
5204 else: |
5150 help.showMaximized() |
5205 self.helpWindow.newTab(home) |
5151 |
5206 self.helpWindow.raise_() |
5152 if useSingle or Preferences.getHelp("SingleHelpWindow"): |
5207 else: |
5153 self.helpWindow = help |
5208 self.__webBrowser(home) |
5154 self.helpWindow.helpClosed.connect(self.__helpClosed) |
|
5155 self.preferencesChanged.connect( |
|
5156 self.helpWindow.preferencesChanged) |
|
5157 self.masterPasswordChanged.connect( |
|
5158 self.helpWindow.masterPasswordChanged) |
|
5159 elif searchWord is not None: |
|
5160 self.helpWindow.search(searchWord) |
|
5161 self.helpWindow.raise_() |
|
5162 else: |
|
5163 self.helpWindow.newTab(home) |
|
5164 self.helpWindow.raise_() |
|
5165 |
5209 |
5166 def __helpClosed(self): |
5210 def __helpClosed(self): |
5167 """ |
5211 """ |
5168 Private slot to handle the helpClosed signal of the help window. |
5212 Private slot to handle the helpClosed signal of the help window. |
5169 """ |
5213 """ |
5203 |
5247 |
5204 @keyparam preview flag indicating to get a help window for preview |
5248 @keyparam preview flag indicating to get a help window for preview |
5205 (boolean) |
5249 (boolean) |
5206 @return reference to the help window instance (HelpWindow) |
5250 @return reference to the help window instance (HelpWindow) |
5207 """ |
5251 """ |
5208 if self.helpWindow is None: |
5252 if WEBKIT_AVAILABLE: |
5209 self.launchHelpViewer("", useSingle=True) |
5253 if self.helpWindow is None: |
5210 self.helpWindow.raise_() |
5254 self.launchHelpViewer("", useSingle=True) |
5211 return self.helpWindow |
5255 self.helpWindow.raise_() |
|
5256 return self.helpWindow |
|
5257 else: |
|
5258 return None |
5212 |
5259 |
5213 @pyqtSlot() |
5260 @pyqtSlot() |
5214 @pyqtSlot(str) |
5261 @pyqtSlot(str) |
5215 def showPreferences(self, pageName=None): |
5262 def showPreferences(self, pageName=None): |
5216 """ |
5263 """ |