Add infrastructure for recognize modules supported by the selected cpu
[bertos.git] / wizard / BModulePage.py
index 2a5e0a420f361dbde5545b24a7ce95a2ee4204fc..7c8472c3b5f83cc8236e80418667c1cab061a7ae 100644 (file)
@@ -27,103 +27,82 @@ class BModulePage(BWizardPage):
         BWizardPage.__init__(self, UI_LOCATION + "/module_select.ui")
         self.setTitle(self.tr("Configure the BeRTOS modules"))
         self._control_group = QControlGroup()
         BWizardPage.__init__(self, UI_LOCATION + "/module_select.ui")
         self.setTitle(self.tr("Configure the BeRTOS modules"))
         self._control_group = QControlGroup()
-        self._connectSignals()
+        ## special connection needed for the QControlGroup
+        self.connect(self._control_group, SIGNAL("stateChanged"), self.saveValue)
     
     
-    def reloadData(self):
+    ## Overloaded BWizardPage methods ##
+
+    def setupUi(self):
         """
         """
-        Overload of the BWizardPage reloadData method.
+        Overload of BWizardPage setupUi method.
         """
         """
-        QApplication.instance().setOverrideCursor(Qt.WaitCursor)
-        self._setupUi()
-        self._loadModuleData()
-        self._fillModuleTree()
-        QApplication.instance().restoreOverrideCursor()
+        self.pageContent.moduleTree.clear()
+        self.pageContent.moduleTree.setHeaderHidden(True)
+        self.pageContent.propertyTable.horizontalHeader().setResizeMode(QHeaderView.Stretch)
+        self.pageContent.propertyTable.horizontalHeader().setVisible(False)
+        self.pageContent.propertyTable.verticalHeader().setResizeMode(QHeaderView.ResizeToContents)
+        self.pageContent.propertyTable.verticalHeader().setVisible(False)
+        self.pageContent.propertyTable.setColumnCount(2)
+        self.pageContent.propertyTable.setRowCount(0)
+        self.pageContent.moduleLabel.setVisible(False)
     
     
-    def _setupButtonGroup(self):
+    def connectSignals(self):
         """
         """
-        Sets up the button group.
+        Overload of the BWizardPage connectSignals method.
         """
         """
-        self._button_group = QButtonGroup()
-        self._button_group.setExclusive(False)
-        self.connect(self._button_group, SIGNAL("buttonClicked(int)"), self._moduleSelectionChanged)
-    
-    def _loadModuleData(self):
+        self.connect(self.pageContent.moduleTree, SIGNAL("itemPressed(QTreeWidgetItem*, int)"), self.fillPropertyTable)
+        self.connect(self.pageContent.moduleTree, SIGNAL("itemChanged(QTreeWidgetItem*, int)"), self.dependencyCheck)
+        self.connect(self.pageContent.propertyTable, SIGNAL("itemSelectionChanged()"), self.showPropertyDescription)
+
+    def reloadData(self):
         """
         """
-        Loads the module data.
+        Overload of the BWizardPage reloadData method.
         """
         """
-        ## Load the module data only if it isn't already loaded
-        if self._projectInfoRetrieve("MODULES") == None \
-                and self._projectInfoRetrieve("LISTS") == None \
-                and self._projectInfoRetrieve("CONFIGURATIONS") == None:
-            try:
-                bertos_utils.loadModuleData(self._project())
-            except ModuleDefineException, e:
-                self._exceptionOccurred(self.tr("Error parsing line '%2' in file %1").arg(e.path).arg(e.line))
-            except EnumDefineException, e:
-                self._exceptionOccurred(self.tr("Error parsing line '%2' in file %1").arg(e.path).arg(e.line))
-            except ConfigurationDefineException, e:
-                self._exceptionOccurred(self.tr("Error parsing line '%2' in file %1").arg(e.path).arg(e.line))
+        QApplication.instance().setOverrideCursor(Qt.WaitCursor)
+        self.setupUi()
+        self.loadModuleData()
+        self.fillModuleTree()
+        QApplication.instance().restoreOverrideCursor()
     
     
-    def _fillModuleTree(self):
-        """
-        Fills the module tree with the module entries separated in categories.
-        """
-        modules = self._projectInfoRetrieve("MODULES")
-        if modules is None:
-            return
-        categories = {}
-        for module, information in modules.items():
-            if information["category"] not in categories.keys():
-                categories[information["category"]] = []
-            categories[information["category"]].append(module)
-        for category, module_list in categories.items():
-            item = QTreeWidgetItem(QStringList([category]))
-            for module in module_list:
-                enabled = modules[module]["enabled"]
-                module_item = QTreeWidgetItem(item, QStringList([module]))
-                if enabled:
-                    module_item.setCheckState(0, Qt.Checked)
-                else:
-                    module_item.setCheckState(0, Qt.Unchecked)
-            self.pageContent.moduleTree.addTopLevelItem(item)
-        self.pageContent.moduleTree.sortItems(0, Qt.AscendingOrder)
-        
+    ####
     
     
-    def _fillPropertyTable(self):
+    ## Slots ##
+
+    def fillPropertyTable(self):
         """
         Slot called when the user selects a module from the module tree.
         Fills the property table using the configuration parameters defined in
         the source tree.
         """
         """
         Slot called when the user selects a module from the module tree.
         Fills the property table using the configuration parameters defined in
         the source tree.
         """
