eric6/Project/Project.py

changeset 7771
787a6b3f8c9f
parent 7759
51aa6c6b66f7
child 7780
41420f82c0ac
diff -r 49f3377aebf1 -r 787a6b3f8c9f eric6/Project/Project.py
--- a/eric6/Project/Project.py	Fri Oct 09 17:19:29 2020 +0200
+++ b/eric6/Project/Project.py	Sat Oct 10 12:20:51 2020 +0200
@@ -18,9 +18,9 @@
 
 from PyQt5.QtCore import (
     pyqtSlot, QFile, QFileInfo, pyqtSignal, QCryptographicHash, QIODevice,
-    QByteArray, QObject, Qt, QProcess
+    QByteArray, QObject, QProcess
 )
-from PyQt5.QtGui import QCursor, QKeySequence
+from PyQt5.QtGui import QKeySequence
 from PyQt5.QtWidgets import (
     QLineEdit, QToolBar, QDialog, QInputDialog, QApplication, QMenu, QAction
 )
@@ -30,6 +30,7 @@
 from E5Gui import E5FileDialog, E5MessageBox
 from E5Gui.E5ListSelectionDialog import E5ListSelectionDialog
 from E5Gui.E5ProgressDialog import E5ProgressDialog
+from E5Gui.E5OverrideCursor import E5OverrideCursor, E5OverridenCursor
 
 from Globals import recentNameProject
 
@@ -778,7 +779,6 @@
             res = not reader.hasError()
             f.close()
         else:
