4 # Copyright 2008 Develer S.r.l. (http://www.develer.com/)
9 # Author: Lorenzo Berni <duplo@develer.com>
12 from BWizardPage import *
15 class BToolchainPage(BWizardPage):
18 BWizardPage.__init__(self, "toolchain_select.ui")
19 self.setTitle(self.tr("Select toolchain"))
21 self._populateToolchainList()
22 self._populateDirList()
23 self._connectSignals()
26 path = self._settingsRetrieve("path_search").toBool()
28 self.pageContent.pathBox.setChecked(path)
30 self.pageContent.pathBox.setChecked(False)
31 customPath = self._settingsRetrieve("custom_dir").toBool()
32 if not customPath is None:
33 self.pageContent.customDirBox.setChecked(customPath)
35 self.pageContent.customDirBox.setChecked(False)
39 if self.pageContent.customDirBox.isChecked():
40 self._enableCustomDir()
42 self._disableCustomDir()
43 if self.pageContent.pathBox.isChecked() or (self.pageContent.customDirBox.isChecked() and self.pageContent.customDirList.count() != 0):
44 self.pageContent.doSearchButton.setEnabled(True)
46 self.pageContent.doSearchButton.setEnabled(False)
48 def _populateToolchainList(self):
49 toolchains = self._settingsRetrieve("toolchains").toList()
50 for element in toolchains:
51 item = QListWidgetItem(element.toString())
52 item.setData(Qt.UserRole, element)
53 self.pageContent.toolchainList.addItem(item)
55 def _populateDirList(self):
56 search_dir_list = self._settingsRetrieve("search_dir_list").toList()
57 for element in search_dir_list:
58 item = QListWidgetItem(element.toString())
59 item.setData(Qt.UserRole, element)
60 self.pageContent.customDirList.addItem(item)
62 def _disableCustomDir(self):
63 self.pageContent.customDirList.setEnabled(False)
64 self.pageContent.addDirButton.setEnabled(False)
65 self.pageContent.removeDirButton.setEnabled(False)
67 def _enableCustomDir(self):
68 self.pageContent.customDirList.setEnabled(True)
69 self.pageContent.addDirButton.setEnabled(True)
70 self.pageContent.removeDirButton.setEnabled(True)
73 self.pageContent.toolchainList.clear()
75 def _selectionChanged(self):
76 self.emit(SIGNAL("completeChanged()"))
78 def _connectSignals(self):
79 self.connect(self.pageContent.pathBox, SIGNAL("clicked()"), self._updateUi)
80 self.connect(self.pageContent.customDirBox, SIGNAL("clicked()"), self._updateUi)
81 self.connect(self.pageContent.searchButton, SIGNAL("clicked()"), self.toSearchSubpage)
82 self.connect(self.pageContent.cancelButton, SIGNAL("clicked()"), self.toSelectionSubpage)
83 self.connect(self.pageContent.doSearchButton, SIGNAL("clicked()"), self.doSearch)
84 self.connect(self.pageContent.addDirButton, SIGNAL("clicked()"), self.addDir)
85 self.connect(self.pageContent.removeDirButton, SIGNAL("clicked()"), self.removeDir)
86 self.connect(self.pageContent.toolchainList, SIGNAL("itemSelectionChanged()"), self._selectionChanged)
87 self.connect(self.pageContent.addButton, SIGNAL("clicked()"), self.addToolchain)
88 self.connect(self.pageContent.removeButton, SIGNAL("clicked()"), self.removeToolchain)
90 def toSearchSubpage(self):
91 self.pageContent.pageSelector.setCurrentIndex(1)
93 def toSelectionSubpage(self):
94 self.pageContent.pageSelector.setCurrentIndex(0)
98 if self.pageContent.pathBox.isChecked():
99 path += bertos_utils.getSystemPath()
100 if self.pageContent.customDirBox.isChecked():
101 for element in range(self.pageContent.customDirList.count()):
102 path += [unicode(self.pageContent.customDirList.item(element).data(Qt.UserRole).toString())]
103 toolchains = bertos_utils.findToolchains(path)
104 toolchains_stored = self._settingsRetrieve("toolchains").toList()
105 toolchains += [unicode(toolchain.toString()) for toolchain in toolchains_stored]
106 toolchains = set(toolchains)
107 toolchains = list(toolchains)
109 for toolchain in toolchains:
110 item = QListWidgetItem(toolchain)
111 item.setData(Qt.UserRole, QVariant(toolchain))
112 self.pageContent.toolchainList.addItem(item)
113 self._settingsStore("toolchains", toolchains)
114 self.toSelectionSubpage()
116 def addToolchain(self):
117 sel_toolchain = QFileDialog.getOpenFileName(self, self.tr("Choose the toolchain"), "")
118 item = QListWidgetItem(sel_toolchain)
119 item.setData(Qt.UserRole, QVariant(sel_toolchain))
120 self.pageContent.toolchainList.addItem(item)
121 toolchains = self._settingsRetrieve("toolchains").toList()
122 toolchains = set([toolchain.toString() for toolchain in toolchains] + [sel_toolchain])
123 self._settingsStore("toolchains", list(toolchains))
125 def removeToolchain(self):
126 if self.pageContent.toolchainList.currentRow() != -1:
127 item = self.pageContent.toolchainList.takeItem(self.pageContent.toolchainList.currentRow())
128 item = item.data(Qt.UserRole).toString()
129 toolchains = self._settingsRetrieve("toolchains").toList()
130 toolchains = [toolchain.toString() for toolchain in toolchains]
131 toolchains.remove(unicode(item))
132 self._settingsStore("toolchains", toolchains)
135 directory = QFileDialog.getExistingDirectory(self, self.tr("Open Directory"), "", QFileDialog.ShowDirsOnly)
136 if not directory.isEmpty():
137 item = QListWidgetItem(directory)
138 item.setData(Qt.UserRole, QVariant(directory))
139 self.pageContent.customDirList.addItem(item)
140 search_dir_list = self._settingsRetrieve("search_dir_list").toList()
141 search_dir_list = set([d.toString() for d in search_dir_list] + [directory])
142 self._settingsStore("search_dir_list", list(search_dir_list))
145 if self.pageContent.customDirList.currentRow() != -1:
146 item = self.pageContent.customDirList.takeItem(self.pageContent.customDirList.currentRow())
147 search_dir_list = self._settingsRetrieve("search_dir_list").toList()
148 search_dir_list = set([d.toString() for d in search_dir_list])
149 search_dir_list.remove(item.data(Qt.UserRole).toString())
150 self._settingsStore("search_dir_list", list(search_dir_list))
152 def isComplete(self):
153 if self.pageContent.toolchainList.currentRow() != -1:
154 self._projectInfoStore("TOOLCHAIN", self.pageContent.toolchainList.item(self.pageContent.toolchainList.currentRow()).data(Qt.UserRole).toString())