Project/ProjectTranslationsBrowser.py

branch
Py2 comp.
changeset 3057
10516539f238
parent 2847
1843ef6e2656
parent 3010
befeff46ec0f
child 3058
0a02c433f52d
diff -r 9986ec0e559a -r 10516539f238 Project/ProjectTranslationsBrowser.py
--- a/Project/ProjectTranslationsBrowser.py	Tue Oct 15 22:03:54 2013 +0200
+++ b/Project/ProjectTranslationsBrowser.py	Fri Oct 18 23:00:41 2013 +0200
@@ -4,7 +4,8 @@
 #
 
 """
-Module implementing a class used to display the translations part of the project.
+Module implementing a class used to display the translations part of the
+project.
 """
 
 from __future__ import unicode_literals    # __IGNORE_WARNING__
@@ -39,18 +40,18 @@
     A class used to display the translations part of the project.
     
     @signal linguistFile(str) emitted to open a translation file with
-            Qt-Linguist
+        Qt-Linguist
     @signal appendStdout(str) emitted after something was received from
-            a QProcess on stdout
+        a QProcess on stdout
     @signal appendStderr(str) emitted after something was received from
-            a QProcess on stderr
+        a QProcess on stderr
     @signal sourceFile(str) emitted to open a translation file in an editor
-    @signal closeSourceWindow(str) emitted after a file has been removed/deleted
-            from the project
-    @signal trpreview(list of str, bool = False) emitted to preview translations in the
-            translations previewer
-    @signal showMenu(str, QMenu) emitted when a menu is about to be shown. The name
-            of the menu and a reference to the menu are given.
+    @signal closeSourceWindow(str) emitted after a file has been
+        removed/deleted from the project
+    @signal trpreview(list of str, bool = False) emitted to preview
+        translations in the translations previewer
+    @signal showMenu(str, QMenu) emitted when a menu is about to be shown.
+        The name of the menu and a reference to the menu are given.
     """
     appendStdout = pyqtSignal(str)
     appendStderr = pyqtSignal(str)
@@ -63,7 +64,8 @@
         @param project reference to the project object
         @param parent parent widget of this browser (QWidget)
         """
-        ProjectBaseBrowser.__init__(self, project, ProjectBrowserTranslationType, parent)
+        ProjectBaseBrowser.__init__(self, project, 
+                                    ProjectBrowserTranslationType, parent)
         self.isTranslationsBrowser = True
         
         self.selectedItemsFilter = \
@@ -73,8 +75,9 @@
 
         self.setWhatsThis(self.trUtf8(
             """<b>Project Translations Browser</b>"""
-            """<p>This allows to easily see all translations contained in the current"""
-            """ project. Several actions can be executed via the context menu.</p>"""
+            """<p>This allows to easily see all translations contained in"""
+            """ the current project. Several actions can be executed via"""
+            """ the context menu.</p>"""
         ))
         
         self.__lreleaseProcesses = []
@@ -110,7 +113,8 @@
         
         self.menu = QMenu(self)
         if self.project.getProjectType() in \
-                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin", "PySide", "PySideC"]:
+                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin",
+                 "PySide", "PySideC"]:
             act = self.menu.addAction(self.trUtf8('Generate translation'),
                 self.__generateSelected)
             self.tsMenuActions.append(act)
@@ -180,7 +184,8 @@
             if self.hooks["generateAllWithObsolete"] is not None:
                 act = self.menu.addAction(
                     self.hooksMenuEntries.get("generateAllWithObsolete",
-                        self.trUtf8('Generate all translations (with obsolete)')),
+                        self.trUtf8(
+                            'Generate all translations (with obsolete)')),
                     self.__generateObsoleteAll)
                 self.tsprocMenuActions.append(act)
             self.menu.addSeparator()
@@ -211,7 +216,8 @@
         act = self.menu.addAction(self.trUtf8('Remove from project'),
             self.__removeLanguageFile)
         self.menuActions.append(act)
