278 |
278 |
279 # Generate the redirection helpers |
279 # Generate the redirection helpers |
280 self.stdout = Redirector(False) |
280 self.stdout = Redirector(False) |
281 self.stderr = Redirector(True) |
281 self.stderr = Redirector(True) |
282 |
282 |
283 # set a few dialog members for dialogs created on demand |
283 # set a few dialog members for non-modal dialogs created on demand |
284 self.programsDialog = None |
284 self.programsDialog = None |
285 self.shortcutsDialog = None |
285 self.shortcutsDialog = None |
286 self.unittestDialog = None |
286 self.unittestDialog = None |
287 self.findFileNameDialog = None |
287 self.findFileNameDialog = None |
288 self.diffDlg = None |
288 self.diffDlg = None |
289 self.compareDlg = None |
289 self.compareDlg = None |
290 self.findFilesDialog = None |
290 self.findFilesDialog = None |
291 self.replaceFilesDialog = None |
291 self.replaceFilesDialog = None |
292 self.__notification = None |
292 self.__notification = None |
293 self.__readingSession = False |
293 self.__readingSession = False |
|
294 self.__versionsDialog = None |
294 |
295 |
295 # now setup the connections |
296 # now setup the connections |
296 splash.showMessage(self.tr("Setting up connections...")) |
297 splash.showMessage(self.tr("Setting up connections...")) |
297 self.browser.sourceFile[str].connect( |
298 self.browser.sourceFile[str].connect( |
298 self.viewmanager.openSourceFile) |
299 self.viewmanager.openSourceFile) |
538 self.dummyHelpViewer = \ |
539 self.dummyHelpViewer = \ |
539 HelpWindow(None, '.', None, 'help viewer', True, True) |
540 HelpWindow(None, '.', None, 'help viewer', True, True) |
540 else: |
541 else: |
541 self.dummyHelpViewer = None |
542 self.dummyHelpViewer = None |
542 |
543 |
|
544 # redirect handling of http and https URLs to ourselves |
|
545 if WEBENGINE_AVAILABLE or WEBKIT_AVAILABLE: |
|
546 QDesktopServices.setUrlHandler("http", self.handleUrl) |
|
547 QDesktopServices.setUrlHandler("https", self.handleUrl) |
|
548 |
543 # register all relevant objects |
549 # register all relevant objects |
544 splash.showMessage(self.tr("Registering Objects...")) |
550 splash.showMessage(self.tr("Registering Objects...")) |
545 e5App().registerObject("UserInterface", self) |
551 e5App().registerObject("UserInterface", self) |
546 e5App().registerObject("DebugUI", self.debuggerUI) |
552 e5App().registerObject("DebugUI", self.debuggerUI) |
547 e5App().registerObject("DebugServer", debugServer) |
553 e5App().registerObject("DebugServer", debugServer) |
628 # restore toolbar manager state |
634 # restore toolbar manager state |
629 splash.showMessage(self.tr("Restoring Toolbarmanager...")) |
635 splash.showMessage(self.tr("Restoring Toolbarmanager...")) |
630 self.toolbarManager.restoreState( |
636 self.toolbarManager.restoreState( |
631 Preferences.getUI("ToolbarManagerState")) |
637 Preferences.getUI("ToolbarManagerState")) |
632 |
638 |
|
639 # finalize the initialization of the code documentation viewer |
|
640 self.codeDocumentationViewer.finalizeSetup() |
|
641 |
633 # now activate the initial view profile |
642 # now activate the initial view profile |
634 splash.showMessage(self.tr("Setting View Profile...")) |
643 splash.showMessage(self.tr("Setting View Profile...")) |
635 self.__setEditProfile() |
644 self.__setEditProfile() |
636 |
645 |
637 # now read the saved tasks |
646 # now read the saved tasks |
1767 self.helpviewerAct = None |
1773 self.helpviewerAct = None |
1768 |
1774 |
1769 self.__initQtDocActions() |
1775 self.__initQtDocActions() |
1770 self.__initPythonDocActions() |
1776 self.__initPythonDocActions() |
1771 self.__initEricDocAction() |
1777 self.__initEricDocAction() |
1772 self.__initPySideDocAction() |
1778 self.__initPySideDocActions() |
1773 |
1779 |
1774 self.versionAct = E5Action( |
1780 self.versionAct = E5Action( |
1775 self.tr('Show Versions'), |
1781 self.tr('Show Versions'), |
1776 self.tr('Show &Versions'), |
1782 self.tr('Show &Versions'), |
1777 0, 0, self, 'show_versions') |
1783 0, 0, self, 'show_versions') |
2430 self.qt4DocAct.setStatusTip(self.tr('Open Qt4 Documentation')) |
2436 self.qt4DocAct.setStatusTip(self.tr('Open Qt4 Documentation')) |
2431 self.qt4DocAct.setWhatsThis(self.tr( |
2437 self.qt4DocAct.setWhatsThis(self.tr( |
2432 """<b>Qt4 Documentation</b>""" |
2438 """<b>Qt4 Documentation</b>""" |
2433 """<p>Display the Qt4 Documentation. Dependent upon your""" |
2439 """<p>Display the Qt4 Documentation. Dependent upon your""" |
2434 """ settings, this will either show the help in Eric's internal""" |
2440 """ settings, this will either show the help in Eric's internal""" |
2435 """ help viewer, or execute a web browser or Qt Assistant. </p>""" |
2441 """ help viewer/web browser, or execute a web browser or Qt""" |
|
2442 """ Assistant. </p>""" |
2436 )) |
2443 )) |
2437 self.qt4DocAct.triggered.connect(self.__showQt4Doc) |
2444 self.qt4DocAct.triggered.connect(self.__showQt4Doc) |
2438 self.actions.append(self.qt4DocAct) |
2445 self.actions.append(self.qt4DocAct) |
2439 |
2446 |
2440 self.qt5DocAct = E5Action( |
2447 self.qt5DocAct = E5Action( |
2444 self.qt5DocAct.setStatusTip(self.tr('Open Qt5 Documentation')) |
2451 self.qt5DocAct.setStatusTip(self.tr('Open Qt5 Documentation')) |
2445 self.qt5DocAct.setWhatsThis(self.tr( |
2452 self.qt5DocAct.setWhatsThis(self.tr( |
2446 """<b>Qt5 Documentation</b>""" |
2453 """<b>Qt5 Documentation</b>""" |
2447 """<p>Display the Qt5 Documentation. Dependent upon your""" |
2454 """<p>Display the Qt5 Documentation. Dependent upon your""" |
2448 """ settings, this will either show the help in Eric's internal""" |
2455 """ settings, this will either show the help in Eric's internal""" |
2449 """ help viewer, or execute a web browser or Qt Assistant. </p>""" |
2456 """ help viewer/web browser, or execute a web browser or Qt""" |
|
2457 """ Assistant. </p>""" |
2450 )) |
2458 )) |
2451 self.qt5DocAct.triggered.connect(self.__showQt5Doc) |
2459 self.qt5DocAct.triggered.connect(self.__showQt5Doc) |
2452 self.actions.append(self.qt5DocAct) |
2460 self.actions.append(self.qt5DocAct) |
2453 |
2461 |
2454 try: |
2462 try: |
2460 self.pyqt4DocAct.setStatusTip(self.tr('Open PyQt4 Documentation')) |
2468 self.pyqt4DocAct.setStatusTip(self.tr('Open PyQt4 Documentation')) |
2461 self.pyqt4DocAct.setWhatsThis(self.tr( |
2469 self.pyqt4DocAct.setWhatsThis(self.tr( |
2462 """<b>PyQt4 Documentation</b>""" |
2470 """<b>PyQt4 Documentation</b>""" |
2463 """<p>Display the PyQt4 Documentation. Dependent upon your""" |
2471 """<p>Display the PyQt4 Documentation. Dependent upon your""" |
2464 """ settings, this will either show the help in Eric's""" |
2472 """ settings, this will either show the help in Eric's""" |
2465 """ internal help viewer, or execute a web browser or""" |
2473 """ internal help viewer/web browser, or execute a web""" |
2466 """ Qt Assistant. </p>""" |
2474 """ browser or Qt Assistant. </p>""" |
2467 )) |
2475 )) |
2468 self.pyqt4DocAct.triggered.connect(self.__showPyQt4Doc) |
2476 self.pyqt4DocAct.triggered.connect(self.__showPyQt4Doc) |
2469 self.actions.append(self.pyqt4DocAct) |
2477 self.actions.append(self.pyqt4DocAct) |
2470 except ImportError: |
2478 except ImportError: |
2471 self.pyqt4DocAct = None |
2479 self.pyqt4DocAct = None |
2480 'Open PyQt5 Documentation')) |
2488 'Open PyQt5 Documentation')) |
2481 self.pyqt5DocAct.setWhatsThis(self.tr( |
2489 self.pyqt5DocAct.setWhatsThis(self.tr( |
2482 """<b>PyQt5 Documentation</b>""" |
2490 """<b>PyQt5 Documentation</b>""" |
2483 """<p>Display the PyQt5 Documentation. Dependent upon your""" |
2491 """<p>Display the PyQt5 Documentation. Dependent upon your""" |
2484 """ settings, this will either show the help in Eric's""" |
2492 """ settings, this will either show the help in Eric's""" |
2485 """ internal help viewer, or execute a web browser or""" |
2493 """ internal help viewer/web browser, or execute a web""" |
2486 """ Qt Assistant. </p>""" |
2494 """ browser or Qt Assistant. </p>""" |
2487 )) |
2495 )) |
2488 self.pyqt5DocAct.triggered.connect(self.__showPyQt5Doc) |
2496 self.pyqt5DocAct.triggered.connect(self.__showPyQt5Doc) |
2489 self.actions.append(self.pyqt5DocAct) |
2497 self.actions.append(self.pyqt5DocAct) |
2490 except ImportError: |
2498 except ImportError: |
2491 self.pyqt5DocAct = None |
2499 self.pyqt5DocAct = None |
2550 """ the eric6 installation directory.</p>""" |
2558 """ the eric6 installation directory.</p>""" |
2551 )) |
2559 )) |
2552 self.ericDocAct.triggered.connect(self.__showEricDoc) |
2560 self.ericDocAct.triggered.connect(self.__showEricDoc) |
2553 self.actions.append(self.ericDocAct) |
2561 self.actions.append(self.ericDocAct) |
2554 |
2562 |
2555 def __initPySideDocAction(self): |
2563 def __initPySideDocActions(self): |
2556 """ |
2564 """ |
2557 Private slot to initialize the action to show the PySide documentation. |
2565 Private slot to initialize the actions to show the PySide |
2558 """ |
2566 documentation. |
2559 pyside2, pyside3 = Utilities.checkPyside() |
2567 """ |
2560 if pyside2 or pyside3: |
2568 pyside_py2, pyside_py3 = Utilities.checkPyside("1") |
|
2569 if pyside_py2 or pyside_py3: |
2561 self.pysideDocAct = E5Action( |
2570 self.pysideDocAct = E5Action( |
2562 self.tr('PySide Documentation'), |
2571 self.tr('PySide Documentation'), |
2563 self.tr('Py&Side Documentation'), |
2572 self.tr('Py&Side Documentation'), |
2564 0, 0, self, 'pyside_documentation') |
2573 0, 0, self, 'pyside_documentation') |
2565 self.pysideDocAct.setStatusTip(self.tr( |
2574 self.pysideDocAct.setStatusTip(self.tr( |
2566 'Open PySide Documentation')) |
2575 'Open PySide Documentation')) |
2567 self.pysideDocAct.setWhatsThis(self.tr( |
2576 self.pysideDocAct.setWhatsThis(self.tr( |
2568 """<b>PySide Documentation</b>""" |
2577 """<b>PySide Documentation</b>""" |
2569 """<p>Display the PySide Documentation. Dependent upon your""" |
2578 """<p>Display the PySide Documentation. Dependent upon your""" |
2570 """ settings, this will either show the help in Eric's""" |
2579 """ settings, this will either show the help in Eric's""" |
2571 """ internal help viewer, or execute a web browser or""" |
2580 """ internal help viewer/web browser, or execute a web""" |
2572 """ Qt Assistant. </p>""" |
2581 """ browser or Qt Assistant. </p>""" |
2573 )) |
2582 )) |
2574 self.pysideDocAct.triggered.connect(self.__showPySideDoc) |
2583 self.pysideDocAct.triggered.connect( |
|
2584 lambda: self.__showPySideDoc("1")) |
2575 self.actions.append(self.pysideDocAct) |
2585 self.actions.append(self.pysideDocAct) |
2576 else: |
2586 else: |
2577 self.pysideDocAct = None |
2587 self.pysideDocAct = None |
2578 |
2588 |
|
2589 pyside2_py2, pyside2_py3 = Utilities.checkPyside("2") |
|
2590 if pyside2_py2 or pyside2_py3: |
|
2591 self.pyside2DocAct = E5Action( |
|
2592 self.tr('PySide2 Documentation'), |
|
2593 self.tr('PySide&2 Documentation'), |
|
2594 0, 0, self, 'pyside2_documentation') |
|
2595 self.pyside2DocAct.setStatusTip(self.tr( |
|
2596 'Open PySide2 Documentation')) |
|
2597 self.pyside2DocAct.setWhatsThis(self.tr( |
|
2598 """<b>PySide2 Documentation</b>""" |
|
2599 """<p>Display the PySide2 Documentation. Dependent upon your""" |
|
2600 """ settings, this will either show the help in Eric's""" |
|
2601 """ internal help viewer/web browser, or execute a web""" |
|
2602 """ browser or Qt Assistant. </p>""" |
|
2603 )) |
|
2604 self.pyside2DocAct.triggered.connect( |
|
2605 lambda: self.__showPySideDoc("2")) |
|
2606 self.actions.append(self.pyside2DocAct) |
|
2607 else: |
|
2608 self.pyside2DocAct = None |
|
2609 |
2579 def __initMenus(self): |
2610 def __initMenus(self): |
2580 """ |
2611 """ |
2581 Private slot to create the menus. |
2612 Private slot to create the menus. |
2582 """ |
2613 """ |
2583 self.__menus = {} |
2614 self.__menus = {} |
2737 self.__menus["help"].addAction(self.pyqt4DocAct) |
2768 self.__menus["help"].addAction(self.pyqt4DocAct) |
2738 if self.pyqt5DocAct is not None: |
2769 if self.pyqt5DocAct is not None: |
2739 self.__menus["help"].addAction(self.pyqt5DocAct) |
2770 self.__menus["help"].addAction(self.pyqt5DocAct) |
2740 if self.pysideDocAct is not None: |
2771 if self.pysideDocAct is not None: |
2741 self.__menus["help"].addAction(self.pysideDocAct) |
2772 self.__menus["help"].addAction(self.pysideDocAct) |
|
2773 if self.pyside2DocAct is not None: |
|
2774 self.__menus["help"].addAction(self.pyside2DocAct) |
2742 self.__menus["help"].addSeparator() |
2775 self.__menus["help"].addSeparator() |
2743 self.__menus["help"].addAction(self.versionAct) |
2776 self.__menus["help"].addAction(self.versionAct) |
2744 self.__menus["help"].addSeparator() |
2777 self.__menus["help"].addSeparator() |
2745 self.__menus["help"].addAction(self.checkUpdateAct) |
2778 self.__menus["help"].addAction(self.checkUpdateAct) |
2746 self.__menus["help"].addAction(self.showVersionsAct) |
2779 self.__menus["help"].addAction(self.showVersionsAct) |
5364 elif hvType == 3: |
5397 elif hvType == 3: |
5365 self.__webBrowser(home) |
5398 self.__webBrowser(home) |
5366 else: |
5399 else: |
5367 self.__customViewer(home) |
5400 self.__customViewer(home) |
5368 |
5401 |
5369 def __showPySideDoc(self): |
5402 def __showPySideDoc(self, variant): |
5370 """ |
5403 """ |
5371 Private slot to show the PySide documentation. |
5404 Private slot to show the PySide/PySide2 documentation. |
5372 """ |
5405 |
5373 pysideDocDir = Preferences.getHelp("PySideDocDir") |
5406 @param variant PySide variant (1 or 2) |
5374 if not pysideDocDir: |
5407 @type str |
5375 pysideDocDir = Utilities.getEnvironmentEntry("PYSIDEDOCDIR", None) |
5408 """ |
|
5409 assert variant in ("1", "2") |
|
5410 |
|
5411 if variant == "1": |
|
5412 pysideDocDir = Preferences.getHelp("PySideDocDir") |
|
5413 if not pysideDocDir: |
|
5414 pysideDocDir = Utilities.getEnvironmentEntry( |
|
5415 "PYSIDEDOCDIR", None) |
|
5416 else: |
|
5417 pysideDocDir = Preferences.getHelp("PySide2DocDir") |
|
5418 if not pysideDocDir: |
|
5419 pysideDocDir = Utilities.getEnvironmentEntry( |
|
5420 "PYSIDE2DOCDIR", None) |
5376 |
5421 |
5377 if not pysideDocDir: |
5422 if not pysideDocDir: |
5378 E5MessageBox.warning( |
5423 E5MessageBox.warning( |
5379 self, |
5424 self, |
5380 self.tr("Documentation"), |
5425 self.tr("Documentation"), |
5381 self.tr("""<p>The PySide documentation starting point""" |
5426 self.tr("""<p>The PySide{0} documentation starting point""" |
5382 """ has not been configured.</p>""")) |
5427 """ has not been configured.</p>""").format( |
|
5428 "" if variant == "1" else variant) |
|
5429 ) |
5383 return |
5430 return |
5384 |
5431 |
5385 if not pysideDocDir.startswith(("http://", "https://", "qthelp://")): |
5432 if not pysideDocDir.startswith(("http://", "https://", "qthelp://")): |
5386 if pysideDocDir.startswith("file://"): |
5433 if pysideDocDir.startswith("file://"): |
5387 pysideDocDir = pysideDocDir[7:] |
5434 pysideDocDir = pysideDocDir[7:] |
5418 self.__webBrowser(home) |
5465 self.__webBrowser(home) |
5419 elif hvType == 3: |
5466 elif hvType == 3: |
5420 self.__webBrowser(home) |
5467 self.__webBrowser(home) |
5421 else: |
5468 else: |
5422 self.__customViewer(home) |
5469 self.__customViewer(home) |
5423 |
5470 |
|
5471 @pyqtSlot(QUrl) |
|
5472 def handleUrl(self, url): |
|
5473 """ |
|
5474 Public slot to handle opening a URL. |
|
5475 |
|
5476 @param url URL to be shown |
|
5477 @type QUrl |
|
5478 """ |
|
5479 self.launchHelpViewer(url) |
|
5480 |
5424 def launchHelpViewer(self, home, searchWord=None, useSingle=False): |
5481 def launchHelpViewer(self, home, searchWord=None, useSingle=False): |
5425 """ |
5482 """ |
5426 Public slot to start the help viewer. |
5483 Public slot to start the help viewer/web browser. |
5427 |
5484 |
5428 @param home filename of file to be shown (string) |
5485 @param home filename of file to be shown or URL to be opened |
5429 @keyparam searchWord word to search for (string) |
5486 @type str or QUrl |
|
5487 @keyparam searchWord word to search for |
|
5488 @type str |
5430 @keyparam useSingle flag indicating to use a single browser window |
5489 @keyparam useSingle flag indicating to use a single browser window |
5431 (boolean) |
5490 @type bool |
5432 """ |
5491 """ |
|
5492 if isinstance(home, QUrl): |
|
5493 home = home.toString(QUrl.None_) |
|
5494 |
5433 if len(home) > 0: |
5495 if len(home) > 0: |
5434 homeUrl = QUrl(home) |
5496 homeUrl = QUrl(home) |
5435 if not homeUrl.scheme(): |
5497 if not homeUrl.scheme(): |
5436 home = QUrl.fromLocalFile(home).toString() |
5498 home = QUrl.fromLocalFile(home).toString() |
5437 |
5499 |
6689 'sourceforge' in versions[line + 1] and |
6751 'sourceforge' in versions[line + 1] and |
6690 "SourceForge" or versions[line + 1]) |
6752 "SourceForge" or versions[line + 1]) |
6691 line += 2 |
6753 line += 2 |
6692 versionText += self.tr("""</table>""") |
6754 versionText += self.tr("""</table>""") |
6693 |
6755 |
6694 E5MessageBox.about(self, Program, versionText) |
6756 self.__versionsDialog = E5MessageBox.E5MessageBox( |
|
6757 E5MessageBox.NoIcon, |
|
6758 Program, |
|
6759 versionText, |
|
6760 modal=False, |
|
6761 buttons=E5MessageBox.Ok, |
|
6762 parent=self |
|
6763 ) |
|
6764 self.__versionsDialog.setIconPixmap( |
|
6765 UI.PixmapCache.getPixmap("eric.png").scaled(64, 64)) |
|
6766 self.__versionsDialog.show() |
6695 |
6767 |
6696 def __sslErrors(self, reply, errors): |
6768 def __sslErrors(self, reply, errors): |
6697 """ |
6769 """ |
6698 Private slot to handle SSL errors. |
6770 Private slot to handle SSL errors. |
6699 |
6771 |