UI/UserInterface.py

changeset 6625
a67fee7bc09c
parent 6599
419f36a46608
child 6630
bddd12f27a4c
equal deleted inserted replaced
6624:9718755def80 6625:a67fee7bc09c
17 import sys 17 import sys
18 import logging 18 import logging
19 19
20 from PyQt5.QtCore import pyqtSlot, QTimer, QFile, QFileInfo, pyqtSignal, \ 20 from PyQt5.QtCore import pyqtSlot, QTimer, QFile, QFileInfo, pyqtSignal, \
21 PYQT_VERSION_STR, QDate, QIODevice, qVersion, QProcess, QSize, QUrl, \ 21 PYQT_VERSION_STR, QDate, QIODevice, qVersion, QProcess, QSize, QUrl, \
22 QObject, Qt 22 QObject, Qt, QUuid, QThread
23 from PyQt5.QtGui import QKeySequence, QDesktopServices 23 from PyQt5.QtGui import QKeySequence, QDesktopServices
24 from PyQt5.QtWidgets import QSizePolicy, QWidget, QWhatsThis, QToolBar, \ 24 from PyQt5.QtWidgets import QSizePolicy, QWidget, QWhatsThis, QToolBar, \
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
279 self.irc = None 279 self.irc = None
280 self.symbolsViewer = None 280 self.symbolsViewer = None
281 self.browser = None 281 self.browser = None
282 self.templateViewer = None 282 self.templateViewer = None
283 self.numbersViewer = None 283 self.numbersViewer = None
284
285 self.__webBrowserProcess = None
286 self.__webBrowserClient = None
287 self.__webBrowserSAName = QUuid.createUuid().toString()[1:-1]
284 288
285 # Create the main window now so that we can connect QActions to it. 289 # Create the main window now so that we can connect QActions to it.
286 logging.debug("Creating Layout...") 290 logging.debug("Creating Layout...")
287 self.__createLayout(debugServer) 291 self.__createLayout(debugServer)
288 self.__currentRightWidget = None 292 self.__currentRightWidget = None
570 self.toolGroups, self.currentToolGroup = Preferences.readToolGroups() 574 self.toolGroups, self.currentToolGroup = Preferences.readToolGroups()
571 self.toolProcs = [] 575 self.toolProcs = []
572 self.__initExternalToolsActions() 576 self.__initExternalToolsActions()
573 577
574 # create a dummy help window for shortcuts handling 578 # create a dummy help window for shortcuts handling
575 if WEBENGINE_AVAILABLE: 579 # TODO: remove this in favour of standalone web browser
576 from WebBrowser.WebBrowserWindow import WebBrowserWindow 580 if WEBKIT_AVAILABLE:
577 self.dummyHelpViewer = \
578 WebBrowserWindow(None, '.', None, 'web_browser', True, True)
579 elif WEBKIT_AVAILABLE:
580 from Helpviewer.HelpWindow import HelpWindow 581 from Helpviewer.HelpWindow import HelpWindow
581 self.dummyHelpViewer = \ 582 self.dummyHelpViewer = \
582 HelpWindow(None, '.', None, 'help viewer', True, True) 583 HelpWindow(None, '.', None, 'help viewer', True, True)
583 else: 584 else:
584 self.dummyHelpViewer = None 585 self.dummyHelpViewer = None
5652 if len(home) > 0: 5653 if len(home) > 0:
5653 homeUrl = QUrl(home) 5654 homeUrl = QUrl(home)
5654 if not homeUrl.scheme(): 5655 if not homeUrl.scheme():
5655 home = QUrl.fromLocalFile(home).toString() 5656 home = QUrl.fromLocalFile(home).toString()
5656 5657
5657 if WEBENGINE_AVAILABLE or WEBKIT_AVAILABLE: 5658 if WEBENGINE_AVAILABLE:
5659 self.__launchExternalWebBrowser(home, searchWord=searchWord)
5660
5661 elif WEBKIT_AVAILABLE:
5662 # TODO: change to use external web browser in single mode
5658 single = useSingle 5663 single = useSingle
5659 if WEBENGINE_AVAILABLE: 5664 if WEBKIT_AVAILABLE:
5660 single = single or \
5661 Preferences.getWebBrowser("SingleWebBrowserWindow")
5662 elif WEBKIT_AVAILABLE:
5663 single = single or Preferences.getHelp("SingleHelpWindow") 5665 single = single or Preferences.getHelp("SingleHelpWindow")
5664 if not single or self.helpWindow is None: 5666 if not single or self.helpWindow is None:
5665 if WEBENGINE_AVAILABLE: 5667 if WEBKIT_AVAILABLE:
5666 from WebBrowser.WebBrowserWindow import WebBrowserWindow
5667 browser = WebBrowserWindow(home, '.', None, 'web_browser',
5668 True, searchWord=searchWord)
5669 elif WEBKIT_AVAILABLE:
5670 from Helpviewer.HelpWindow import HelpWindow 5668 from Helpviewer.HelpWindow import HelpWindow
5671 browser = HelpWindow(home, '.', None, 'help viewer', True, 5669 browser = HelpWindow(home, '.', None, 'help viewer', True,
5672 searchWord=searchWord) 5670 searchWord=searchWord)
5673 5671
5674 if QApplication.desktop().width() > 400 and \ 5672 if QApplication.desktop().width() > 400 and \
5692 self.helpWindow.search(searchWord) 5690 self.helpWindow.search(searchWord)
5693 self.helpWindow.raise_() 5691 self.helpWindow.raise_()
5694 else: 5692 else:
5695 self.helpWindow.newTab(home) 5693 self.helpWindow.newTab(home)
5696 self.helpWindow.raise_() 5694 self.helpWindow.raise_()
5695
5697 else: 5696 else:
5698 self.__webBrowser(home) 5697 self.__webBrowser(home)
5698
5699 def __launchExternalWebBrowser(self, home, searchWord=None):
5700 """
5701 Private method to start an external web browser and communicate with
5702 it.
5703
5704 @param home filename of file to be shown or URL to be opened
5705 @type str
5706 @keyparam searchWord word to search for
5707 @type str
5708 """
5709 from WebBrowser.WebBrowserSingleApplication import \
5710 WebBrowserSingleApplicationClient
5711
5712 clientArgs = []
5713 if searchWord:
5714 clientArgs.append("--search={0}".format(searchWord))
5715
5716 if self.__webBrowserProcess is None:
5717 process = QProcess()
5718 args = [
5719 os.path.join(
5720 os.path.dirname(__file__), "..", "eric6_browser.py"),
5721 "--qthelp",
5722 "--single",
5723 "--name={0}".format(self.__webBrowserSAName)
5724 ]
5725 process.start(sys.executable, args)
5726 if not process.waitForStarted():
5727 E5MessageBox.warning(
5728 self,
5729 self.tr("Start Web Browser"),
5730 self.tr("""The eric6 web browser could not be started."""))
5731 return
5732
5733 process.finished.connect(self.__webBrowserFinished)
5734 self.__webBrowserProcess = process
5735
5736 self.__webBrowserClient = WebBrowserSingleApplicationClient(
5737 self.__webBrowserSAName)
5738 connectCount = 30
5739 while connectCount:
5740 res = self.__webBrowserClient.connect()
5741 if res != 0:
5742 break
5743 else:
5744 connectCount -= 1
5745 QThread.msleep(1000)
5746 if res <= 0:
5747 E5MessageBox.warning(
5748 self,
5749 self.tr("Start Web Browser"),
5750 self.tr("""<p>The eric6 web browser is not started.</p>"""
5751 """<p>Reason: {0}</p>""").format(
5752 self.__webBrowserClient.errstr())
5753 )
5754 return
5755
5756 if home:
5757 clientArgs.append(home)
5758 else:
5759 clientArgs.append("--newtab={0}".format(home))
5760
5761 if clientArgs:
5762 self.__webBrowserClient.processArgs(clientArgs, disconnect=False)
5763
5764 def __webBrowserFinished(self):
5765 """
5766 Private slot handling the end of the external web browser process.
5767 """
5768 self.__webBrowserProcess.deleteLater()
5769
5770 self.__webBrowserProcess = None
5771 self.__webBrowserClient = None
5772
5773 def __webBrowserShutdown(self):
5774 """
5775 Private method to shut down the web browser.
5776 """
5777 self.__webBrowserClient.processArgs(["--shutdown"], disconnect=False)
5699 5778
5700 def __helpClosed(self): 5779 def __helpClosed(self):
5701 """ 5780 """
5702 Private slot to handle the helpClosed signal of the help window. 5781 Private slot to handle the helpClosed signal of the help window.
5703 """ 5782 """
5741 5820
5742 @keyparam preview flag indicating to get a help window for preview 5821 @keyparam preview flag indicating to get a help window for preview
5743 (boolean) 5822 (boolean)
5744 @return reference to the help window instance (HelpWindow) 5823 @return reference to the help window instance (HelpWindow)
5745 """ 5824 """
5825 # TODO: check if this method is used somewhere
5746 if WEBENGINE_AVAILABLE or WEBKIT_AVAILABLE: 5826 if WEBENGINE_AVAILABLE or WEBKIT_AVAILABLE:
5747 if self.helpWindow is None: 5827 if self.helpWindow is None:
5748 self.launchHelpViewer("", useSingle=True) 5828 self.launchHelpViewer("", useSingle=True)
5749 self.helpWindow.raise_() 5829 self.helpWindow.raise_()
5750 return self.helpWindow 5830 return self.helpWindow
5935 """ 6015 """
5936 Private slot to configure the keyboard shortcuts. 6016 Private slot to configure the keyboard shortcuts.
5937 """ 6017 """
5938 if self.shortcutsDialog is None: 6018 if self.shortcutsDialog is None:
5939 from Preferences.ShortcutsDialog import ShortcutsDialog 6019 from Preferences.ShortcutsDialog import ShortcutsDialog
5940 self.shortcutsDialog = ShortcutsDialog(self, 'Shortcuts') 6020 self.shortcutsDialog = ShortcutsDialog(self)
5941 self.shortcutsDialog.populate() 6021 self.shortcutsDialog.populate()
5942 self.shortcutsDialog.show() 6022 self.shortcutsDialog.show()
5943 6023
5944 def __exportShortcuts(self): 6024 def __exportShortcuts(self):
5945 """ 6025 """
6565 return True 6645 return True
6566 6646
6567 if self.helpWindow is not None: 6647 if self.helpWindow is not None:
6568 if not self.helpWindow.shutdown(): 6648 if not self.helpWindow.shutdown():
6569 return False 6649 return False
6650
6651 if self.__webBrowserProcess is not None:
6652 self.__webBrowserShutdown()
6570 6653
6571 if self.irc is not None: 6654 if self.irc is not None:
6572 if not self.irc.shutdown(): 6655 if not self.irc.shutdown():
6573 return False 6656 return False
6574 6657

eric ide

mercurial