-            QApplication.restoreOverrideCursor()
             E5MessageBox.critical(
                 self.ui,
                 self.tr("Read project file"),
@@ -2617,91 +2617,90 @@
         # Show the file type associations for the user to change
         self.__showFiletypeAssociations()
         
-        QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
-        QApplication.processEvents()
-        
-        # search the project directory for files with known extensions
-        filespecs = list(self.pdata["FILETYPES"].keys())
-        for filespec in filespecs:
-            files = Utilities.direntries(self.ppath, True, filespec)
-            for file in files:
-                self.appendFile(file)
-        
-        # special handling for translation files
-        if self.translationsRoot:
-            tpd = os.path.join(self.ppath, self.translationsRoot)
-            if not self.translationsRoot.endswith(os.sep):
-                tpd = os.path.dirname(tpd)
-        else:
-            tpd = self.ppath
-        tslist = []
-        if self.pdata["TRANSLATIONPATTERN"]:
-            pattern = os.path.basename(self.pdata["TRANSLATIONPATTERN"])
-            if "%language%" in pattern:
-                pattern = pattern.replace("%language%", "*")
+        with E5OverrideCursor():
+            # search the project directory for files with known extensions
+            filespecs = list(self.pdata["FILETYPES"].keys())
+            for filespec in filespecs:
+                files = Utilities.direntries(self.ppath, True, filespec)
+                for file in files:
+                    self.appendFile(file)
+            
+            # special handling for translation files
+            if self.translationsRoot:
+                tpd = os.path.join(self.ppath, self.translationsRoot)
+                if not self.translationsRoot.endswith(os.sep):
+                    tpd = os.path.dirname(tpd)
             else:
-                tpd = self.pdata["TRANSLATIONPATTERN"].split(
-                    "%language%")[0]
-        else:
-            pattern = "*.ts"
-        tslist.extend(Utilities.direntries(tpd, True, pattern))
-        pattern = self.__binaryTranslationFile(pattern)
-        if pattern:
+                tpd = self.ppath
+            tslist = []
+            if self.pdata["TRANSLATIONPATTERN"]:
+                pattern = os.path.basename(self.pdata["TRANSLATIONPATTERN"])
+                if "%language%" in pattern:
+                    pattern = pattern.replace("%language%", "*")
+                else:
+                    tpd = self.pdata["TRANSLATIONPATTERN"].split(
+                        "%language%")[0]
+            else:
+                pattern = "*.ts"
             tslist.extend(Utilities.direntries(tpd, True, pattern))
-        if tslist:
-            if '_' in os.path.basename(tslist[0]):
-                # the first entry determines the mainscript name
-                mainscriptname = (
-                    os.path.splitext(mainscript)[0] or
-                    os.path.basename(tslist[0]).split('_')[0]
-                )
-                self.pdata["TRANSLATIONPATTERN"] = os.path.join(
-                    os.path.dirname(tslist[0]),
-                    "{0}_%language%{1}".format(
-                        os.path.basename(tslist[0]).split('_')[0],
-                        os.path.splitext(tslist[0])[1]))
-            else:
-                mainscriptname = ""
-                pattern, ok = QInputDialog.getText(
-                    None,
-                    self.tr("Translation Pattern"),
-                    self.tr(
-                        "Enter the path pattern for translation files "
-                        "(use '%language%' in place of the language code):"),
-                    # __IGNORE_WARNING_M601__
-                    QLineEdit.Normal,
-                    tslist[0])
-                if pattern:
-                    self.pdata["TRANSLATIONPATTERN"] = pattern
-            if self.pdata["TRANSLATIONPATTERN"]:
-                self.pdata["TRANSLATIONPATTERN"] = self.getRelativePath(
-                    self.pdata["TRANSLATIONPATTERN"])
-                pattern = self.pdata["TRANSLATIONPATTERN"].replace(
-                    "%language%", "*")
-                for ts in tslist:
-                    if fnmatch.fnmatch(ts, pattern):
-                        self.pdata["TRANSLATIONS"].append(ts)
-                        self.projectLanguageAdded.emit(ts)
-                if self.pdata["TRANSLATIONSBINPATH"]:
-                    tpd = os.path.join(self.ppath,
-                                       self.pdata["TRANSLATIONSBINPATH"])
-                    pattern = os.path.basename(
-                        self.pdata["TRANSLATIONPATTERN"]).replace(
+            pattern = self.__binaryTranslationFile(pattern)
+            if pattern:
+                tslist.extend(Utilities.direntries(tpd, True, pattern))
+            if tslist:
+                if '_' in os.path.basename(tslist[0]):
+                    # the first entry determines the mainscript name
+                    mainscriptname = (
+                        os.path.splitext(mainscript)[0] or
+                        os.path.basename(tslist[0]).split('_')[0]
+                    )
+                    self.pdata["TRANSLATIONPATTERN"] = os.path.join(
+                        os.path.dirname(tslist[0]),
+                        "{0}_%language%{1}".format(
+                            os.path.basename(tslist[0]).split('_')[0],
+                            os.path.splitext(tslist[0])[1]))
+                else:
+                    mainscriptname = ""
+                    pattern, ok = QInputDialog.getText(
+                        None,
+                        self.tr("Translation Pattern"),
+                        self.tr(
+                            "Enter the path pattern for translation files "
+                            "(use '%language%' in place of the language"
+                            " code):"),
+                        QLineEdit.Normal,
+                        tslist[0])
+                    if pattern:
+                        self.pdata["TRANSLATIONPATTERN"] = pattern
+                if self.pdata["TRANSLATIONPATTERN"]:
+                    self.pdata["TRANSLATIONPATTERN"] = self.getRelativePath(
+                        self.pdata["TRANSLATIONPATTERN"])
+                    pattern = self.pdata["TRANSLATIONPATTERN"].replace(
                         "%language%", "*")
-                    pattern = self.__binaryTranslationFile(pattern)
-                    qmlist = Utilities.direntries(tpd, True, pattern)
-                    for qm in qmlist:
-                        self.pdata["TRANSLATIONS"].append(qm)
-                        self.projectLanguageAdded.emit(qm)
-            if not self.pdata["MAINSCRIPT"] and bool(mainscriptname):
-                if self.pdata["PROGLANGUAGE"] in [
-                    "Python3", "MicroPython"
-                ]:
-                    self.pdata["MAINSCRIPT"] = '{0}.py'.format(mainscriptname)
-                elif self.pdata["PROGLANGUAGE"] == "Ruby":
-                    self.pdata["MAINSCRIPT"] = '{0}.rb'.format(mainscriptname)
-        self.setDirty(True)
-        QApplication.restoreOverrideCursor()
+                    for ts in tslist:
+                        if fnmatch.fnmatch(ts, pattern):
+                            self.pdata["TRANSLATIONS"].append(ts)
+                            self.projectLanguageAdded.emit(ts)
+                    if self.pdata["TRANSLATIONSBINPATH"]:
+                        tpd = os.path.join(self.ppath,
+                                           self.pdata["TRANSLATIONSBINPATH"])
+                        pattern = os.path.basename(
+                            self.pdata["TRANSLATIONPATTERN"]).replace(
+                            "%language%", "*")
+                        pattern = self.__binaryTranslationFile(pattern)
+                        qmlist = Utilities.direntries(tpd, True, pattern)
+                        for qm in qmlist:
+                            self.pdata["TRANSLATIONS"].append(qm)
+                            self.projectLanguageAdded.emit(qm)
+                if not self.pdata["MAINSCRIPT"] and bool(mainscriptname):
+                    if self.pdata["PROGLANGUAGE"] in [
+                        "Python3", "MicroPython"
+                    ]:
+                        self.pdata["MAINSCRIPT"] = '{0}.py'.format(
+                            mainscriptname)
+                    elif self.pdata["PROGLANGUAGE"] == "Ruby":
+                        self.pdata["MAINSCRIPT"] = '{0}.rb'.format(
+                            mainscriptname)
+            self.setDirty(True)
     
     def __showProperties(self):
         """
@@ -2895,18 +2894,15 @@
         
         if fn:
             if self.closeProject():
-                QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
-                QApplication.processEvents()
-                if self.__readProject(fn):
+                with E5OverrideCursor():
+                    ok = self.__readProject(fn)
+                if ok:
                     self.opened = True
                     if not self.pdata["FILETYPES"]:
                         self.initFileTypes()
                     else:
                         self.updateFileTypes()
                     
-                    QApplication.restoreOverrideCursor()
-                    QApplication.processEvents()
-                    
                     try:
                         # create management directory if not present
                         self.createProjectManagementDir()
@@ -2923,94 +2919,88 @@
                     # read a user specific project file
                     self.__readUserProperties()
                     
-                    QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
-                    QApplication.processEvents()
-                    
-                    oldState = self.isDirty()
-                    self.vcs = self.initVCS()
-                    if self.vcs is None and self.isDirty() == oldState:
-                        # check, if project is version controlled
-                        pluginManager = e5App().getObject("PluginManager")
-                        for indicator, vcsData in (
-                            pluginManager.getVcsSystemIndicators().items()
-                        ):
-                            if os.path.exists(
-                                    os.path.join(self.ppath, indicator)):
-                                if len(vcsData) > 1:
-                                    vcsList = []
-                                    for _vcsSystemStr, vcsSystemDisplay in (
-                                        vcsData
-                                    ):
-                                        vcsList.append(vcsSystemDisplay)
-                                    QApplication.restoreOverrideCursor()
-                                    res, vcs_ok = QInputDialog.getItem(
-                                        None,
-                                        self.tr("New Project"),
-                                        self.tr(
-                                            "Select Version Control System"),
-                                        vcsList,
-                                        0, False)
-                                    QApplication.setOverrideCursor(
-                                        QCursor(Qt.WaitCursor))
-                                    QApplication.processEvents()
-                                    if vcs_ok:
-                                        for vcsSystemStr, vcsSystemDisplay in (
-                                            vcsData
-                                        ):
-                                            if res == vcsSystemDisplay:
-                                                vcsSystem = vcsSystemStr
-                                                break
+                    with E5OverrideCursor():
+                        oldState = self.isDirty()
+                        self.vcs = self.initVCS()
+                        if self.vcs is None and self.isDirty() == oldState:
+                            # check, if project is version controlled
+                            pluginManager = e5App().getObject("PluginManager")
+                            for indicator, vcsData in (
+                                pluginManager.getVcsSystemIndicators().items()
+                            ):
+                                if os.path.exists(
+                                        os.path.join(self.ppath, indicator)):
+                                    if len(vcsData) > 1:
+                                        vcsList = []
+                                        for (
+                                            _vcsSystemStr, vcsSystemDisplay
+                                        ) in vcsData:
+                                            vcsList.append(vcsSystemDisplay)
+                                        with E5OverridenCursor():
+                                            res, vcs_ok = QInputDialog.getItem(
+                                                None,
+                                                self.tr("New Project"),
+                                                self.tr(
+                                                    "Select Version Control"
+                                                    " System"),
+                                                vcsList,
+                                                0, False)
+                                        if vcs_ok:
+                                            for (
+                                                vcsSystemStr, vcsSystemDisplay
+                                            ) in vcsData:
+                                                if res == vcsSystemDisplay:
+                                                    vcsSystem = vcsSystemStr
+                                                    break
+                                            else:
+                                                vcsSystem = "None"
                                         else:
                                             vcsSystem = "None"
                                     else:
-                                        vcsSystem = "None"
-                                else:
-                                    vcsSystem = vcsData[0][0]
-                                self.pdata["VCS"] = vcsSystem
-                                self.vcs = self.initVCS()
-                                self.setDirty(True)
-                    if (
-                        self.vcs is not None and
-                        (self.vcs.vcsRegisteredState(self.ppath) !=
-                            self.vcs.canBeCommitted)
-                    ):
-                        self.pdata["VCS"] = 'None'
-                        self.vcs = self.initVCS()
-                    self.closeAct.setEnabled(True)
-                    self.saveasAct.setEnabled(True)
-                    self.actGrp2.setEnabled(True)
-                    self.propsAct.setEnabled(True)
-                    self.userPropsAct.setEnabled(True)
-                    self.filetypesAct.setEnabled(True)
-                    self.lexersAct.setEnabled(True)
-                    self.sessActGrp.setEnabled(True)
-                    self.dbgActGrp.setEnabled(True)
-                    self.menuDebuggerAct.setEnabled(True)
-                    self.menuSessionAct.setEnabled(True)
-                    self.menuCheckAct.setEnabled(True)
-                    self.menuShowAct.setEnabled(True)
-                    self.menuDiagramAct.setEnabled(True)
-                    self.menuApidocAct.setEnabled(True)
-                    self.menuPackagersAct.setEnabled(True)
-                    self.pluginGrp.setEnabled(
-                        self.pdata["PROJECTTYPE"] in ["E6Plugin"])
-                    self.addLanguageAct.setEnabled(
-                        bool(self.pdata["TRANSLATIONPATTERN"]))
-                    self.makeGrp.setEnabled(
-                        self.pdata["MAKEPARAMS"]["MakeEnabled"])
-                    self.menuMakeAct.setEnabled(
-                        self.pdata["MAKEPARAMS"]["MakeEnabled"])
-                    
-                    # open a project debugger properties file being quiet
-                    # about errors
-                    if Preferences.getProject("AutoLoadDbgProperties"):
-                        self.__readDebugProperties(True)
-                    
-                    self.__model.projectOpened()
-                    self.projectOpenedHooks.emit()
-                    self.projectOpened.emit()
-                    
-                    QApplication.restoreOverrideCursor()
+                                        vcsSystem = vcsData[0][0]
+                                    self.pdata["VCS"] = vcsSystem
+                                    self.vcs = self.initVCS()
+                                    self.setDirty(True)
+                        if (
+                            self.vcs is not None and
+                            (self.vcs.vcsRegisteredState(self.ppath) !=
+                                self.vcs.canBeCommitted)
+                        ):
+                            self.pdata["VCS"] = 'None'
+                            self.vcs = self.initVCS()
+                        self.closeAct.setEnabled(True)
+                        self.saveasAct.setEnabled(True)
+                        self.actGrp2.setEnabled(True)
+                        self.propsAct.setEnabled(True)
+                        self.userPropsAct.setEnabled(True)
+                        self.filetypesAct.setEnabled(True)
+                        self.lexersAct.setEnabled(True)
+                        self.sessActGrp.setEnabled(True)
+                        self.dbgActGrp.setEnabled(True)
+                        self.menuDebuggerAct.setEnabled(True)
+                        self.menuSessionAct.setEnabled(True)
+                        self.menuCheckAct.setEnabled(True)
+                        self.menuShowAct.setEnabled(True)
+                        self.menuDiagramAct.setEnabled(True)
+                        self.menuApidocAct.setEnabled(True)
+                        self.menuPackagersAct.setEnabled(True)
+                        self.pluginGrp.setEnabled(
+                            self.pdata["PROJECTTYPE"] in ["E6Plugin"])
+                        self.addLanguageAct.setEnabled(
+                            bool(self.pdata["TRANSLATIONPATTERN"]))
+                        self.makeGrp.setEnabled(
+                            self.pdata["MAKEPARAMS"]["MakeEnabled"])
+                        self.menuMakeAct.setEnabled(
+                            self.pdata["MAKEPARAMS"]["MakeEnabled"])
+                        
+                        # open a project debugger properties file being quiet
+                        # about errors
+                        if Preferences.getProject("AutoLoadDbgProperties"):
+                            self.__readDebugProperties(True)
+                        
+                        self.__model.projectOpened()
+                        self.projectOpenedHooks.emit()
+                        self.projectOpened.emit()
                     
                     if Preferences.getProject("SearchNewFiles"):
                         self.__doSearchNewFiles()
@@ -3050,8 +3040,6 @@
                             self.vcsStatusMonitorInfo)
                         self.vcs.vcsStatusChanged.connect(
                             self.__vcsStatusChanged)
-                else:
-                    QApplication.restoreOverrideCursor()
         
     def reopenProject(self):
         """
@@ -4774,10 +4762,11 @@
         if not self.isOpen():
             return
         
-        name = self.getRelativePath(fullname)
-        self.prepareRepopulateItem.emit(name)
-        self.__model.repopulateItem(name)
-        self.completeRepopulateItem.emit(name)
+        with E5OverrideCursor():
+            name = self.getRelativePath(fullname)
+            self.prepareRepopulateItem.emit(name)
+            self.__model.repopulateItem(name)
+            self.completeRepopulateItem.emit(name)
     
     ##############################################################
     ## Below is the VCS interface
@@ -4825,25 +4814,26 @@
             if not vcsExists:
                 if override:
                     # override failed, revert to original
-                    QApplication.restoreOverrideCursor()
+                    with E5OverridenCursor():
+                        E5MessageBox.critical(
+                            self.ui,
+                            self.tr("Version Control System"),
+                            self.tr(
+                                "<p>The selected VCS <b>{0}</b> could not be"
+                                " found. <br/>Reverting override.</p><p>{1}"
+                                "</p>")
+                            .format(vcsSystem, msg))
+                        self.pudata["VCSOVERRIDE"] = ""
+                    return self.initVCS(nooverride=True)
+                
+                with E5OverridenCursor():
                     E5MessageBox.critical(
                         self.ui,
                         self.tr("Version Control System"),
                         self.tr(
                             "<p>The selected VCS <b>{0}</b> could not be"
-                            " found. <br/>Reverting override.</p><p>{1}</p>")
-                        .format(vcsSystem, msg))
-                    self.pudata["VCSOVERRIDE"] = ""
-                    return self.initVCS(nooverride=True)
-                
-                QApplication.restoreOverrideCursor()
-                E5MessageBox.critical(
-                    self.ui,
-                    self.tr("Version Control System"),
-                    self.tr(
-                        "<p>The selected VCS <b>{0}</b> could not be"
-                        " found.<br/>Disabling version control.</p>"
-                        "<p>{1}</p>").format(vcsSystem, msg))
+                            " found.<br/>Disabling version control.</p>"
+                            "<p>{1}</p>").format(vcsSystem, msg))
                 vcs = None
                 if forProject:
                     self.pdata["VCS"] = 'None'
@@ -5843,3 +5833,6 @@
             "CompressionDisable": False,
             "PathPrefix": "",
         }
+
+#
+# eflag: noqa = M601

eric ide

mercurial