#
# Copyright 2008 Develer S.r.l. (http://www.develer.com/)
#
-# $Id$
#
# Author: Lorenzo Berni <duplo@develer.com>
#
import collections
from BWizardPage import *
+from BCreationPage import BCreationPage
+
import BToolchainSearch
import bertos_utils
import qvariant_converter
def __init__(self):
BWizardPage.__init__(self, UI_LOCATION + "/toolchain_select.ui")
self.setTitle(self.tr("Select toolchain"))
- self._validation_process = None
+ self.setSubTitle(self.tr("You can look for more toolchains in your system by pressing the \"Search\" button, or manually add them with the \"+\" button"))
self._valid_items = []
self._toolchain_manager = ToolchainManager()
else:
return False
+ def nextId(self):
+ """
+ Overload of the QWizardPage nextId method.
+ """
+ # Route to Output page if it's a predefined easy project.
+ if self.projectInfo("PROJECT_FROM_PRESET") and self.projectInfo("BASE_MODE"):
+ return self.wizard().pageIndex(BCreationPage)
+ else:
+ return QWizardPage.nextId(self)
+
####
## Overloaded BWizardPage methods. ##
"""
Connects the signals with the related slots.
"""
- self.connect(self.pageContent.toolchainList, SIGNAL("itemSelectionChanged()"), self.selectionChanged)
+ self.connect(self.pageContent.toolchainList, SIGNAL("currentItemChanged(QListWidgetItem *, QListWidgetItem*)"), self.selectionChanged)
self.connect(self.pageContent.addButton, SIGNAL("clicked()"), self.addToolchain)
self.connect(self.pageContent.removeButton, SIGNAL("clicked()"), self.removeToolchain)
self.connect(self.pageContent.searchButton, SIGNAL("clicked()"), self.searchToolchain)
self.connect(self.pageContent.checkButton, SIGNAL("clicked()"), self.validateAllToolchains)
- def reloadData(self):
+ def reloadData(self, previous_id=None):
"""
Overload of the BWizard reloadData method.
"""
- self._clearList()
- self.setupUi()
- self._populateToolchainList()
- if len(self._valid_items) == 1:
- self.pageContent.toolchainList.setCurrentItem(self._valid_items[0])
+ if previous_id is None or previous_id < self.wizard().currentId():
+ self._clearList()
+ self.setupUi()
+ self._populateToolchainList()
+ if len(self._valid_items) >= 1:
+ self.pageContent.toolchainList.setCurrentItem(self._valid_items[0])
####
Fills the toolchain list with the toolchains stored in the QSettings.
"""
self.pageContent.toolchainList.clear()
+ self._valid_items = []
toolchains = self._toolchain_manager.predefined_toolchains + self._toolchain_manager.toolchains
sel_toolchain = self.projectInfo("TOOLCHAIN")
for key, value in toolchains:
for toolchain in toolchain_list:
self._toolchain_manager.addToolchain(toolchain, _toolchain_dict.get(toolchain, False))
self._populateToolchainList()
- self.showMessage(self.tr("Toolchain search result."), self.tr("%1 toolchains founded").arg(len(self._toolchain_manager.toolchains)))
+ self.showMessage(self.tr("Toolchain search result."), self.tr("%1 toolchains found").arg(len(toolchain_list)))
def _validItem(self, index, infos):
"""
new_data = qvariant_converter.getStringDict(self.pageContent.toolchainList.item(index).data(Qt.UserRole))
new_data.update(infos)
item.setData(Qt.UserRole, qvariant_converter.convertStringDict(new_data))
- needed = self.projectInfo("CPU_INFOS")
- if "target" in infos and infos["target"].find(needed["TOOLCHAIN"]) != -1:
- item.setIcon(QIcon(":/images/ok.png"))
- self._valid_items.append(item)
- else:
- item.setIcon(QIcon(":/images/warning.png"))
+ item.setIcon(QIcon(":/images/ok.png"))
+ self._valid_items.append(item)
+ if "version" in infos and "target" in infos:
+ item.setText("GCC " + infos["version"] + " - " + infos["target"].strip())
+
+ def _differentTargetItem(self, index, infos):
+ item = self.pageContent.toolchainList.item(index)
+ new_data = qvariant_converter.getStringDict(self.pageContent.toolchainList.item(index).data(Qt.UserRole))
+ new_data.update(infos)
+ item.setData(Qt.UserRole, qvariant_converter.convertStringDict(new_data))
+ item.setIcon(QIcon(":/images/warning.png"))
if "version" in infos and "target" in infos:
item.setText("GCC " + infos["version"] + " - " + infos["target"].strip())
filename = qvariant_converter.getStringDict(self.pageContent.toolchainList.item(i).data(Qt.UserRole))["path"]
info = self._toolchain_manager.validateToolchain(filename)
+ valid = []
+ different_target = []
+ invalid = []
+
# Add the item in the list with the appropriate associate data.
+ needed = self.projectInfo("CPU_INFOS")
if info:
- self._validItem(i, info)
+ if "target" in info and info["target"].find(needed["TOOLCHAIN"]) != -1:
+ valid.append(info)
+ else:
+ different_target.append(info)
else:
- self._invalidItem(i)
+ invalid.append(info)
+
+ for i, info in enumerate(valid):
+ self._validItem(i, info)
+ for i, info in enumerate(different_target):
+ self._differentTargetItem(i + len(valid), info)
+ for i, info in enumerate(invalid):
+ self._invalidItem(i + len(valid) + len(different_target))
def isDefaultToolchain(self, toolchain):
"""