diff -r 49f3377aebf1 -r 787a6b3f8c9f eric6/Preferences/ProgramsDialog.py --- a/eric6/Preferences/ProgramsDialog.py Fri Oct 09 17:19:29 2020 +0200 +++ b/eric6/Preferences/ProgramsDialog.py Sat Oct 10 12:20:51 2020 +0200 @@ -13,12 +13,12 @@ import sys from PyQt5.QtCore import pyqtSlot, Qt, QProcess -from PyQt5.QtGui import QCursor from PyQt5.QtWidgets import ( QApplication, QTreeWidgetItem, QHeaderView, QDialog, QDialogButtonBox ) from E5Gui.E5Application import e5App +from E5Gui.E5OverrideCursor import E5OverrideCursor from .Ui_ProgramsDialog import Ui_ProgramsDialog @@ -81,224 +81,224 @@ """ Private slot to search for all supported/required programs. """ - QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) - QApplication.processEvents() - self.programsList.clear() header = self.programsList.header() header.setSortIndicator(0, Qt.AscendingOrder) header.setSortIndicatorShown(False) - # 1. do the Qt5 programs - # 1a. Translation Converter - exe = ( - Utilities.isWindowsPlatform() and - "{0}.exe".format(Utilities.generateQtToolName("lrelease")) or - Utilities.generateQtToolName("lrelease") - ) - exe = os.path.join(Utilities.getQtBinariesPath(), exe) - version = self.__createProgramEntry( - self.tr("Translation Converter (Qt)"), exe, '-version', - 'lrelease', -1) - # 1b. Qt Designer - if Utilities.isWindowsPlatform(): - exe = os.path.join( - Utilities.getQtBinariesPath(), - "{0}.exe".format(Utilities.generateQtToolName("designer"))) - elif Utilities.isMacPlatform(): - exe = Utilities.getQtMacBundle("designer") - else: - exe = os.path.join( - Utilities.getQtBinariesPath(), - Utilities.generateQtToolName("designer")) - self.__createProgramEntry( - self.tr("Qt Designer"), exe, version=version) - # 1c. Qt Linguist - if Utilities.isWindowsPlatform(): - exe = os.path.join( - Utilities.getQtBinariesPath(), - "{0}.exe".format(Utilities.generateQtToolName("linguist"))) - elif Utilities.isMacPlatform(): - exe = Utilities.getQtMacBundle("linguist") - else: - exe = os.path.join( - Utilities.getQtBinariesPath(), - Utilities.generateQtToolName("linguist")) - self.__createProgramEntry( - self.tr("Qt Linguist"), exe, version=version) - # 1d. Qt Assistant - if Utilities.isWindowsPlatform(): - exe = os.path.join( - Utilities.getQtBinariesPath(), - "{0}.exe".format(Utilities.generateQtToolName("assistant"))) - elif Utilities.isMacPlatform(): - exe = Utilities.getQtMacBundle("assistant") - else: - exe = os.path.join( - Utilities.getQtBinariesPath(), - Utilities.generateQtToolName("assistant")) - self.__createProgramEntry( - self.tr("Qt Assistant"), exe, version=version) - - # 2. do the PyQt programs - # 2.1 do the PyQt5 programs - # 2.1a. Translation Extractor PyQt5 - self.__createProgramEntry( - self.tr("Translation Extractor (Python, PyQt5)"), - Utilities.generatePyQtToolPath("pylupdate5"), - '-version', 'pylupdate', -1) - # 2.1b. Forms Compiler PyQt5 - self.__createProgramEntry( - self.tr("Forms Compiler (Python, PyQt5)"), - Utilities.generatePyQtToolPath("pyuic5", ["py3uic5"]), - '--version', 'Python User', 4) - # 2.1c. Resource Compiler PyQt5 - self.__createProgramEntry( - self.tr("Resource Compiler (Python, PyQt5)"), - Utilities.generatePyQtToolPath("pyrcc5"), - '-version', '', -1, versionRe='Resource Compiler|pyrcc5') - - # 3. do the PySide programs - # 3.1 do the PySide2 programs - # 3.1a. Translation Extractor PySide2 - self.__createProgramEntry( - self.tr("Translation Extractor (Python, PySide2)"), - Utilities.generatePySideToolPath("pyside2-lupdate"), - '-version', '', -1, versionRe='lupdate') - # 3.1b. Forms Compiler PySide2 - self.__createProgramEntry( - self.tr("Forms Compiler (Python, PySide2)"), - Utilities.generatePySideToolPath("pyside2-uic"), - '--version', '', -1, versionRe='uic') - # 3.1c Resource Compiler PySide2 - self.__createProgramEntry( - self.tr("Resource Compiler (Python, PySide2)"), - Utilities.generatePySideToolPath("pyside2-rcc"), - '-version', '', -1, versionRe='rcc') - - # 4. do the Conda program(s) - exe = Preferences.getConda("CondaExecutable") - if not exe: - exe = "conda" + with E5OverrideCursor(): + # 1. do the Qt5 programs + # 1a. Translation Converter + exe = ( + Utilities.isWindowsPlatform() and + "{0}.exe".format(Utilities.generateQtToolName("lrelease")) or + Utilities.generateQtToolName("lrelease") + ) + exe = os.path.join(Utilities.getQtBinariesPath(), exe) + version = self.__createProgramEntry( + self.tr("Translation Converter (Qt)"), exe, '-version', + 'lrelease', -1) + # 1b. Qt Designer + if Utilities.isWindowsPlatform(): + exe = os.path.join( + Utilities.getQtBinariesPath(), + "{0}.exe".format(Utilities.generateQtToolName("designer"))) + elif Utilities.isMacPlatform(): + exe = Utilities.getQtMacBundle("designer") + else: + exe = os.path.join( + Utilities.getQtBinariesPath(), + Utilities.generateQtToolName("designer")) + self.__createProgramEntry( + self.tr("Qt Designer"), exe, version=version) + # 1c. Qt Linguist + if Utilities.isWindowsPlatform(): + exe = os.path.join( + Utilities.getQtBinariesPath(), + "{0}.exe".format(Utilities.generateQtToolName("linguist"))) + elif Utilities.isMacPlatform(): + exe = Utilities.getQtMacBundle("linguist") + else: + exe = os.path.join( + Utilities.getQtBinariesPath(), + Utilities.generateQtToolName("linguist")) + self.__createProgramEntry( + self.tr("Qt Linguist"), exe, version=version) + # 1d. Qt Assistant if Utilities.isWindowsPlatform(): - exe += ".exe" - self.__createProgramEntry( - self.tr("conda Manager"), exe, '--version', 'conda', -1) - - # 5. do the pip program(s) - virtualenvManager = e5App().getObject("VirtualEnvManager") - for venvName in virtualenvManager.getVirtualenvNames(): - interpreter = virtualenvManager.getVirtualenvInterpreter(venvName) + exe = os.path.join( + Utilities.getQtBinariesPath(), + "{0}.exe".format( + Utilities.generateQtToolName("assistant"))) + elif Utilities.isMacPlatform(): + exe = Utilities.getQtMacBundle("assistant") + else: + exe = os.path.join( + Utilities.getQtBinariesPath(), + Utilities.generateQtToolName("assistant")) + self.__createProgramEntry( + self.tr("Qt Assistant"), exe, version=version) + + # 2. do the PyQt programs + # 2.1 do the PyQt5 programs + # 2.1a. Translation Extractor PyQt5 + self.__createProgramEntry( + self.tr("Translation Extractor (Python, PyQt5)"), + Utilities.generatePyQtToolPath("pylupdate5"), + '-version', 'pylupdate', -1) + # 2.1b. Forms Compiler PyQt5 + self.__createProgramEntry( + self.tr("Forms Compiler (Python, PyQt5)"), + Utilities.generatePyQtToolPath("pyuic5", ["py3uic5"]), + '--version', 'Python User', 4) + # 2.1c. Resource Compiler PyQt5 + self.__createProgramEntry( + self.tr("Resource Compiler (Python, PyQt5)"), + Utilities.generatePyQtToolPath("pyrcc5"), + '-version', '', -1, versionRe='Resource Compiler|pyrcc5') + + # 3. do the PySide programs + # 3.1 do the PySide2 programs + # 3.1a. Translation Extractor PySide2 + self.__createProgramEntry( + self.tr("Translation Extractor (Python, PySide2)"), + Utilities.generatePySideToolPath("pyside2-lupdate"), + '-version', '', -1, versionRe='lupdate') + # 3.1b. Forms Compiler PySide2 + self.__createProgramEntry( + self.tr("Forms Compiler (Python, PySide2)"), + Utilities.generatePySideToolPath("pyside2-uic"), + '--version', '', -1, versionRe='uic') + # 3.1c Resource Compiler PySide2 + self.__createProgramEntry( + self.tr("Resource Compiler (Python, PySide2)"), + Utilities.generatePySideToolPath("pyside2-rcc"), + '-version', '', -1, versionRe='rcc') + + # 4. do the Conda program(s) + exe = Preferences.getConda("CondaExecutable") + if not exe: + exe = "conda" + if Utilities.isWindowsPlatform(): + exe += ".exe" self.__createProgramEntry( - self.tr("PyPI Package Management"), interpreter, '--version', - 'pip', 1, exeModule=["-m", "pip"]) - - # 6. do the CORBA and Protobuf programs - # 6a. omniORB - exe = Preferences.getCorba("omniidl") - if not exe: - exe = "omniidl" - if Utilities.isWindowsPlatform(): - exe += ".exe" - self.__createProgramEntry( - self.tr("CORBA IDL Compiler"), exe, '-V', 'omniidl', -1) - # 6b. protobuf - exe = Preferences.getProtobuf("protoc") - if not exe: - exe = "protoc" - if Utilities.isWindowsPlatform(): - exe += ".exe" - self.__createProgramEntry( - self.tr("Protobuf Compiler"), exe, '--version', 'libprotoc', -1) - # 6c. grpc - exe = Preferences.getProtobuf("grpcPython") - if not exe: - exe = sys.executable - self.__createProgramEntry( - self.tr("gRPC Compiler"), exe, '--version', 'libprotoc', -1, - exeModule=['-m', 'grpc_tools.protoc']) - - # 7. do the spell checking entry - try: - import enchant + self.tr("conda Manager"), exe, '--version', 'conda', -1) + + # 5. do the pip program(s) + virtualenvManager = e5App().getObject("VirtualEnvManager") + for venvName in virtualenvManager.getVirtualenvNames(): + interpreter = virtualenvManager.getVirtualenvInterpreter( + venvName) + self.__createProgramEntry( + self.tr("PyPI Package Management"), interpreter, + '--version', 'pip', 1, exeModule=["-m", "pip"]) + + # 6. do the CORBA and Protobuf programs + # 6a. omniORB + exe = Preferences.getCorba("omniidl") + if not exe: + exe = "omniidl" + if Utilities.isWindowsPlatform(): + exe += ".exe" + self.__createProgramEntry( + self.tr("CORBA IDL Compiler"), exe, '-V', 'omniidl', -1) + # 6b. protobuf + exe = Preferences.getProtobuf("protoc") + if not exe: + exe = "protoc" + if Utilities.isWindowsPlatform(): + exe += ".exe" + self.__createProgramEntry( + self.tr("Protobuf Compiler"), exe, '--version', 'libprotoc', + -1) + # 6c. grpc + exe = Preferences.getProtobuf("grpcPython") + if not exe: + exe = sys.executable + self.__createProgramEntry( + self.tr("gRPC Compiler"), exe, '--version', 'libprotoc', -1, + exeModule=['-m', 'grpc_tools.protoc']) + + # 7. do the spell checking entry try: - text = os.path.dirname(enchant.__file__) - except AttributeError: + import enchant + try: + text = os.path.dirname(enchant.__file__) + except AttributeError: + text = "enchant" + try: + version = enchant.__version__ + except AttributeError: + version = self.tr("(unknown)") + except (ImportError, AttributeError, OSError): text = "enchant" - try: - version = enchant.__version__ - except AttributeError: - version = self.tr("(unknown)") - except (ImportError, AttributeError, OSError): - text = "enchant" - version = "" - self.__createEntry( - self.tr("Spell Checker - PyEnchant"), text, version) - - # 8. do the pygments entry - try: - import pygments - try: - text = os.path.dirname(pygments.__file__) - except AttributeError: - text = "pygments" + version = "" + self.__createEntry( + self.tr("Spell Checker - PyEnchant"), text, version) + + # 8. do the pygments entry try: - version = pygments.__version__ - except AttributeError: - version = self.tr("(unknown)") - except (ImportError, AttributeError, OSError): - text = "pygments" - version = "" - self.__createEntry( - self.tr("Source Highlighter - Pygments"), text, version) - - # 9. do the MicroPython related entries - exe = Preferences.getMicroPython("MpyCrossCompiler") - if not exe: - exe = "mpy-cross" - self.__createProgramEntry( - self.tr("MicroPython - MPY Cross Compiler"), exe, '--version', - 'MicroPython', 1) - self.__createProgramEntry( - self.tr("MicroPython - ESP Tool"), sys.executable, 'version', - 'esptool', -1, exeModule=['-m', 'esptool']) - exe = Preferences.getMicroPython("DfuUtilPath") - if not exe: - exe = "dfu-util" - self.__createProgramEntry( - self.tr("MicroPython - PyBoard Flasher"), exe, '--version', - 'dfu-util', -1) - - # 10. do the plugin related programs - pm = e5App().getObject("PluginManager") - for info in pm.getPluginExeDisplayData(): - if info["programEntry"]: - if "exeModule" not in info: - info["exeModule"] = None - if "versionRe" not in info: - info["versionRe"] = None - self.__createProgramEntry( - info["header"], - info["exe"], - versionCommand=info["versionCommand"], - versionStartsWith=info["versionStartsWith"], - versionPosition=info["versionPosition"], - version=info["version"], - versionCleanup=info["versionCleanup"], - versionRe=info["versionRe"], - exeModule=info["exeModule"], - ) - else: - self.__createEntry( - info["header"], - info["text"], - info["version"] - ) - - self.programsList.sortByColumn(0, Qt.AscendingOrder) - self.on_showComboBox_currentIndexChanged( - self.showComboBox.currentIndex()) - QApplication.restoreOverrideCursor() + import pygments + try: + text = os.path.dirname(pygments.__file__) + except AttributeError: + text = "pygments" + try: + version = pygments.__version__ + except AttributeError: + version = self.tr("(unknown)") + except (ImportError, AttributeError, OSError): + text = "pygments" + version = "" + self.__createEntry( + self.tr("Source Highlighter - Pygments"), text, version) + + # 9. do the MicroPython related entries + exe = Preferences.getMicroPython("MpyCrossCompiler") + if not exe: + exe = "mpy-cross" + self.__createProgramEntry( + self.tr("MicroPython - MPY Cross Compiler"), exe, '--version', + 'MicroPython', 1) + self.__createProgramEntry( + self.tr("MicroPython - ESP Tool"), sys.executable, 'version', + 'esptool', -1, exeModule=['-m', 'esptool']) + exe = Preferences.getMicroPython("DfuUtilPath") + if not exe: + exe = "dfu-util" + self.__createProgramEntry( + self.tr("MicroPython - PyBoard Flasher"), exe, '--version', + 'dfu-util', -1) + + # 10. do the plugin related programs + pm = e5App().getObject("PluginManager") + for info in pm.getPluginExeDisplayData(): + if info["programEntry"]: + if "exeModule" not in info: + info["exeModule"] = None + if "versionRe" not in info: + info["versionRe"] = None + self.__createProgramEntry( + info["header"], + info["exe"], + versionCommand=info["versionCommand"], + versionStartsWith=info["versionStartsWith"], + versionPosition=info["versionPosition"], + version=info["version"], + versionCleanup=info["versionCleanup"], + versionRe=info["versionRe"], + exeModule=info["exeModule"], + ) + else: + self.__createEntry( + info["header"], + info["text"], + info["version"] + ) + + self.programsList.sortByColumn(0, Qt.AscendingOrder) + self.on_showComboBox_currentIndexChanged( + self.showComboBox.currentIndex()) self.__hasSearched = True