ProjectDjango/Project.py

changeset 20
09e9084796de
parent 16
54c41e37792d
child 26
2dd206cd1aa2
--- a/ProjectDjango/Project.py	Sun Jun 16 14:51:36 2013 +0200
+++ b/ProjectDjango/Project.py	Tue Jun 18 19:27:03 2013 +0200
@@ -699,6 +699,24 @@
     ## methods below implement the various hook related functions
     ##################################################################
     
+    def registerOpenHook(self):
+        """
+        Public method to register the open hook to open a translations file
+        in a translations editor.
+        """
+        if self.__hooksInstalled:
+            editor = self.__plugin.getPreferences("TranslationsEditor")
+            try:
+                if editor:
+                    self.__translationsBrowser.addHookMethodAndMenuEntry("open",
+                        self.openPOEditor,
+                        self.trUtf8("Open with {0}").format(os.path.basename(editor)))
+                else:
+                    self.__translationsBrowser.removeHookMethod("open")
+            except KeyError:
+                # ignore for older eric5 versions
+                pass
+    
     def projectOpenedHooks(self):
         """
         Public method to add our hook methods.
@@ -730,6 +748,8 @@
                 self.trUtf8("Compile selected catalogs"))
             
             self.__hooksInstalled = True
+            
+            self.registerOpenHook()
     
     def projectClosedHooks(self):
         """
@@ -747,6 +767,11 @@
             self.__translationsBrowser.removeHookMethod("generateSelectedWithObsolete")
             self.__translationsBrowser.removeHookMethod("releaseAll")
             self.__translationsBrowser.removeHookMethod("releaseSelected")
+            try:
+                self.__translationsBrowser.removeHookMethod("open")
+            except KeyError:
+                # ignore for older eric5 versions
+                pass
             self.__translationsBrowser = None
             
         self.__hooksInstalled = False
@@ -2349,3 +2374,22 @@
                     fullName = os.path.join(entry[0], fileName)
                     if fullName.endswith('.mo'):
                         self.__e5project.appendFile(fullName)
+    
+    def openPOEditor(self, poFile):
+        """
+        Public method to edit the given file in an external .po editor.
+        
+        @param poFile name of the .po file (string)
+        """
+        editor = self.__plugin.getPreferences("TranslationsEditor")
+        if poFile.endswith(".po") and editor:
+            try:
+                wd = self.__sitePath()
+            except DjangoNoSiteSelectedException:
+                wd = ""
+            started, pid = QProcess.startDetached(editor, [poFile], wd)
+            if not started:
+                E5MessageBox.critical(None,
+                    self.trUtf8('Process Generation Error'),
+                    self.trUtf8('The translations editor process ({0}) could not'
+                                ' be started.').format(os.path.basename(editor)))

eric ide

mercurial