-        module = self._currentModule()
+        module = self.currentModule()
         if module is not None:
             self._control_group.clear()
         if module is not None:
             self._control_group.clear()
-            configuration = self._projectInfoRetrieve("MODULES")[module]["configuration"]
-            module_description = self._projectInfoRetrieve("MODULES")[module]["description"]
+            configuration = self.projectInfo("MODULES")[module]["configuration"]
+            module_description = self.projectInfo("MODULES")[module]["description"]
             self.pageContent.moduleLabel.setText(module_description)
             self.pageContent.moduleLabel.setVisible(True)
             self.pageContent.propertyTable.clear()
             self.pageContent.propertyTable.setRowCount(0)
             if configuration != "":
             self.pageContent.moduleLabel.setText(module_description)
             self.pageContent.moduleLabel.setVisible(True)
             self.pageContent.propertyTable.clear()
             self.pageContent.propertyTable.setRowCount(0)
             if configuration != "":
-                configurations = self._projectInfoRetrieve("CONFIGURATIONS")[configuration]
+                configurations = self.projectInfo("CONFIGURATIONS")[configuration]
                 param_list = sorted(configurations["paramlist"])
                 index = 0
                 for i, property in param_list:
                     if "type" in configurations[property]["informations"] and configurations[property]["informations"]["type"] == "autoenabled":
                 param_list = sorted(configurations["paramlist"])
                 index = 0
                 for i, property in param_list:
                     if "type" in configurations[property]["informations"] and configurations[property]["informations"]["type"] == "autoenabled":
-                        ## Doesn't show the hidden fields
+                        # Doesn't show the hidden fields
                         pass
                     else:
                         pass
                     else:
-                        ## Set the row count to the current index + 1
+                        # Set the row count to the current index + 1
                         self.pageContent.propertyTable.setRowCount(index + 1)
                         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.pageContent.propertyTable.setRowCount(index + 1)
                         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"])
+                            self.insertCheckBox(index, configurations[property]["value"])
                         elif "type" in configurations[property]["informations"].keys() and configurations[property]["informations"]["type"] == "enum":
                         elif "type" in configurations[property]["informations"].keys() and configurations[property]["informations"]["type"] == "enum":
-                            self._insertComboBox(index, configurations[property]["value"], configurations[property]["informations"]["value_list"])
+                            self.insertComboBox(index, configurations[property]["value"], configurations[property]["informations"]["value_list"])
                         elif "type" in configurations[property]["informations"] and configurations[property]["informations"]["type"] == "int":
                         elif "type" in configurations[property]["informations"] and configurations[property]["informations"]["type"] == "int":
-                            self._insertSpinBox(index, configurations[property]["value"], configurations[property]["informations"])
+                            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"]))
                         else:
                             # Not defined type, rendered as a text field
                             self.pageContent.propertyTable.setItem(index, 1, QTableWidgetItem(configurations[property]["value"]))
@@ -132,8 +111,93 @@ class BModulePage(BWizardPage):
                 module_label = self.pageContent.moduleLabel.text()
                 module_label += "\n\nNo configuration needed."
                 self.pageContent.moduleLabel.setText(module_label)
                 module_label = self.pageContent.moduleLabel.text()
                 module_label += "\n\nNo configuration needed."
                 self.pageContent.moduleLabel.setText(module_label)
