X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=wizard%2FBProjectPresets.py;h=40e7cbd8f7aa474de6a0e6dff76b4ff9d3554f96;hb=57dfb183e24175bc782647d4e6aebe31063f3881;hp=7bdd5d9df33d8f22197e5bf02706e7044cec597c;hpb=251d28feef633415c5e5cf7eecbaa9eccfd72b2c;p=bertos.git diff --git a/wizard/BProjectPresets.py b/wizard/BProjectPresets.py index 7bdd5d9d..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,7 +41,13 @@ from PyQt4.QtGui import * from BWizardPage import BWizardPage +from BCreationPage import BCreationPage +from BToolchainPage import BToolchainPage + +from DefineException import ModuleDefineException + from bertos_utils import _cmp +from toolchain_manager import ToolchainManager import const import qvariant_converter @@ -62,6 +67,7 @@ class BProjectPresetsPage(QWidget): def setupUi(self): self.pageContent.presetList.clear() + self.pageContent.categoryDescription.setText(self.preset_data["info"].get("description", "")) for preset in sorted(self.preset_data["children"].values(), _cmp): item_name = preset["info"].get("name", preset["info"]["filename"]) item_icon = os.path.join(preset["info"]["path"], const.PREDEFINED_BOARD_ICON_FILE) @@ -75,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): @@ -102,30 +105,76 @@ class BProjectPresets(BWizardPage): ## Overloaded QWizardPage methods ## def isComplete(self): - current_widget = self.pageContent.boardTabWidget.currentWidget() - preset_path = None - if current_widget: - current_item = current_widget.pageContent.presetList.currentItem() - if current_item: - preset_path = current_item.data(Qt.UserRole) - preset_path = qvariant_converter.getString(preset_path) + preset_path = self.selected_path if preset_path: self.setProjectInfo("PROJECT_PRESET", preset_path) + self.setProjectInfo("BASE_MODE", not self.advanced) 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. + """ + # Route to Toolchain page if the user select advanced + # or to Output page if the user select base + if self.advanced: + return self.wizard().pageIndex(BToolchainPage) + else: + cpu_info = self.projectInfo("CPU_INFOS") + if cpu_info: + target = cpu_info["TOOLCHAIN"] + # Try to find a suitable toolchain automatically + tm = ToolchainManager() + suitable_toolchains = tm.suitableToolchains(target) + if len(suitable_toolchains) == 1: + toolchain = suitable_toolchains.pop() + toolchain_info = tm._validateToolchain(toolchain) + toolchain_info["path"] = toolchain + self.setProjectInfo("TOOLCHAIN", toolchain_info) + return self.wizard().pageIndex(BCreationPage) + else: + return self.wizard().pageIndex(BToolchainPage) + else: + # It seems that the nextId method is called before the + # reloadData one (that is called after the page changing. + # + # TODO: fix this awful code lines + target = None + return self.wizard().pageIndex(BToolchainPage) + #### ## 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()")) @@ -144,4 +193,30 @@ class BProjectPresets(BWizardPage): self.pageContent.boardTabWidget.addTab(preset_page, QIcon(icon), preset["info"].get("name", preset["info"]["filename"])) else: self.pageContent.boardTabWidget.addTab(preset_page, preset["info"].get("name", preset["info"]["filename"])) - self.connect(preset_page, SIGNAL("completeChanged()"), self, SIGNAL("completeChanged()")) \ No newline at end of file + self.connect(preset_page, SIGNAL("completeChanged()"), self, SIGNAL("completeChanged()")) + + @property + def advanced(self): + if self.selected_data: + return self.selected_data["info"].get("advanced", False) + else: + return None + + @property + def selected_path(self): + current_widget = self.pageContent.boardTabWidget.currentWidget() + preset_path = None + if current_widget: + current_item = current_widget.pageContent.presetList.currentItem() + if current_item: + preset_path = current_item.data(Qt.UserRole) + preset_path = qvariant_converter.getString(preset_path) + return preset_path + + @property + def selected_data(self): + if self.selected_path: + current_widget = self.pageContent.boardTabWidget.currentWidget() + return current_widget.preset_data["children"][self.selected_path] + else: + return None