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 if not sel_toolchain.isEmpty():
119 item = QListWidgetItem(sel_toolchain)
120 item.setData(Qt.UserRole, QVariant(sel_toolchain))
121 self.pageContent.toolchainList.addItem(item)
122 toolchains = self._settingsRetrieve("toolchains").toList()
123 toolchains = set([toolchain.toString() for toolchain in toolchains] + [sel_toolchain])
124 self._settingsStore("toolchains", list(toolchains))
126 def removeToolchain(self):
127 if self.pageContent.toolchainList.currentRow() != -1:
128 item = self.pageContent.toolchainList.takeItem(self.pageContent.toolchainList.currentRow())
129 item = item.data(Qt.UserRole).toString()
130 toolchains = self._settingsRetrieve("toolchains").toList()
131 toolchains = [toolchain.toString() for toolchain in toolchains]
132 toolchains.remove(unicode(item))
133 self._settingsStore("toolchains", toolchains)
136 directory = QFileDialog.getExistingDirectory(self, self.tr("Open Directory"), "", QFileDialog.ShowDirsOnly)
137 if not directory.isEmpty():
138 item = QListWidgetItem(directory)
139 item.setData(Qt.UserRole, QVariant(directory))
140 self.pageContent.customDirList.addItem(item)
141 search_dir_list = self._settingsRetrieve("search_dir_list").toList()
142 search_dir_list = set([d.toString() for d in search_dir_list] + [directory])
143 self._settingsStore("search_dir_list", list(search_dir_list))
146 if self.pageContent.customDirList.currentRow() != -1:
147 item = self.pageContent.customDirList.takeItem(self.pageContent.customDirList.currentRow())
148 search_dir_list = self._settingsRetrieve("search_dir_list").toList()
149 search_dir_list = set([d.toString() for d in search_dir_list])
150 search_dir_list.remove(item.data(Qt.UserRole).toString())
151 self._settingsStore("search_dir_list", list(search_dir_list))
153 def isComplete(self):
154 if self.pageContent.toolchainList.currentRow() != -1:
155 self._projectInfoStore("TOOLCHAIN", self.pageContent.toolchainList.item(self.pageContent.toolchainList.currentRow()).data(Qt.UserRole).toString())