+
+    def dependencyCheck(self, item):
+        """
+        Checks the dependencies of the module associated with the given item.
+        """
+        checked = False
+        module = unicode(item.text(0))
+        if item.checkState(0) == Qt.Checked:
+            self.moduleSelected(module)
+        else:
+            self.moduleUnselected(module)
+            self.removeFileDependencies(module)
+
+    def showPropertyDescription(self):
+        """
+        Slot called when the property selection changes. Shows the description
+        of the selected property.
+        """
+        self.resetPropertyDescription()
+        configurations = self.currentModuleConfigurations()
+        if self.currentProperty() in configurations.keys():
+            description = configurations[self.currentProperty()]["brief"]
+            name = self.currentProperty()
+            self.currentPropertyItem().setText(description + "\n" + name)
+
+    def saveValue(self, index):
+        """
+        Slot called when the user modifies one of the configuration parameters.
+        It stores the new value."""
+        property = qvariant_converter.getString(self.pageContent.propertyTable.item(index, 0).data(Qt.UserRole))
+        configuration = self.projectInfo("MODULES")[self.currentModule()]["configuration"]
+        configurations = self.projectInfo("CONFIGURATIONS")
+        if "type" not in configurations[configuration][property]["informations"].keys() or configurations[configuration][property]["informations"]["type"] == "int":
+            configurations[configuration][property]["value"] = str(int(self.pageContent.propertyTable.cellWidget(index, 1).value()))
+        elif configurations[configuration][property]["informations"]["type"] == "enum":
+            configurations[configuration][property]["value"] = unicode(self.pageContent.propertyTable.cellWidget(index, 1).currentText())
+        elif configurations[configuration][property]["informations"]["type"] == "boolean":
+            if self.pageContent.propertyTable.cellWidget(index, 1).isChecked():
+                configurations[configuration][property]["value"] = "1"
+            else:
+                configurations[configuration][property]["value"] = "0"
+        self.setProjectInfo("CONFIGURATIONS", configurations)
+
+    ####
     
     
-    def _insertCheckBox(self, index, value):
+    def loadModuleData(self):
+        """
+        Loads the module data.
+        """
+        # Load the module data only if it isn't already loaded
+        if self.projectInfo("MODULES") == None \
+                and self.projectInfo("LISTS") == None \
+                and self.projectInfo("CONFIGURATIONS") == None:
+            try:
+                bertos_utils.loadModuleData(self.project())
+            except ModuleDefineException, e:
+                self.exceptionOccurred(self.tr("Error parsing line '%2' in file %1").arg(e.path).arg(e.line))
+            except EnumDefineException, e:
+                self.exceptionOccurred(self.tr("Error parsing line '%2' in file %1").arg(e.path).arg(e.line))
+            except ConfigurationDefineException, e:
+                self.exceptionOccurred(self.tr("Error parsing line '%2' in file %1").arg(e.path).arg(e.line))
+    
+    def fillModuleTree(self):
+        """
+        Fills the module tree with the module entries separated in categories.
+        """
+        modules = self.projectInfo("MODULES")
+        if modules is None:
+            return
+        categories = {}
+        for module, information in modules.items():
+            if information["category"] not in categories.keys():
+                categories[information["category"]] = []
+            categories[information["category"]].append(module)
+        for category, module_list in categories.items():
+            item = QTreeWidgetItem(QStringList([category]))
+            for module in module_list:
+                enabled = modules[module]["enabled"]
+                module_item = QTreeWidgetItem(item, QStringList([module]))
+                if enabled:
+                    module_item.setCheckState(0, Qt.Checked)
+                else:
+                    module_item.setCheckState(0, Qt.Unchecked)
+            self.pageContent.moduleTree.addTopLevelItem(item)
+        self.pageContent.moduleTree.sortItems(0, Qt.AscendingOrder)
+            
+    def insertCheckBox(self, index, value):
         """
         Inserts in the table at index a checkbox for a boolean property setted
         to value.
         """
         Inserts in the table at index a checkbox for a boolean property setted
         to value.
@@ -146,13 +210,13 @@ class BModulePage(BWizardPage):
             check_box.setChecked(False)
         self._control_group.addControl(index, check_box)
     
             check_box.setChecked(False)
         self._control_group.addControl(index, check_box)
     
