From afbcef7c7b408083dbcd77bc4697513dc10ea58d Mon Sep 17 00:00:00 2001 From: duplo Date: Mon, 24 May 2010 13:25:15 +0000 Subject: [PATCH] Add preset feature. git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3806 38d2e660-2303-0410-9eaa-f027e97ec537 --- wizard/BBoardPage.py | 46 ++++++-- wizard/BProject.py | 4 +- wizard/BProjectPresets.py | 146 ++++++++++++++++++++++++++ wizard/bertos.py | 3 +- wizard/bertos.qrc | 2 + wizard/const.py | 3 + wizard/images/default_board_icon.png | Bin 0 -> 16069 bytes wizard/images/default_board_image.png | Bin 0 -> 16069 bytes wizard/ui/board_select.ui | 14 +-- wizard/ui/preset_page.ui | 55 ++++++++++ wizard/ui/project_presets.ui | 28 +++++ 11 files changed, 281 insertions(+), 20 deletions(-) create mode 100644 wizard/BProjectPresets.py create mode 100755 wizard/images/default_board_icon.png create mode 100755 wizard/images/default_board_image.png create mode 100644 wizard/ui/preset_page.ui create mode 100644 wizard/ui/project_presets.ui diff --git a/wizard/BBoardPage.py b/wizard/BBoardPage.py index 5d83fda3..0877ea50 100644 --- a/wizard/BBoardPage.py +++ b/wizard/BBoardPage.py @@ -64,13 +64,14 @@ class BBoardPage(BWizardPage): """ Overload of the QWizardPage isComplete method. """ - return False - - # def nextId(self): - # """ - # Overload of the QWizardPage nextId method. - # """ - # return self.wizard().pageIndex(BRoutePage) + if self.selected: + preset_path = qvariant_converter.getDict(self.selected.data(Qt.UserRole)) + preset_path = qvariant_converter.getStringDict(preset_path["info"]) + preset_path = preset_path["path"] + self.setProjectInfo("PROJECT_BOARD", preset_path) + return True + else: + return False #### @@ -86,6 +87,8 @@ class BBoardPage(BWizardPage): """ Overload of the BWizardPage connectSignals method. """ + self.connect(self.pageContent.boardList, SIGNAL("itemSelectionChanged()"), self.updateUi) + self.connect(self.pageContent.boardList, SIGNAL("itemSelectionChanged()"), self, SIGNAL("completeChanged()")) def reloadData(self): """ @@ -95,17 +98,40 @@ class BBoardPage(BWizardPage): preset_list = preset_list["children"] def _cmp(x, y): return cmp(x["info"].get('ord', 0), y["info"].get('ord', 0)) - preset_list = sorted(preset_list, _cmp) + preset_list = sorted(preset_list.values(), _cmp) self.setItems(preset_list) #### ## Slots ## + def updateUi(self): + if self.selected: + info_dict = qvariant_converter.getDict(self.selected.data(Qt.UserRole)) + info_dict = qvariant_converter.getStringDict(info_dict["info"]) + description = info_dict.get("description", "") + image = os.path.join(info_dict["path"], ".image.png") + if not os.path.exists(image): + image = ":/images/default_board_image.png" + self.pageContent.descriptionLabel.setText(description) + self.pageContent.imageLabel.setPixmap(QPixmap(image)) #### def setItems(self, preset_list): self.pageContent.boardList.clear() - for item in preset_list: - self.pageContent.boardList.addItem(item["info"].get("name", item["info"]["filename"])) \ No newline at end of file + selected_board = self.projectInfo("PROJECT_BOARD") + for item_data in preset_list: + item_name = item_data["info"].get("name", item_data["info"]["filename"]) + item_icon = os.path.join(item_data["info"]["path"], const.PREDEFINED_BOARD_ICON_FILE) + if not os.path.exists(item_icon): + item_icon = ":/images/default_board_icon.png" + item = QListWidgetItem(QIcon(item_icon), item_name) + item.setData(Qt.UserRole, qvariant_converter.convertDict(item_data)) + self.pageContent.boardList.addItem(item) + if selected_board and selected_board == item_data["info"]["path"]: + self.pageContent.boardList.setCurrentItem(item) + + @property + def selected(self): + return self.pageContent.boardList.currentItem() \ No newline at end of file diff --git a/wizard/BProject.py b/wizard/BProject.py index c2f6613a..4564f79d 100644 --- a/wizard/BProject.py +++ b/wizard/BProject.py @@ -209,14 +209,14 @@ class BProject(object): _tree["info"] = self._loadPresetInfo(os.path.join(path, const.PREDEFINED_BOARD_SPEC_FILE)) _tree["info"]["filename"] = os.path.basename(path) _tree["info"]["path"] = path - _tree["children"] = [] + _tree["children"] = {} entries = set(os.listdir(path)) for entry in entries: _path = os.path.join(path, entry) if os.path.isdir(_path): sub_entries = set(os.listdir(_path)) if const.PREDEFINED_BOARD_SPEC_FILE in sub_entries: - _tree["children"].append(self._loadProjectPresetTree(_path)) + _tree["children"][_path] = self._loadProjectPresetTree(_path) # Add into the info dict the dir type (dir/project) if _tree["children"]: _tree["info"]["type"] = "dir" diff --git a/wizard/BProjectPresets.py b/wizard/BProjectPresets.py new file mode 100644 index 00000000..c0381a5c --- /dev/null +++ b/wizard/BProjectPresets.py @@ -0,0 +1,146 @@ +#!/usr/bin/env python +# encoding: utf-8 +# +# This file is part of slimqc. +# +# Bertos is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +# As a special exception, you may use this file as part of a free software +# library without restriction. Specifically, if other files instantiate +# templates or use macros or inline functions from this file, or you compile +# this file and link it with other files to produce an executable, this +# file does not by itself cause the resulting executable to be covered by +# the GNU General Public License. This exception does not however +# invalidate any other reasons why the executable file might be covered by +# the GNU General Public License. +# +# Copyright 2010 Develer S.r.l. (http://www.develer.com/) +# +# $Id$ +# +# Author: Lorenzo Berni +# + +import os + +from PyQt4 import uic + +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +from BWizardPage import BWizardPage + +import const +import qvariant_converter + +class BProjectPresetsPage(QWidget): + def __init__(self, preset_data, parent=None): + QWidget.__init__(self, parent) + self.pageContent = uic.loadUi(os.path.join(const.DATA_DIR, const.UI_LOCATION, "preset_page.ui"), None) + self.project = QApplication.instance().project + self.settings = QApplication.instance().settings + self.preset_data = preset_data + layout = QVBoxLayout() + layout.addWidget(self.pageContent) + self.setLayout(layout) + self.setupUi() + self.connectSignals() + + def setupUi(self): + self.pageContent.presetList.clear() + def _cmp(x, y): + return cmp(x["info"].get('ord', 0), y["info"].get('ord', 0)) + 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) + if not os.path.exists(item_icon): + item_icon = const.PREDEFINED_BOARD_DEFAULT_ICON + item_icon = QIcon(item_icon) + item = QListWidgetItem(item_icon, item_name) + item.setData(Qt.UserRole, qvariant_converter.convertString(preset["info"]["path"])) + self.pageContent.presetList.addItem(item) + self.pageContent.presetList.setCurrentRow(0) + self.updateUi() + + def connectSignals(self): + self.connect(self.pageContent.presetList, SIGNAL("itemSelectionChanged()"), self.updateUi) + self.connect(self.pageContent.presetList, SIGNAL("itemSelectionChanged()"), 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 not os.path.exists(image): + image = const.PREDEFINED_BOARD_DEFAULT_IMAGE + self.pageContent.imageLabel.setPixmap(QPixmap(image)) + + @property + def selected(self): + return self.pageContent.presetList.currentItem() + + +class BProjectPresets(BWizardPage): + def __init__(self): + BWizardPage.__init__(self, const.UI_LOCATION + "/project_presets.ui") + + ## 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) + if preset_path: + self.setProjectInfo("PROJECT_PRESET", preset_path) + return True + else: + self.setProjectInfo("PROJECT_PRESET", None) + return False + #### + + ## 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"] + def _cmp(x, y): + return cmp(x["info"].get('ord', 0), y["info"].get('ord', 0)) + preset_list = sorted(preset_list.values(), _cmp) + self.setupTabs(preset_list) + + def connectSignals(self): + self.connect(self.pageContent.boardTabWidget, SIGNAL("currentChanged(int)"), self, SIGNAL("completeChanged()")) + + #### + + ## Slots ## + #### + + def setupTabs(self, preset_list): + self.pageContent.boardTabWidget.clear() + for preset in preset_list: + icon = os.path.join(preset["info"]["path"], ".icon.png") + preset_page = BProjectPresetsPage(preset) + if os.path.exists(icon): + 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 diff --git a/wizard/bertos.py b/wizard/bertos.py index 65e578cc..abee435b 100755 --- a/wizard/bertos.py +++ b/wizard/bertos.py @@ -50,6 +50,7 @@ from BIntroPage import BIntroPage from BFolderPage import BFolderPage from BTypePage import BTypePage from BBoardPage import BBoardPage +from BProjectPresets import BProjectPresets from BRoutePage import BRoutePage from BOpenPage import BOpenPage from BVersionPage import BVersionPage @@ -68,7 +69,7 @@ from LoadException import VersionException, ToolchainException def newProject(): QApplication.instance().project = BProject() - page_list = [BIntroPage, BFolderPage, BVersionPage, BTypePage, BBoardPage, BRoutePage, BCpuPage, BToolchainPage, BModulePage, BOutputPage, BCreationPage, BFinalPage] + page_list = [BIntroPage, BFolderPage, BVersionPage, BTypePage, BBoardPage, BProjectPresets, BRoutePage, BCpuPage, BToolchainPage, BModulePage, BOutputPage, BCreationPage, BFinalPage] wizard = BWizard(page_list) wizard.show() wizard.exec_() diff --git a/wizard/bertos.qrc b/wizard/bertos.qrc index 34f8ccc5..e7376c7f 100644 --- a/wizard/bertos.qrc +++ b/wizard/bertos.qrc @@ -12,5 +12,7 @@ images/logo.png images/default_dir_icon.png images/default_project_icon.png + images/default_board_image.png + images/default_board_icon.png diff --git a/wizard/const.py b/wizard/const.py index e048e685..863f45da 100644 --- a/wizard/const.py +++ b/wizard/const.py @@ -44,10 +44,13 @@ del _tmp PREDEFINED_BOARDS_DIR = 'boards' PREDEFINED_BOARD_SPEC_FILE = '.spec' PREDEFINED_BOARD_ICON_FILE = '.icon.png' +PREDEFINED_BOARD_IMAGE_FILE = '.image.png' # Predefined icons in resouces PREDEFINED_BOARD_DEFAULT_DIR_ICON = ':images/default_dir_icon.png' PREDEFINED_BOARD_DEFAULT_PROJECT_ICON = ':images/default_project_icon.png' +PREDEFINED_BOARD_DEFAULT_ICON = ':images/default_board_icon.png' +PREDEFINED_BOARD_DEFAULT_IMAGE = ':images/default_board_image.png' # PREDEFINED_BOARD_SPEC_INFO = { # 'name': , # 'description': , diff --git a/wizard/images/default_board_icon.png b/wizard/images/default_board_icon.png new file mode 100755 index 0000000000000000000000000000000000000000..c7989f749ac683ee10f69f2f8939e789015112ac GIT binary patch literal 16069 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 - - - - - - - @@ -53,6 +46,13 @@ + + + + + + + diff --git a/wizard/ui/preset_page.ui b/wizard/ui/preset_page.ui new file mode 100644 index 00000000..3418f120 --- /dev/null +++ b/wizard/ui/preset_page.ui @@ -0,0 +1,55 @@ + + + Form + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + + + + diff --git a/wizard/ui/project_presets.ui b/wizard/ui/project_presets.ui new file mode 100644 index 00000000..2925c82c --- /dev/null +++ b/wizard/ui/project_presets.ui @@ -0,0 +1,28 @@ + + + Form + + + + 0 + 0 + 501 + 403 + + + + Form + + + + + + -1 + + + + + + + + -- 2.25.1