-        act = self.menu.addAction(self.trUtf8('Delete'), self.__deleteLanguageFile)
+        act = self.menu.addAction(
+            self.trUtf8('Delete'), self.__deleteLanguageFile)
         self.menuActions.append(act)
         self.menu.addSeparator()
         self.__addTranslationAct = self.menu.addAction(
@@ -226,19 +232,23 @@
         
         self.backMenu = QMenu(self)
         if self.project.getProjectType() in \
-                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin", "PySide", "PySideC"]:
-            act = self.backMenu.addAction(self.trUtf8('Generate all translations'),
+                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin",
+                 "PySide", "PySideC"]:
+            act = self.backMenu.addAction(
+                self.trUtf8('Generate all translations'),
                 self.__generateAll)
             self.tsprocBackMenuActions.append(act)
             act = self.backMenu.addAction(
                 self.trUtf8('Generate all translations (with obsolete)'),
                 self.__generateObsoleteAll)
             self.tsprocBackMenuActions.append(act)
-            act = self.backMenu.addAction(self.trUtf8('Release all translations'),
+            act = self.backMenu.addAction(
+                self.trUtf8('Release all translations'),
                 self.__releaseAll)
             self.qmprocBackMenuActions.append(act)
             self.backMenu.addSeparator()
-            act = self.backMenu.addAction(self.trUtf8('Preview all translations'),
+            act = self.backMenu.addAction(
+                self.trUtf8('Preview all translations'),
                 self.__TRPreview)
         else:
             if self.hooks["extractMessages"] is not None:
@@ -256,7 +266,8 @@
             if self.hooks["generateAllWithObsolete"] is not None:
                 act = self.backMenu.addAction(
                     self.hooksMenuEntries.get("generateAllWithObsolete",
-                        self.trUtf8('Generate all translations (with obsolete)')),
+                        self.trUtf8(
+                            'Generate all translations (with obsolete)')),
                     self.__generateObsoleteAll)
                 self.tsprocBackMenuActions.append(act)
             if self.hooks["releaseAll"] is not None:
@@ -277,8 +288,10 @@
         # create the menu for multiple selected files
         self.multiMenu = QMenu(self)
         if self.project.getProjectType() in \
-                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin", "PySide", "PySideC"]:
-            act = self.multiMenu.addAction(self.trUtf8('Generate translations'),
+                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin",
+                 "PySide", "PySideC"]:
+            act = self.multiMenu.addAction(
+                self.trUtf8('Generate translations'),
                 self.__generateSelected)
             self.tsMultiMenuActions.append(act)
             self.tsprocMultiMenuActions.append(act)
@@ -347,26 +360,31 @@
         act = self.multiMenu.addAction(self.trUtf8('Remove from project'),
             self.__removeLanguageFile)
         self.multiMenuActions.append(act)
-        act = self.multiMenu.addAction(self.trUtf8('Delete'), self.__deleteLanguageFile)
+        act = self.multiMenu.addAction(
+            self.trUtf8('Delete'), self.__deleteLanguageFile)
         self.multiMenuActions.append(act)
         self.multiMenu.addSeparator()
         self.multiMenu.addAction(self.trUtf8('Configure...'), self._configure)
 
         self.dirMenu = QMenu(self)
         if self.project.getProjectType() in \
-                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin", "PySide", "PySideC"]:
-            act = self.dirMenu.addAction(self.trUtf8('Generate all translations'),
+                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin",
+                 "PySide", "PySideC"]:
+            act = self.dirMenu.addAction(
+                self.trUtf8('Generate all translations'),
                 self.__generateAll)
             self.tsprocDirMenuActions.append(act)
             act = self.dirMenu.addAction(
                 self.trUtf8('Generate all translations (with obsolete)'),
                 self.__generateObsoleteAll)
             self.tsprocDirMenuActions.append(act)
-            act = self.dirMenu.addAction(self.trUtf8('Release all translations'),
+            act = self.dirMenu.addAction(
+                self.trUtf8('Release all translations'),
                 self.__releaseAll)
             self.qmprocDirMenuActions.append(act)
             self.dirMenu.addSeparator()
-            act = self.dirMenu.addAction(self.trUtf8('Preview all translations'),
+            act = self.dirMenu.addAction(
+                self.trUtf8('Preview all translations'),
                 self.__TRPreview)
         else:
             if self.hooks["extractMessages"] is not None:
@@ -385,7 +403,8 @@
             if self.hooks["generateAllWithObsolete"] is not None:
                 act = self.dirMenu.addAction(
                     self.hooksMenuEntries.get("generateAllWithObsolete",
-                        self.trUtf8('Generate all translations (with obsolete)')),
+                        self.trUtf8(
+                            'Generate all translations (with obsolete)')),
                     self.__generateObsoleteAll)
                 self.tsprocDirMenuActions.append(act)
             if self.hooks["releaseAll"] is not None:
@@ -395,7 +414,8 @@
                     self.__releaseAll)
                 self.qmprocDirMenuActions.append(act)
         self.dirMenu.addSeparator()
-        act = self.dirMenu.addAction(self.trUtf8('Delete'), self._deleteDirectory)
+        act = self.dirMenu.addAction(
+            self.trUtf8('Delete'), self._deleteDirectory)
         self.dirMenuActions.append(act)
         self.dirMenu.addSeparator()
         self.__addTranslationDirAct = self.dirMenu.addAction(
@@ -434,7 +454,8 @@
                 if index.isValid():
                     self._selectSingleItem(index)
                     categories = self.getSelectedItemsCountCategorized(
-                        [ProjectBrowserFileItem, ProjectBrowserSimpleDirectoryItem])
+                        [ProjectBrowserFileItem,
+                         ProjectBrowserSimpleDirectoryItem])
                     cnt = categories["sum"]
                         
             bfcnt = categories[str(ProjectBrowserFileItem)]
@@ -460,7 +481,8 @@
         Private slot called by the menu aboutToShow signal.
         """
         if self.project.getProjectType() in \
-                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin", "PySide", "PySideC"]:
+                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin",
+                 "PySide", "PySideC"]:
             tsFiles = 0
             qmFiles = 0
             itmList = self.getSelectedItems()
@@ -489,7 +511,8 @@
             if self.lreleaseProcRunning:
                 for act in self.qmprocMenuActions:
                     act.setEnabled(True)
-        self.__addTranslationAct.setEnabled(self.project.getTranslationPattern() != "")
+        self.__addTranslationAct.setEnabled(
+            self.project.getTranslationPattern() != "")
         
         ProjectBaseBrowser._showContextMenu(self, self.menu)
         
@@ -500,7 +523,8 @@
         Private slot called by the multiMenu aboutToShow signal.
         """
         if self.project.getProjectType() in \
-                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin", "PySide", "PySideC"]:
+                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin",
+                 "PySide", "PySideC"]:
             tsFiles = 0
             qmFiles = 0
             itmList = self.getSelectedItems()
@@ -539,14 +563,16 @@
         Private slot called by the dirMenu aboutToShow signal.
         """
         if self.project.getProjectType() in \
-                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin", "PySide", "PySideC"]:
+                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin",
+                 "PySide", "PySideC"]:
             if self.pylupdateProcRunning:
                 for act in self.tsprocDirMenuActions:
                     act.setEnabled(False)
             if self.lreleaseProcRunning:
                 for act in self.qmprocDirMenuActions:
                     act.setEnabled(True)
-        self.__addTranslationDirAct.setEnabled(self.project.getTranslationPattern() != "")
+        self.__addTranslationDirAct.setEnabled(
+            self.project.getTranslationPattern() != "")
         
         ProjectBaseBrowser._showContextMenuDir(self, self.dirMenu)
         
@@ -557,7 +583,8 @@
         Private slot called by the backMenu aboutToShow signal.
         """
         if self.project.getProjectType() in \
-                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin", "PySide", "PySideC"]:
+                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin",
+                 "PySide", "PySideC"]:
             if self.pylupdateProcRunning:
                 for act in self.tsprocBackMenuActions:
                     act.setEnabled(False)