-    def _insertComboBox(self, index, value, value_list):
+    def insertComboBox(self, index, value, value_list):
         """
         Inserts in the table at index a combobox for an enum property setted
         to value.
         """
         try:
         """
         Inserts in the table at index a combobox for an enum property setted
         to value.
         """
         try:
-            enum = self._projectInfoRetrieve("LISTS")[value_list]
+            enum = self.projectInfo("LISTS")[value_list]
             combo_box = QComboBox()
             self.pageContent.propertyTable.setCellWidget(index, 1, combo_box)
             for i, element in enumerate(enum):
             combo_box = QComboBox()
             self.pageContent.propertyTable.setCellWidget(index, 1, combo_box)
             for i, element in enumerate(enum):
@@ -161,15 +225,15 @@ class BModulePage(BWizardPage):
                     combo_box.setCurrentIndex(i)
             self._control_group.addControl(index, combo_box)
         except KeyError:
                     combo_box.setCurrentIndex(i)
             self._control_group.addControl(index, combo_box)
         except KeyError:
-            self._exceptionOccurred(self.tr("Define list \"%1\" not found. Check definition files.").arg(value_list))
+            self.exceptionOccurred(self.tr("Define list \"%1\" not found. Check definition files.").arg(value_list))
             self.pageContent.propertyTable.setItem(index, 1, QTableWidgetItem(value))
     
             self.pageContent.propertyTable.setItem(index, 1, QTableWidgetItem(value))
     
-    def _insertSpinBox(self, index, value, informations):
+    def insertSpinBox(self, index, value, informations):
         """
         Inserts in the table at index a spinbox for an int, a long or an unsigned
         long property setted to value.
         """
         """
         Inserts in the table at index a spinbox for an int, a long or an unsigned
         long property setted to value.
         """
-        ## int, long or undefined type property
+        # int, long or undefined type property
         spin_box = None
         if bertos_utils.isLong(informations) or bertos_utils.isUnsignedLong(informations):
             spin_box = QDoubleSpinBox()
         spin_box = None
         if bertos_utils.isLong(informations) or bertos_utils.isUnsignedLong(informations):
             spin_box = QDoubleSpinBox()
@@ -202,7 +266,7 @@ class BModulePage(BWizardPage):
         self._control_group.addControl(index, spin_box)
         
     
         self._control_group.addControl(index, spin_box)
         
     
-    def _currentModule(self):
+    def currentModule(self):
         """
         Retuns the current module name.
         """
         """
         Retuns the current module name.
         """
@@ -213,135 +277,59 @@ class BModulePage(BWizardPage):
         else:
             return None
     
         else:
             return None
     
-    def _currentModuleConfigurations(self):
+    def currentModuleConfigurations(self):
         """
         Returns the current module configuration.
         """
         """
         Returns the current module configuration.
         """
-        return self._configurations(self._currentModule())
+        return self.configurations(self.currentModule())
     
     
-    def _currentProperty(self):
+    def currentProperty(self):
         """
         Rerturns the current property from the property table.
         """
         return qvariant_converter.getString(self.pageContent.propertyTable.item(self.pageContent.propertyTable.currentRow(), 0).data(Qt.UserRole))
     
         """
         Rerturns the current property from the property table.
         """
         return qvariant_converter.getString(self.pageContent.propertyTable.item(self.pageContent.propertyTable.currentRow(), 0).data(Qt.UserRole))
     
-    def _currentPropertyItem(self):
+    def currentPropertyItem(self):
         """
         Returns the QTableWidgetItem of the current property.
         """
         return self.pageContent.propertyTable.item(self.pageContent.propertyTable.currentRow(), 0)
     
         """
         Returns the QTableWidgetItem of the current property.
         """
         return self.pageContent.propertyTable.item(self.pageContent.propertyTable.currentRow(), 0)
     
-    def _configurations(self, module):
+    def configurations(self, module):
         """
         Returns the configuration for the selected module.
         """
         """
         Returns the configuration for the selected module.
         """
-        configuration = self._projectInfoRetrieve("MODULES")[module]["configuration"]
+        configuration = self.projectInfo("MODULES")[module]["configuration"]
         if len(configuration) > 0:
         if len(configuration) > 0:
-            return self._projectInfoRetrieve("CONFIGURATIONS")[configuration]
+            return self.projectInfo("CONFIGURATIONS")[configuration]
         else:
             return {}
     
         else:
             return {}
     
