X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=wizard%2FBProjectPresets.py;h=40e7cbd8f7aa474de6a0e6dff76b4ff9d3554f96;hb=57dfb183e24175bc782647d4e6aebe31063f3881;hp=818f0fa75e7d7b79023a666b5918c3574426e9f5;hpb=52c487b2edccff2f2eb2a9082b38f370be0e05d6;p=bertos.git diff --git a/wizard/BProjectPresets.py b/wizard/BProjectPresets.py index 818f0fa7..40e7cbd8 100644 --- a/wizard/BProjectPresets.py +++ b/wizard/BProjectPresets.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # encoding: utf-8 # -# This file is part of slimqc. +# This file is part of BeRTOS. # # Bertos is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -28,7 +28,6 @@ # # Copyright 2010 Develer S.r.l. (http://www.develer.com/) # -# $Id$ # # Author: Lorenzo Berni # @@ -42,9 +41,11 @@ from PyQt4.QtGui import * from BWizardPage import BWizardPage -from BOutputPage import BOutputPage +from BCreationPage import BCreationPage from BToolchainPage import BToolchainPage +from DefineException import ModuleDefineException + from bertos_utils import _cmp from toolchain_manager import ToolchainManager @@ -80,20 +81,17 @@ 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: preset_path = qvariant_converter.getString(self.selected.data(Qt.UserRole)) preset = self.preset_data["children"][preset_path] - self.pageContent.descriptionLabel.setText(preset["info"].get("description", "")) - image = os.path.join(preset["info"]["path"], const.PREDEFINED_BOARD_IMAGE_FILE) - if os.path.exists(image): - self.pageContent.imageLabel.setPixmap(QPixmap(image)) - self.pageContent.imageLabel.setVisible(True) - else: - self.pageContent.imageLabel.setVisible(False) + description = preset["info"].get("description", "") + path = unicode(QUrl.fromLocalFile(preset_path).toString()) + description = description.replace("$path", path) + self.pageContent.descriptionArea.setHtml(description) @property def selected(self): @@ -111,17 +109,29 @@ 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) + try: + self.project.loadProjectFromPreset(preset_path) + except ModuleDefineException, e: + self.exceptionOccurred(self.tr("Error parsing line '%2' in file %1").arg(e.path).arg(e.line)) + 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. @@ -142,7 +152,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: @@ -157,13 +167,14 @@ 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) + def reloadData(self, previous_id=None): + 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()")) @@ -208,4 +219,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