4 # Copyright 2008 Develer S.r.l. (http://www.develer.com/)
9 # Author: Lorenzo Berni <duplo@develer.com>
12 from BWizardPage import *
13 import BToolchainSearch
16 class BToolchainPage(BWizardPage):
19 BWizardPage.__init__(self, "toolchain_select.ui")
20 self.setTitle(self.tr("Select toolchain"))
21 self._validationProcess = None
22 self._populateToolchainList()
23 self._connectSignals()
26 if self.pageContent.customDirBox.isChecked():
27 self._enableCustomDir()
29 self._disableCustomDir()
30 if self.pageContent.pathBox.isChecked() or (self.pageContent.customDirBox.isChecked() and self.pageContent.customDirList.count() != 0):
31 self.pageContent.doSearchButton.setEnabled(True)
33 self.pageContent.doSearchButton.setEnabled(False)
35 def _populateToolchainList(self):
36 toolchains = self._settingsRetrieve("toolchains").toList()
37 for element in toolchains:
38 item = QListWidgetItem(element.toString())
39 item.setData(Qt.UserRole, element)
40 self.pageContent.toolchainList.addItem(item)
43 self.pageContent.toolchainList.clear()
45 def _selectionChanged(self):
46 self.emit(SIGNAL("completeChanged()"))
49 dirList = [unicode(element.toString()) for element in self._settingsRetrieve("search_dir_list").toList()]
50 dirList += [element for element in bertos_utils.getSystemPath()]
51 toolchainList = bertos_utils.findToolchains(dirList)
52 for element in toolchainList:
53 self.pageContent.toolchainList.addItem(QListWidgetItem(element))
54 self._settingsStore("toolchains", toolchainList)
56 def _connectSignals(self):
57 self.connect(self.pageContent.toolchainList, SIGNAL("itemSelectionChanged()"), self._selectionChanged)
58 self.connect(self.pageContent.addButton, SIGNAL("clicked()"), self.addToolchain)
59 self.connect(self.pageContent.removeButton, SIGNAL("clicked()"), self.removeToolchain)
60 self.connect(self.pageContent.searchButton, SIGNAL("clicked()"), self.searchToolchain)
61 self.connect(self.pageContent.checkButton, SIGNAL("clicked()"), self.validateToolchains)
63 def addToolchain(self):
64 sel_toolchain = QFileDialog.getOpenFileName(self, self.tr("Choose the toolchain"), "")
65 if not sel_toolchain.isEmpty():
66 item = QListWidgetItem(sel_toolchain)
67 item.setData(Qt.UserRole, QVariant(sel_toolchain))
68 self.pageContent.toolchainList.addItem(item)
69 toolchains = self._settingsRetrieve("toolchains").toList()
70 toolchains = set([toolchain.toString() for toolchain in toolchains] + [sel_toolchain])
71 self._settingsStore("toolchains", list(toolchains))
73 def removeToolchain(self):
74 if self.pageContent.toolchainList.currentRow() != -1:
75 item = self.pageContent.toolchainList.takeItem(self.pageContent.toolchainList.currentRow())
76 item = item.data(Qt.UserRole).toString()
77 toolchains = self._settingsRetrieve("toolchains").toList()
78 toolchains = [toolchain.toString() for toolchain in toolchains]
79 toolchains.remove(unicode(item))
80 self._settingsStore("toolchains", toolchains)
82 def searchToolchain(self):
83 search = BToolchainSearch.BToolchainSearch()
84 self.connect(search, SIGNAL("accepted()"), self._search)
87 def validateToolchains(self):
88 print "validating toolchains"
89 print self.pageContent.toolchainList.count()
90 for i in range(self.pageContent.toolchainList.count()):
91 filename = self.pageContent.toolchainList.item(i).text()
93 self._validationProcess = QProcess()
94 self._validationProcess.start(filename, ["-v"])
95 self._validationProcess.waitForStarted(5)
96 if not self._validationProcess.waitForFinished(5):
97 self._validationProcess.kill()
98 print "process killed"
100 print self._validationProcess.readAllStandardError()
102 def _getToolchainInfo():
103 print self._validationProcess.readAllStandardOutput()
105 def isComplete(self):
106 if self.pageContent.toolchainList.currentRow() != -1:
107 self._projectInfoStore("TOOLCHAIN", self.pageContent.toolchainList.item(self.pageContent.toolchainList.currentRow()).data(Qt.UserRole).toString())