-    def _resetPropertyDescription(self):
+    def resetPropertyDescription(self):
         """
         Resets the label for each property table entry.
         """
         for index in range(self.pageContent.propertyTable.rowCount()):
             property_name = qvariant_converter.getString(self.pageContent.propertyTable.item(index, 0).data(Qt.UserRole))
             # Awful solution! Needed because if the user change the module, the selection changed...
         """
         Resets the label for each property table entry.
         """
         for index in range(self.pageContent.propertyTable.rowCount()):
             property_name = qvariant_converter.getString(self.pageContent.propertyTable.item(index, 0).data(Qt.UserRole))
             # Awful solution! Needed because if the user change the module, the selection changed...
-            if property_name not in self._currentModuleConfigurations().keys():
+            if property_name not in self.currentModuleConfigurations().keys():
                 break
                 break
-            self.pageContent.propertyTable.item(index, 0).setText(self._currentModuleConfigurations()[property_name]['brief'])
-    
-    def _showPropertyDescription(self):
-        """
-        Slot called when the property selection changes. Shows the description
-        of the selected property.
-        """
-        self._resetPropertyDescription()
-        configurations = self._currentModuleConfigurations()
-        if self._currentProperty() in configurations.keys():
-            description = configurations[self._currentProperty()]["brief"]
-            name = self._currentProperty()
-            self._currentPropertyItem().setText(description + "\n" + name)
-    
-    def _setupUi(self):
-        """
-        Set up the user interface.
-        """
-        self.pageContent.moduleTree.clear()
-        self.pageContent.moduleTree.setHeaderHidden(True)
-        self.pageContent.propertyTable.horizontalHeader().setResizeMode(QHeaderView.Stretch)
-        self.pageContent.propertyTable.horizontalHeader().setVisible(False)
-        self.pageContent.propertyTable.verticalHeader().setResizeMode(QHeaderView.ResizeToContents)
-        self.pageContent.propertyTable.verticalHeader().setVisible(False)
-        self.pageContent.propertyTable.setColumnCount(2)
-        self.pageContent.propertyTable.setRowCount(0)
-        self.pageContent.moduleLabel.setVisible(False)
-    
-    def _connectSignals(self):
-        """
-        Connect the signals with the related slots.
-        """
-        self.connect(self.pageContent.moduleTree, SIGNAL("itemPressed(QTreeWidgetItem*, int)"), self._fillPropertyTable)
-        self.connect(self.pageContent.moduleTree, SIGNAL("itemChanged(QTreeWidgetItem*, int)"), self._dependencyCheck)
-        self.connect(self.pageContent.propertyTable, SIGNAL("itemSelectionChanged()"), self._showPropertyDescription)
-        self.connect(self._control_group, SIGNAL("stateChanged"), self._saveValue)
-    
-    def _saveValue(self, index):
-        """
-        Slot called when the user modifies one of the configuration parameters.
-        It stores the new value."""
-        property = qvariant_converter.getString(self.pageContent.propertyTable.item(index, 0).data(Qt.UserRole))
-        configuration = self._projectInfoRetrieve("MODULES")[self._currentModule()]["configuration"]
-        configurations = self._projectInfoRetrieve("CONFIGURATIONS")
-        if "type" not in configurations[configuration][property]["informations"].keys() or configurations[configuration][property]["informations"]["type"] == "int":
-            configurations[configuration][property]["value"] = str(int(self.pageContent.propertyTable.cellWidget(index, 1).value()))
-        elif configurations[configuration][property]["informations"]["type"] == "enum":
-            configurations[configuration][property]["value"] = unicode(self.pageContent.propertyTable.cellWidget(index, 1).currentText())
-        elif configurations[configuration][property]["informations"]["type"] == "boolean":
-            if self.pageContent.propertyTable.cellWidget(index, 1).isChecked():
-                configurations[configuration][property]["value"] = "1"
-            else:
-                configurations[configuration][property]["value"] = "0"
-        self._projectInfoStore("CONFIGURATIONS", configurations)
-    
-    def _moduleSelectionChanged(self, index):
-        """
-        Slot called when the user selects or unselects a module from the module
-        tree.
-        """
-        module = unicode(self.pageContent.moduleTable.item(index, 1).text())
-        if self._button_group.button(index).isChecked():
-            self._moduleSelected(module)
-        else:
-            self._moduleUnselected(module)
-    
-    def _dependencyCheck(self, item):
-        """
-        Checks the dependencies of the module associated with the given item.
-        """
-        checked = False
-        module = unicode(item.text(0))
-        if item.checkState(0) == Qt.Checked:
-            self._moduleSelected(module)
-        else:
-            self._moduleUnselected(module)
-            self.removeFileDependencies(module)
+            self.pageContent.propertyTable.item(index, 0).setText(self.currentModuleConfigurations()[property_name]['brief'])
     
     
-    def _moduleSelected(self, selectedModule):
+    def moduleSelected(self, selectedModule):
         """
         Resolves the selection dependencies.
         """
         """
         Resolves the selection dependencies.
         """
