Fix toolchain reloadPage problem (_valid_items list wasn't cleared properly).
[bertos.git] / wizard / BProjectPresets.py
index ee6d0a06baed57a4e4f463e8ce319690da688cd2..5b5fa7a1d5524c0da049f5fd9114583748f3f9fb 100644 (file)
@@ -42,7 +42,7 @@ from PyQt4.QtGui import *
 
 from BWizardPage import BWizardPage
 
-from BOutputPage import BOutputPage
+from BCreationPage import BCreationPage
 from BToolchainPage import BToolchainPage
 
 from bertos_utils import _cmp
@@ -80,8 +80,8 @@ class BProjectPresetsPage(QWidget):
         self.updateUi()
 
     def connectSignals(self):
-        self.connect(self.pageContent.presetList, SIGNAL("itemSelectionChanged()"), self.updateUi)
-        self.connect(self.pageContent.presetList, SIGNAL("itemSelectionChanged()"), self, SIGNAL("completeChanged()"))
+        self.connect(self.pageContent.presetList, SIGNAL("currentItemChanged(QListWidgetItem *, QListWidgetItem*)"), self.updateUi)
+        self.connect(self.pageContent.presetList, SIGNAL("currentItemChanged(QListWidgetItem *, QListWidgetItem*)"), self, SIGNAL("completeChanged()"))
 
     def updateUi(self):
         if self.selected:
@@ -108,17 +108,26 @@ class BProjectPresets(BWizardPage):
         if preset_path:
             self.setProjectInfo("PROJECT_PRESET", preset_path)
             self.setProjectInfo("BASE_MODE", not self.advanced)
-            # TODO: find a better place for preset loading...
-            try:
-                QApplication.instance().setOverrideCursor(Qt.WaitCursor)
-                self.project.loadProjectFromPreset(preset_path)
-            finally:
-                QApplication.instance().restoreOverrideCursor()            
             return True
         else:
             self.setProjectInfo("PROJECT_PRESET", None)
             return False
 
+    def validatePage(self):
+        """
+        This hack permits to load the preset once, when the user go press the
+        Next button.
+        """
+        preset_path = self.selected_path
+        try:
+            QApplication.instance().setOverrideCursor(Qt.WaitCursor)
+            self.project.loadProjectFromPreset(preset_path)
+            self.setProjectInfo("PRESET_LOADED", True)
+        finally:
+            QApplication.instance().restoreOverrideCursor()
+        # Return always True, this is a fake validation.
+        return True
+
     def nextId(self):
         """
         Overload of the QWizardPage nextId method.
@@ -139,7 +148,7 @@ class BProjectPresets(BWizardPage):
                     toolchain_info = tm._validateToolchain(toolchain)
                     toolchain_info["path"] = toolchain
                     self.setProjectInfo("TOOLCHAIN", toolchain_info)
-                    return self.wizard().pageIndex(BOutputPage)
+                    return self.wizard().pageIndex(BCreationPage)
                 else:
                     return self.wizard().pageIndex(BToolchainPage)
             else:
@@ -155,12 +164,13 @@ class BProjectPresets(BWizardPage):
     ## Overloaded BWizardPage methods ##
     
     def reloadData(self):
-        preset_path = self.projectInfo("PROJECT_BOARD")
-        preset_tree = self.projectInfo("PRESET_TREE")
-        preset_list = preset_tree["children"][preset_path]["children"]
-        preset_list = sorted(preset_list.values(), _cmp)
-        self.setTitle(self.tr("Select the template/demo for %1").arg(preset_tree["children"][preset_path]["info"].get("name", preset_tree["children"][preset_path]["info"]["filename"])))
-        self.setupTabs(preset_list)
+        if not self.projectInfo("PRESET_LOADED"):
+            preset_path = self.projectInfo("PROJECT_BOARD")
+            preset_tree = self.projectInfo("PRESET_TREE")
+            preset_list = preset_tree["children"][preset_path]["children"]
+            preset_list = sorted(preset_list.values(), _cmp)
+            self.setTitle(self.tr("Select the project template for %1").arg(preset_tree["children"][preset_path]["info"].get("name", preset_tree["children"][preset_path]["info"]["filename"])))
+            self.setupTabs(preset_list)
 
     def connectSignals(self):
         self.connect(self.pageContent.boardTabWidget, SIGNAL("currentChanged(int)"), self, SIGNAL("completeChanged()"))
@@ -205,4 +215,4 @@ class BProjectPresets(BWizardPage):
             current_widget = self.pageContent.boardTabWidget.currentWidget()
             return current_widget.preset_data["children"][self.selected_path]
         else:
-            return None
\ No newline at end of file
+            return None