Sort the modules and the categories in alphabetic order
[bertos.git] / wizard / BModulePage.py
index df2122f00c0e8db2c9fdeb75189b3b0a6826aafc..06de96380e37e41d477d6728db447a64bf80af36 100644 (file)
@@ -61,6 +61,7 @@ class BModulePage(BWizardPage):
                 moduleItem = QTreeWidgetItem(item, QStringList([module]))
                 moduleItem.setCheckState(0, Qt.Unchecked)
             self.pageContent.moduleTree.addTopLevelItem(item)
+        self.pageContent.moduleTree.sortItems(0, Qt.AscendingOrder)
         
     
     def _fillPropertyTable(self):
@@ -75,19 +76,25 @@ class BModulePage(BWizardPage):
             if len(configuration) > 0:
                 configurations = self._projectInfoRetrieve("CONFIGURATIONS")[configuration]
                 self.pageContent.propertyTable.setRowCount(len(configurations))
-                for index, property in enumerate(configurations):
-                    item = QTableWidgetItem(configurations[property]["brief"])
-                    item.setData(Qt.UserRole, qvariant_converter.convertString(property))
-                    self.pageContent.propertyTable.setItem(index, 0, item)
-                    if "type" in configurations[property]["informations"].keys() and configurations[property]["informations"]["type"] == "boolean":
-                        self._insertCheckBox(index, configurations[property]["value"])
-                    elif "type" in configurations[property]["informations"].keys() and configurations[property]["informations"]["type"] == "enum":
-                        self._insertComboBox(index, configurations[property]["value"], configurations[property]["informations"]["value_list"])
-                    elif "type" in configurations[property]["informations"] and configurations[property]["informations"]["type"] == "int":
-                        self._insertSpinBox(index, configurations[property]["value"], configurations[property]["informations"])
+                index = 0
+                for property in configurations:
+                    if "type" in configurations[property]["informations"] and configurations[property]["informations"]["type"] == "autoenabled":
+                        ## Doesn't show the hidden fields
+                        pass
                     else:
-                        # Not defined type, rendered as a text field
-                        self.pageContent.propertyTable.setItem(index, 1, QTableWidgetItem(property))
+                        item = QTableWidgetItem(configurations[property]["brief"])
+                        item.setData(Qt.UserRole, qvariant_converter.convertString(property))
+                        self.pageContent.propertyTable.setItem(index, 0, item)
+                        if "type" in configurations[property]["informations"].keys() and configurations[property]["informations"]["type"] == "boolean":
+                            self._insertCheckBox(index, configurations[property]["value"])
+                        elif "type" in configurations[property]["informations"].keys() and configurations[property]["informations"]["type"] == "enum":
+                            self._insertComboBox(index, configurations[property]["value"], configurations[property]["informations"]["value_list"])
+                        elif "type" in configurations[property]["informations"] and configurations[property]["informations"]["type"] == "int":
+                            self._insertSpinBox(index, configurations[property]["value"], configurations[property]["informations"])
+                        else:
+                            # Not defined type, rendered as a text field
+                            self.pageContent.propertyTable.setItem(index, 1, QTableWidgetItem(configurations[property]["value"]))
+                        index += 1
             else:
                 self.pageContent.propertyTable.setRowCount(0)
     
@@ -187,6 +194,7 @@ class BModulePage(BWizardPage):
             self._currentPropertyItem().setText(description + "\n" + name)
     
     def _setupUi(self):
+        self.pageContent.moduleTree.clear()
         self.pageContent.moduleTree.setHeaderHidden(True)
         self.pageContent.propertyTable.horizontalHeader().setResizeMode(QHeaderView.Stretch)
         self.pageContent.propertyTable.horizontalHeader().setVisible(False)
@@ -231,6 +239,7 @@ class BModulePage(BWizardPage):
             self._moduleSelected(module)
         else:
             self._moduleUnselected(module)
+            self.removeFileDependencies(module)
     
     def _moduleSelected(self, selectedModule):
         modules = self._projectInfoRetrieve("MODULES")
@@ -274,11 +283,18 @@ class BModulePage(BWizardPage):
     def selectDependencyCheck(self, module):
         unsatisfied = set()
         modules = self._projectInfoRetrieve("MODULES")
+        files = self._projectInfoRetrieve("FILES")
         for dependency in modules[module]["depends"]:
-            if not modules[dependency]["enabled"]:
+            if dependency in modules and not modules[dependency]["enabled"]:
                 unsatisfied |= set([dependency])
                 if dependency not in unsatisfied:
                     unsatisfied |= self.selectDependencyCheck(dependency)
+            if dependency not in modules:
+                if dependency in files:
+                    files[dependency] += 1
+                else:
+                    files[dependency] = 1
+        self._projectInfoStore("FILES", files)
         return unsatisfied
     
     def unselectDependencyCheck(self, dependency):
@@ -290,6 +306,17 @@ class BModulePage(BWizardPage):
                 if dependency not in unsatisfied:
                     unsatisfied |= self.unselectDependencyCheck(module)
         return unsatisfied
+    
+    def removeFileDependencies(self, module):
+        modules = self._projectInfoRetrieve("MODULES")
+        files = self._projectInfoRetrieve("FILES")
+        dependencies = modules[module]["depends"]
+        for dependency in dependencies:
+            if dependency in files:
+                files[dependency] -= 1
+                if files[dependency] == 0:
+                    del files[dependency]
+        self._projectInfoStore("FILES", files)
 
 class QControlGroup(QObject):
     def __init__(self):