@@ -628,7 +655,8 @@
         
         translationFiles = [itm.fileName() for itm in itmList]
         
-        from UI.DeleteFilesConfirmationDialog import DeleteFilesConfirmationDialog
+        from UI.DeleteFilesConfirmationDialog import \
+            DeleteFilesConfirmationDialog
         dlg = DeleteFilesConfirmationDialog(self.parent(),
             self.trUtf8("Delete translation files"),
             self.trUtf8("Do you really want to delete these translation files"
@@ -657,7 +685,8 @@
                     for trfile in trfiles:
                         if trfile.startswith(dname):
                             if trfile not in fileNames:
-                                fileNames.append(os.path.join(self.project.ppath, trfile))
+                                fileNames.append(
+                                    os.path.join(self.project.ppath, trfile))
                 else:
                     fn = itm.fileName()
                     if fn not in fileNames:
@@ -675,17 +704,17 @@
         """
         self.__TRPreview(True)
     
-    ############################################################################
+    ###########################################################################
     ##  Methods to support the generation and release commands
-    ############################################################################
+    ###########################################################################
     
     def __writeTempProjectFile(self, langs, filter):
         """
-        Private method to write a temporary project file suitable for pylupdate and
-        lrelease.
+        Private method to write a temporary project file suitable for
+        pylupdate and lrelease.
         
-        @param langs list of languages to include in the process. An empty list (default)
-            means that all translations should be included.
+        @param langs list of languages to include in the process. An empty
+            list (default) means that all translations should be included.
             (list of ProjectBrowserFileItem)
         @param filter list of source file extension that should be considered
             (list of strings)
@@ -777,7 +806,8 @@
             except IOError:
                 E5MessageBox.critical(self,
                     self.trUtf8("Write temporary project file"),
-                    self.trUtf8("<p>The temporary project file <b>{0}</b> could not"
+                    self.trUtf8(
+                        "<p>The temporary project file <b>{0}</b> could not"
                         " be written.</p>").format(outFile))
         
         if len(self.__tmpProjects) == 0:
@@ -861,9 +891,9 @@
             s += error
             self.appendStderr.emit(s)
     
-    ############################################################################
+    ###########################################################################
     ##  Methods for the generation commands
-    ############################################################################
+    ###########################################################################
     
     def __extractMessages(self):
         """
@@ -884,23 +914,28 @@
             if ui.notificationsEnabled():
                 ui.showNotification(UI.PixmapCache.getPixmap("linguist48.png"),
                     self.trUtf8("Translation file generation"),
-                    self.trUtf8("The generation of the translation files (*.ts)"
+                    self.trUtf8(
+                        "The generation of the translation files (*.ts)"
                         " was successful."))
             else:
                 E5MessageBox.information(self,
                     self.trUtf8("Translation file generation"),
-                    self.trUtf8("The generation of the translation files (*.ts)"
+                    self.trUtf8(
+                        "The generation of the translation files (*.ts)"
                         " was successful."))
         else:
             E5MessageBox.critical(self,
                 self.trUtf8("Translation file generation"),
-                self.trUtf8("The generation of the translation files (*.ts) has failed."))
+                self.trUtf8(
+                    "The generation of the translation files (*.ts) has"
+                    " failed."))
         
         proc = self.sender()
         for index in range(len(self.__pylupdateProcesses)):
             if proc == self.__pylupdateProcesses[index][0]:
                 try:
-                    self.__tmpProjects.remove(self.__pylupdateProcesses[index][1])
+                    self.__tmpProjects.remove(
+                        self.__pylupdateProcesses[index][1])
                     os.remove(self.__pylupdateProcesses[index][1])
                 except EnvironmentError:
                     pass
@@ -912,7 +947,8 @@
         
     def __generateTSFile(self, noobsolete=False, generateAll=True):
         """
-        Private method used to run pylupdate/pylupdate4 to generate the .ts files.
+        Private method used to run pylupdate/pylupdate4 to generate the .ts
+        files.
         
         @param noobsolete flag indicating whether obsolete entries should be
             kept (boolean)
@@ -928,7 +964,8 @@
         if generateAll:
             if noobsolete:
                 if self.hooks["generateAll"] is not None:
-                    self.hooks["generateAll"](self.project.pdata["TRANSLATIONS"])
+                    self.hooks["generateAll"](
+                        self.project.pdata["TRANSLATIONS"])
                     return
             else:
                 if self.hooks["generateAllWithObsolete"] is not None:
@@ -951,7 +988,8 @@
         
         # generate a minimal temporary projectfile suitable for pylupdate
         self.__tmpProjects = []
-        if self.project.pdata["PROGLANGUAGE"][0] in ["Python", "Python2", "Python3"]:
+        if self.project.pdata["PROGLANGUAGE"][0] in \
+                ["Python", "Python2", "Python3"]:
             ok = self.__writeTempProjectFile(langs, [".py"])
         else:
             ok = False
@@ -1024,7 +1062,8 @@
         
     def __generateSelected(self):
         """
-        Private method to generate selected translation files (.ts) for Qt Linguist.
+        Private method to generate selected translation files (.ts) for
+        Qt Linguist.
         
         All obsolete strings are removed from the .ts file.
         """
@@ -1032,19 +1071,23 @@
         
     def __generateObsoleteSelected(self):
         """
-        Private method to generate selected translation files (.ts) for Qt Linguist.
+        Private method to generate selected translation files (.ts) for
+        Qt Linguist.
         
         Obsolete strings are kept.
         """
         self.__generateTSFile(noobsolete=False, generateAll=False)
     
-    ############################################################################
+    ###########################################################################
     ##  Methods for the release commands
-    ############################################################################
+    ###########################################################################
     
     def __releaseTSFileDone(self, exitCode, exitStatus):
         """
         Private slot to handle the finished signal of the lrelease process.
+        
+        @param exitCode exit code of the process (integer)
+        @param exitStatus exit status of the process (QProcess.ExitStatus)
         """
         self.lreleaseProcRunning = False
         if exitStatus == QProcess.NormalExit and exitCode == 0:
@@ -1060,8 +1103,9 @@
                     self.trUtf8("The release of the translation files (*.qm)"
                         " was successful."))
             if self.project.pdata["TRANSLATIONSBINPATH"]:
-                target = os.path.join(self.project.ppath,
-                                      self.project.pdata["TRANSLATIONSBINPATH"][0])
+                target = os.path.join(
+                    self.project.ppath,
+                    self.project.pdata["TRANSLATIONSBINPATH"][0])
                 for langFile in self.project.pdata["TRANSLATIONS"][:]:
                     if langFile.endswith('.ts'):
                         qmFile = os.path.join(self.project.ppath,
@@ -1071,13 +1115,15 @@
         else:
             E5MessageBox.critical(self,
                 self.trUtf8("Translation file release"),
-                self.trUtf8("The release of the translation files (*.qm) has failed."))
+                self.trUtf8(
+                    "The release of the translation files (*.qm) has failed."))
         
         proc = self.sender()
         for index in range(len(self.__lreleaseProcesses)):
             if proc == self.__lreleaseProcesses[index][0]:
                 try:
-                    self.__tmpProjects.remove(self.__lreleaseProcesses[index][1])
+                    self.__tmpProjects.remove(
+                        self.__lreleaseProcesses[index][1])
                     os.remove(self.__lreleaseProcesses[index][1])
                 except EnvironmentError:
                     pass
@@ -1114,7 +1160,8 @@
         
         # generate a minimal temporary projectfile suitable for lrelease
         self.__tmpProjects = []
-        if self.project.pdata["PROGLANGUAGE"][0] in ["Python", "Python2", "Python3"]:
+        if self.project.pdata["PROGLANGUAGE"][0] in \
+                ["Python", "Python2", "Python3"]:
             ok = self.__writeTempProjectFile(langs, [".py"])
         else:
             ok = False
@@ -1122,7 +1169,8 @@
             return
         
         if self.project.getProjectType() in \
-                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin", "PySide", "PySideC"]:
+                ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin",
+                 "PySide", "PySideC"]:
             lrelease = os.path.join(
                     Utilities.getQtBinariesPath(),
                     Utilities.generateQtToolName("lrelease"))
@@ -1176,9 +1224,9 @@
         """
         self.__releaseTSFile(generateAll=True)
     
-    ############################################################################
+    ###########################################################################
     ## Support for hooks below
-    ############################################################################
+    ###########################################################################
     
     def _initHookMethods(self):
         """
@@ -1190,7 +1238,8 @@
         <li>generateAll: takes list of filenames as parameter</li>
         <li>generateAllWithObsolete: takes list of filenames as parameter</li>
         <li>generateSelected: takes list of filenames as parameter</li>
-        <li>generateSelectedWithObsolete: takes list of filenames as parameter</li>
+        <li>generateSelectedWithObsolete: takes list of filenames as
+            parameter</li>
         <li>releaseAll: takes list of filenames as parameter</li>
         <li>releaseSelected: takes list of filenames as parameter</li>
         <li>open: takes a filename as parameter</li>

eric ide

mercurial