-        modules = self._projectInfoRetrieve("MODULES")
+        modules = self.projectInfo("MODULES")
         modules[selectedModule]["enabled"] = True
         modules[selectedModule]["enabled"] = True
-        self._projectInfoStore("MODULES", modules)
-        depends = self._projectInfoRetrieve("MODULES")[selectedModule]["depends"]
+        self.setProjectInfo("MODULES", modules)
+        depends = self.projectInfo("MODULES")[selectedModule]["depends"]
         unsatisfied = []
         if self.pageContent.automaticFix.isChecked():
             unsatisfied = self.selectDependencyCheck(selectedModule)
         if len(unsatisfied) > 0:
             for module in unsatisfied:
         unsatisfied = []
         if self.pageContent.automaticFix.isChecked():
             unsatisfied = self.selectDependencyCheck(selectedModule)
         if len(unsatisfied) > 0:
             for module in unsatisfied:
-                modules = self._projectInfoRetrieve("MODULES")
+                modules = self.projectInfo("MODULES")
                 modules[module]["enabled"] = True
             for category in range(self.pageContent.moduleTree.topLevelItemCount()):
                 item = self.pageContent.moduleTree.topLevelItem(category)
                 modules[module]["enabled"] = True
             for category in range(self.pageContent.moduleTree.topLevelItemCount()):
                 item = self.pageContent.moduleTree.topLevelItem(category)
@@ -349,13 +337,13 @@ class BModulePage(BWizardPage):
                     if unicode(item.child(child).text(0)) in unsatisfied:
                         item.child(child).setCheckState(0, Qt.Checked)
     
                     if unicode(item.child(child).text(0)) in unsatisfied:
                         item.child(child).setCheckState(0, Qt.Checked)
     
-    def _moduleUnselected(self, unselectedModule):
+    def moduleUnselected(self, unselectedModule):
         """
         Resolves the unselection dependencies.
         """
         """
         Resolves the unselection dependencies.
         """
-        modules = self._projectInfoRetrieve("MODULES")
+        modules = self.projectInfo("MODULES")
         modules[unselectedModule]["enabled"] = False
         modules[unselectedModule]["enabled"] = False
-        self._projectInfoStore("MODULES", modules)
+        self.setProjectInfo("MODULES", modules)
         unsatisfied = []
         if self.pageContent.automaticFix.isChecked():
             unsatisfied = self.unselectDependencyCheck(unselectedModule)
         unsatisfied = []
         if self.pageContent.automaticFix.isChecked():
             unsatisfied = self.unselectDependencyCheck(unselectedModule)
