Add the toolchain list in the settings
[bertos.git] / wizard / BToolchainPage.py
1 #!/usr/bin/env python
2 # encoding: utf-8
3 #
4 # Copyright 2008 Develer S.r.l. (http://www.develer.com/)
5 # All rights reserved.
6 #
7 # $Id:$
8 #
9 # Author: Lorenzo Berni <duplo@develer.com>
10 #
11
12 from BWizardPage import *
13 import bertos_utils
14
15 class BToolchainPage(BWizardPage):
16     
17     def __init__(self):
18         BWizardPage.__init__(self, "toolchain_select.ui")
19         self.setTitle(self.tr("Select toolchain"))
20         self._setupUi()
21         self._populateToolchainList()
22         self._populateDirList()
23         self._connectSignals()
24     
25     def _setupUi(self):
26         path = self._settingsRetrieve("path_search").toBool()
27         if not path is None:
28             self.pageContent.pathBox.setChecked(path)
29         else:
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)
34         else:
35             self.pageContent.customDirBox.setChecked(False)
36         self._updateUi()
37     
38     def _updateUi(self):
39         if self.pageContent.customDirBox.isChecked():
40             self._enableCustomDir()
41         else:
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)
45         else:
46             self.pageContent.doSearchButton.setEnabled(False)
47     
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)
54     
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)
61         
62     def _disableCustomDir(self):
63         self.pageContent.customDirList.setEnabled(False)
64         self.pageContent.addDirButton.setEnabled(False)
65         self.pageContent.removeDirButton.setEnabled(False)
66     
67     def _enableCustomDir(self):
68         self.pageContent.customDirList.setEnabled(True)
69         self.pageContent.addDirButton.setEnabled(True)
70         self.pageContent.removeDirButton.setEnabled(True)
71     
72     def _clearList(self):
73         self.pageContent.toolchainList.clear()
74     
75     def _selectionChanged(self):
76         self.emit(SIGNAL("completeChanged()"))
77     
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)
89     
90     def toSearchSubpage(self):
91         self.pageContent.pageSelector.setCurrentIndex(1)
92
93     def toSelectionSubpage(self):
94         self.pageContent.pageSelector.setCurrentIndex(0)    
95
96     def doSearch(self):
97         path = []
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)
108         self._clearList()
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()
115     
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))
124     
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)
133     
134     def addDir(self):
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))
143     
144     def removeDir(self):
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))
151     
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())
155             return True
156         else:
157             return False