MultiProject/MultiProject.py

changeset 3197
4103c8013c36
parent 3190
a9a94491c4fd
child 3345
071afe8be2a1
diff -r cfc025de587c -r 4103c8013c36 MultiProject/MultiProject.py
--- a/MultiProject/MultiProject.py	Sat Jan 11 13:53:42 2014 +0100
+++ b/MultiProject/MultiProject.py	Sat Jan 11 20:03:38 2014 +0100
@@ -89,11 +89,13 @@
         self.opened = False
         self.projects = []      # list of project info; each info entry is
                                 # a dictionary
-                                # 'name'        : Name of the project
-                                # 'file'        : project filename
+                                # 'name'        : name of the project
+                                # 'file'        : project file name
                                 # 'master'      : flag indicating the master
                                 #                 project
                                 # 'description' : description of the project
+                                # 'category'    : name of the group
+        self.categories = []
     
     def __loadRecent(self):
         """
@@ -188,6 +190,23 @@
                 self.projects.remove(project)
             self.setDirty(True)
     
+    def __extractCategories(self):
+        """
+        Private slot to extract the categories used in the project definitions.
+        """
+        for project in self.projects:
+            if project['category'] and \
+                    project['category'] not in self.categories:
+                self.categories.append(project['category'])
+    
+    def getCategories(self):
+        """
+        Public method to get the list of defined categories.
+        
+        @return list of categories (list of string)
+        """
+        return [c for c in self.categories if c]
+    
     def __readMultiProject(self, fn):
         """
         Private method to read in a multi project (.e4m) file.
@@ -216,6 +235,8 @@
         self.pfile = os.path.abspath(fn)
         self.ppath = os.path.abspath(os.path.dirname(fn))
         
+        self.__extractCategories()
+        
         # insert filename into list of recently opened multi projects
         self.__syncRecent()
         
@@ -278,9 +299,10 @@
             startdir = self.ppath
         if not startdir:
             startdir = Preferences.getMultiProject("Workspace")
-        dlg = AddProjectDialog(self.ui, startdir=startdir)
+        dlg = AddProjectDialog(self.ui, startdir=startdir,
+                               categories=self.categories)
         if dlg.exec_() == QDialog.Accepted:
-            name, filename, isMaster, description = dlg.getData()
+            name, filename, isMaster, description, category = dlg.getData()
             
             # step 1: check, if project was already added
             for project in self.projects:
@@ -302,8 +324,11 @@
                 'file': filename,
                 'master': isMaster,
                 'description': description,
+                'category': category,
             }
             self.projects.append(project)
+            if category not in self.categories:
+                self.categories.append(category)
             self.projectAdded.emit(project)
             self.setDirty(True)
     
@@ -326,10 +351,13 @@
         # step 2: change the entry
         for project in self.projects:
             if project['file'] == pro['file']:
-                # project filename is not changeable via interface
+                # project file name is not changeable via interface
                 project['name'] = pro['name']
                 project['master'] = pro['master']
                 project['description'] = pro['description']
+                project['category'] = pro['category']
+                if project['category'] not in self.categories:
+                    self.categories.append(project['category'])
                 self.projectDataChanged.emit(project)
                 self.setDirty(True)
     
@@ -420,7 +448,7 @@
                 self.tr("Open multiproject"),
                 Preferences.getMultiProject("Workspace") or
                 Utilities.getHomeDir(),
-                self.tr("Multiproject Files (*.e4m)"))
+                self.tr("Multiproject Files (*.e5m *.e4m)"))
             
             if fn == "":
                 fn = None
@@ -457,6 +485,9 @@
         """
         if self.isDirty():
             if len(self.pfile) > 0:
+                if self.pfile.endswith(".e4m"):
+                    self.pfile = self.pfile.replace(".e4m", ".e5m")
+                    self.__syncRecent()
                 ok = self.__writeMultiProject()
             else:
                 ok = self.saveMultiProjectAs()
@@ -470,7 +501,7 @@
         
         @return flag indicating success (boolean)
         """
-        defaultFilter = self.tr("Multiproject Files (*.e4m)")
+        defaultFilter = self.tr("Multiproject Files (*.e5m)")
         if self.ppath:
             defaultPath = self.ppath
         else:
@@ -480,7 +511,7 @@
             self.parent(),
             self.tr("Save multiproject as"),
             defaultPath,
-            self.tr("Multiproject Files (*.e4m)"),
+            self.tr("Multiproject Files (*.e5m)"),
             defaultFilter,
             E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
         

eric ide

mercurial