@@ -365,7 +353,7 @@ class BModulePage(BWizardPage):
             choice = QMessageBox.warning(self, self.tr("Dependency error"), message, QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
             if choice == QMessageBox.Yes:
                 for module in unsatisfied:
             choice = QMessageBox.warning(self, self.tr("Dependency error"), message, QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
             if choice == QMessageBox.Yes:
                 for module in unsatisfied:
-                    modules = self._projectInfoRetrieve("MODULES")
+                    modules = self.projectInfo("MODULES")
                     modules[module]["enabled"] = False
                 for category in range(self.pageContent.moduleTree.topLevelItemCount()):
                     item = self.pageContent.moduleTree.topLevelItem(category)
                     modules[module]["enabled"] = False
                 for category in range(self.pageContent.moduleTree.topLevelItemCount()):
                     item = self.pageContent.moduleTree.topLevelItem(category)
@@ -378,8 +366,8 @@ class BModulePage(BWizardPage):
         Returns the list of unsatisfied dependencies after a selection.
         """
         unsatisfied = set()
         Returns the list of unsatisfied dependencies after a selection.
         """
         unsatisfied = set()
-        modules = self._projectInfoRetrieve("MODULES")
-        files = self._projectInfoRetrieve("FILES")
+        modules = self.projectInfo("MODULES")
+        files = self.projectInfo("FILES")
         for dependency in modules[module]["depends"]:
             if dependency in modules and not modules[dependency]["enabled"]:
                 unsatisfied |= set([dependency])
         for dependency in modules[module]["depends"]:
             if dependency in modules and not modules[dependency]["enabled"]:
                 unsatisfied |= set([dependency])
@@ -390,7 +378,7 @@ class BModulePage(BWizardPage):
                     files[dependency] += 1
                 else:
                     files[dependency] = 1
                     files[dependency] += 1
                 else:
                     files[dependency] = 1
-        self._projectInfoStore("FILES", files)
+        self.setProjectInfo("FILES", files)
         return unsatisfied
     
     def unselectDependencyCheck(self, dependency):
         return unsatisfied
     
     def unselectDependencyCheck(self, dependency):
@@ -398,7 +386,7 @@ class BModulePage(BWizardPage):
         Returns the list of unsatisfied dependencies after an unselection.
         """
         unsatisfied = set()
         Returns the list of unsatisfied dependencies after an unselection.
         """
         unsatisfied = set()
-        modules = self._projectInfoRetrieve("MODULES")
+        modules = self.projectInfo("MODULES")
         for module, informations in modules.items():
             if dependency in informations["depends"] and informations["enabled"]:
                 unsatisfied |= set([module])
         for module, informations in modules.items():
             if dependency in informations["depends"] and informations["enabled"]:
                 unsatisfied |= set([module])
@@ -410,15 +398,15 @@ class BModulePage(BWizardPage):
         """
         Removes the files dependencies of the given module.
         """
         """
         Removes the files dependencies of the given module.
         """
-        modules = self._projectInfoRetrieve("MODULES")
-        files = self._projectInfoRetrieve("FILES")
+        modules = self.projectInfo("MODULES")
+        files = self.projectInfo("FILES")
         dependencies = modules[module]["depends"]
         for dependency in dependencies:
             if dependency in files:
                 files[dependency] -= 1
                 if files[dependency] == 0:
                     del files[dependency]
         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)
+        self.setProjectInfo("FILES", files)
 
 class QControlGroup(QObject):
     """
 
 class QControlGroup(QObject):
     """
@@ -437,13 +425,13 @@ class QControlGroup(QObject):
         """
         self._controls[id] = control
         if type(control) == QCheckBox:
         """
         self._controls[id] = control
         if type(control) == QCheckBox:
-            self.connect(control, SIGNAL("stateChanged(int)"), lambda: self._stateChanged(id))
+            self.connect(control, SIGNAL("stateChanged(int)"), lambda: self.stateChanged(id))
         elif type(control) == QSpinBox:
         elif type(control) == QSpinBox:
-            self.connect(control, SIGNAL("valueChanged(int)"), lambda: self._stateChanged(id))
+            self.connect(control, SIGNAL("valueChanged(int)"), lambda: self.stateChanged(id))
         elif type(control) == QComboBox:
         elif type(control) == QComboBox:
-            self.connect(control, SIGNAL("currentIndexChanged(int)"), lambda: self._stateChanged(id))
+            self.connect(control, SIGNAL("currentIndexChanged(int)"), lambda: self.stateChanged(id))
         elif type(control) == QDoubleSpinBox:
         elif type(control) == QDoubleSpinBox:
-            self.connect(control, SIGNAL("valueChanged(double)"), lambda: self._stateChanged(id))
+            self.connect(control, SIGNAL("valueChanged(double)"), lambda: self.stateChanged(id))
     
     def clear(self):
         """
     
     def clear(self):
         """
@@ -451,7 +439,7 @@ class QControlGroup(QObject):
         """
         self._controls = {}
     
         """
         self._controls = {}
     
-    def _stateChanged(self, id):
+    def stateChanged(self, id):
         """
         Slot called when the value of one of the stored widget changes. It emits
         another signal.
         """
         Slot called when the value of one of the stored widget changes. It emits
         another signal.