ProjectFlask/Project.py

changeset 11
da6ef8ab8268
parent 9
79094fb72c18
child 12
68ee221cd0cb
--- a/ProjectFlask/Project.py	Sun Nov 15 17:35:48 2020 +0100
+++ b/ProjectFlask/Project.py	Sun Nov 15 19:53:56 2020 +0100
@@ -53,6 +53,7 @@
         self.__virtualEnvManager = e5App().getObject("VirtualEnvManager")
         
         self.__menus = {}   # dictionary with references to menus
+        self.__hooksInstalled = False
          
         self.__serverDialog = None
         self.__routesDialog = None
@@ -264,6 +265,78 @@
         """
         return list(self.__menus.keys())
     
+    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")
+            if editor:
+                self.__translationsBrowser.addHookMethodAndMenuEntry(
+                    "open", self.openPOEditor,
+                    self.tr("Open with {0}").format(
+                        os.path.basename(editor)))
+            else:
+                self.__translationsBrowser.removeHookMethod("open")
+    
+    def projectOpenedHooks(self):
+        """
+        Public method to add our hook methods.
+        """
+        if self.__e5project.getProjectType() == "Flask":
+##            self.__formsBrowser = (
+##                e5App().getObject("ProjectBrowser")
+##                .getProjectBrowser("forms"))
+##            self.__formsBrowser.addHookMethodAndMenuEntry(
+##                "newForm", self.newForm, self.tr("New template..."))
+##            
+            if self.flaskBabelAvailable():
+                self.__e5project.projectLanguageAddedByCode.connect(
+                    self.__projectLanguageAdded)
+                self.__translationsBrowser = (
+                    e5App().getObject("ProjectBrowser")
+                    .getProjectBrowser("translations"))
+                self.__translationsBrowser.addHookMethodAndMenuEntry(
+                    "extractMessages", self.extractMessages,
+                    self.tr("Extract Messages"))
+                self.__translationsBrowser.addHookMethodAndMenuEntry(
+                    "releaseAll", self.compileCatalogs,
+                    self.tr("Compile All Catalogs"))
+                self.__translationsBrowser.addHookMethodAndMenuEntry(
+                    "releaseSelected", self.compileSelectedCatalogs,
+                    self.tr("Compile Selected Catalogs"))
+                self.__translationsBrowser.addHookMethodAndMenuEntry(
+                    "generateAll", self.updateCatalogs,
+                    self.tr("Update All Catalogs"))
+                self.__translationsBrowser.addHookMethodAndMenuEntry(
+                    "generateSelected", self.updateSelectedCatalogs,
+                    self.tr("Update Selected Catalogs"))
+                
+                self.__hooksInstalled = True
+            
+                self.registerOpenHook()
+    
+    def projectClosedHooks(self):
+        """
+        Public method to remove our hook methods.
+        """
+        if self.__hooksInstalled:
+##            self.__formsBrowser.removeHookMethod("newForm")
+##            self.__formsBrowser = None
+##            
+            self.__e5project.projectLanguageAddedByCode.disconnect(
+                self.__projectLanguageAdded)
+            self.__translationsBrowser.removeHookMethod("extractMessages")
+            self.__translationsBrowser.removeHookMethod("releaseAll")
+            self.__translationsBrowser.removeHookMethod("releaseSelected")
+            self.__translationsBrowser.removeHookMethod("generateAll")
+            self.__translationsBrowser.removeHookMethod("generateSelected")
+            self.__translationsBrowser.removeHookMethod("open")
+            self.__translationsBrowser = None
+        
+        self.__hooksInstalled = False
+    
     ##################################################################
     ## slots below implement general functionality
     ##################################################################
@@ -275,8 +348,6 @@
         for dlg in (self.__serverDialog, self.__routesDialog):
             if dlg is not None:
                 dlg.close()
-##        if self.__serverProc is not None:
-##            self.__serverProcFinished()
     
     def supportedPythonVariants(self):
         """
@@ -583,3 +654,57 @@
         dlg = FlaskCommandDialog(self)
         if dlg.startCommand("init-db"):
             dlg.exec()
+    
+    ##################################################################
+    ## slots and methods below implement i18n and l10n support
+    ##################################################################
+    
+    def flaskBabelAvailable(self):
+        """
+        Public method to check, if the 'flask-babel' package is available.
+        
+        @return flag indicating the availability of 'flask-babel'
+        @rtype bool
+        """
+        venvName = self.__plugin.getPreferences("VirtualEnvironmentNamePy3")
+        interpreter = self.__virtualEnvManager.getVirtualenvInterpreter(
+            venvName)
+        if interpreter and Utilities.isinpath(interpreter):
+            detector = os.path.join(
+                os.path.dirname(__file__), "FlaskBabelDetector.py")
+            proc = QProcess()
+            proc.setProcessChannelMode(QProcess.MergedChannels)
+            proc.start(interpreter, [detector])
+            finished = proc.waitForFinished(30000)
+            if finished and proc.exitCode() == 0:
+                return True
+        
+        return False
+    
+    def __projectLanguageAdded(self, code):
+        # TODO: implement this with pybabel ...
+        pass
+    
+    def openPOEditor(self):
+        # TODO: implement this with pybabel ...
+        pass
+    
+    def extractMessages(self):
+        # TODO: implement this with pybabel ...
+        pass
+    
+    def compileCatalogs(self):
+        # TODO: implement this with pybabel ...
+        pass
+    
+    def compileSelectedCatalogs(self):
+        # TODO: implement this with pybabel ...
+        pass
+    
+    def updateCatalogs(self):
+        # TODO: implement this with pybabel ...
+        pass
+    
+    def updateSelectedCatalogs(self):
+        # TODO: implement this with pybabel ...
+        pass

eric ide

mercurial