Project/Project.py

changeset 2040
4cefd094353b
parent 2034
8de0fc1f7fef
child 2171
c7dd548d67d8
--- a/Project/Project.py	Wed Sep 12 19:41:50 2012 +0200
+++ b/Project/Project.py	Thu Sep 13 18:21:36 2012 +0200
@@ -196,6 +196,12 @@
         
         self.ui = parent
         
+        self.__progLanguages = [
+            "Python2",
+            "Python3",
+            "Ruby",
+        ]
+        
         self.sourceExtensions = {
             "Python2": Preferences.getPython("PythonExtensions"),
             "Python3": Preferences.getPython("Python3Extensions"),
@@ -235,6 +241,14 @@
         self.applicationDiagram = None
         self.loadedDiagram = None
         
+    def getProgrammingLanguages(self):
+        """
+        Public method to get the programming languages supported by project.
+        
+        @return list of supported programming languages (list of string)
+        """
+        return self.__progLanguages[:]
+    
     def __initProjectTypes(self):
         """
         Private method to initialize the list of supported project types.
@@ -243,35 +257,59 @@
         self.__fileTypeCallbacks = {}
         self.__lexerAssociationCallbacks = {}
         self.__binaryTranslationsCallbacks = {}
+        
         self.__projectTypes["Qt4"] = self.trUtf8("Qt4 GUI")
         self.__projectTypes["Qt4C"] = self.trUtf8("Qt4 Console")
         self.__projectTypes["E4Plugin"] = self.trUtf8("Eric Plugin")
         self.__projectTypes["Console"] = self.trUtf8("Console")
         self.__projectTypes["Other"] = self.trUtf8("Other")
+        
+        self.__projectProgLanguages = {
+            "Python2": ["Qt4", "Qt4C", "E4Plugin", "Console", "Other"],
+            "Python3": ["Qt4", "Qt4C", "E4Plugin", "Console", "Other"],
+            "Ruby": ["Qt4", "Qt4C", "Console", "Other"],
+        }
+        
         if Utilities.checkPyside():
             self.__projectTypes["PySide"] = self.trUtf8("PySide GUI")
             self.__projectTypes["PySideC"] = self.trUtf8("PySide Console")
+            self.__projectProgLanguages["Python2"].extend(["PySide", "PySideC"])
+            self.__projectProgLanguages["Python3"].extend(["PySide", "PySideC"])
         else:
             pass
         
-    def getProjectTypes(self):
+    def getProjectTypes(self, progLanguage=""):
         """
         Public method to get the list of supported project types.
         
+        @param progLanguage programming language to get project types for (string)
         @return reference to the dictionary of project types.
         """
-        return self.__projectTypes
-        
-    def hasProjectType(self, type_):
+        if progLanguage and progLanguage in self.__projectProgLanguages:
+            ptypes = {}
+            for ptype in self.__projectProgLanguages[progLanguage]:
+                ptypes[ptype] = self.__projectTypes[ptype]
+            return ptypes
+        else:
+            return self.__projectTypes
+        
+    def hasProjectType(self, type_, progLanguage=""):
         """
         Public method to check, if a project type is already registered.
         
-        @param type_ internal type designator to be unregistered (string)
-        """
-        return type_ in self.__projectTypes
+        @param type_ internal type designator (string)
+        @param progLanguage programming language of the project type (string)
+        @return flag indicating presence of the project type (boolean)
+        """
+        if progLanguage:
+            return progLanguage in self.__projectProgLanguages and \
+                type_ in self.__projectProgLanguages[progLanguage]
+        else:
+            return type_ in self.__projectTypes
         
     def registerProjectType(self, type_, description, fileTypeCallback=None,
-        binaryTranslationsCallback=None, lexerAssociationCallback=None):
+        binaryTranslationsCallback=None, lexerAssociationCallback=None,
+        progLanguages=None):
         """
         Public method to register a project type.
         
@@ -285,18 +323,48 @@
         @keyparam lexerAssociationCallback reference to a method returning the
             lexer type to be used for syntax highlighting given the name of
             a file
-        """
+        @keyparam progLanguages programming languages supported by the
+            project type (list of string)
+        """
+        if progLanguages:
+            for progLanguage in progLanguages:
+                if progLanguage not in self.__projectProgLanguages:
+                    E5MessageBox.critical(self.ui,
+                        self.trUtf8("Registering Project Type"),
+                        self.trUtf8("""<p>The Programming Language <b>{0}</b> is not"""
+                                    """ supported.</p>""")\
+                            .format(progLanguage)
+                    )
+                    return
+                
+                if type_ in self.__projectProgLanguages[progLanguage]:
+                    E5MessageBox.critical(self.ui,
+                        self.trUtf8("Registering Project Type"),
+                        self.trUtf8("""<p>The Project type <b>{0}</b> is already"""
+                                    """ registered with Programmin Language"""
+                                    """ <b>{1}</b>.</p>""")\
+                            .format(type_, progLanguage)
+                    )
+                    return
+            
         if type_ in self.__projectTypes:
             E5MessageBox.critical(self.ui,
                 self.trUtf8("Registering Project Type"),
-                self.trUtf8("""<p>The Project type <b>{0}</b> already exists.</p>""")\
-                    .format(type_)
+                self.trUtf8("""<p>The Project type <b>{0}</b> is already"""
+                            """ registered.</p>""").format(type_)
             )
         else:
             self.__projectTypes[type_] = description
             self.__fileTypeCallbacks[type_] = fileTypeCallback
             self.__lexerAssociationCallbacks[type_] = lexerAssociationCallback
             self.__binaryTranslationsCallbacks[type_] = binaryTranslationsCallback
+            if progLanguages:
+                for progLanguage in progLanguages:
+                    self.__projectProgLanguages[progLanguage].append(type_)
+            else:
+                # no specific programming languages given -> add to all
+                for progLanguage in self.__projectProgLanguages:
+                    self.__projectProgLanguages[progLanguage].append(type_)
         
     def unregisterProjectType(self, type_):
         """
@@ -304,6 +372,9 @@
         
         @param type_ internal type designator to be unregistered (string)
         """
+        for progLanguage in self.__projectProgLanguages:
+            if type in self.__projectProgLanguages[progLanguage]:
+                self.__projectProgLanguages[progLanguage].remove(type_)
         if type_ in self.__projectTypes:
             del self.__projectTypes[type_]
         if type_ in self.__fileTypeCallbacks:

eric ide

mercurial