Add the toolchain search function
[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._populateDirList()
22         self._connectSignals()
23     
24     def _setupUi(self):
25         path = self._settingsRetrieve("path_search").toBool()
26         if not path is None:
27             self.pageContent.pathBox.setChecked(path)
28         else:
29             self.pageContent.pathBox.setChecked(False)
30         customPath = self._settingsRetrieve("custom_dir").toBool()
31         if not customPath is None:
32             self.pageContent.customDirBox.setChecked(customPath)
33         else:
34             self.pageContent.customDirBox.setChecked(False)
35         self._updateUi()
36     
37     def _updateUi(self):
38         if self.pageContent.customDirBox.isChecked():
39             self._enableCustomDir()
40         else:
41             self._disableCustomDir()
42         if self.pageContent.pathBox.isChecked() or (self.pageContent.customDirBox.isChecked() and self.pageContent.customDirList.count() != 0):
43             self.pageContent.doSearchButton.setEnabled(True)
44         else:
45             self.pageContent.doSearchButton.setEnabled(False)
46     
47     def _populateDirList(self):
48         search_dir_list = self._settingsRetrieve("search_dir_list").toList()
49         for element in search_dir_list:
50             item = QListWidgetItem(element.toString())
51             item.setData(Qt.UserRole, element)
52             self.pageContent.customDirList.addItem(item)
53         
54     def _disableCustomDir(self):
55         self.pageContent.customDirList.setEnabled(False)
56         self.pageContent.addDirButton.setEnabled(False)
57         self.pageContent.removeDirButton.setEnabled(False)
58     
59     def _enableCustomDir(self):
60         self.pageContent.customDirList.setEnabled(True)
61         self.pageContent.addDirButton.setEnabled(True)
62         self.pageContent.removeDirButton.setEnabled(True)
63     
64     def _clearList(self):
65         self.pageContent.toolchainList.clear()
66     
67     def _connectSignals(self):
68         self.connect(self.pageContent.pathBox, SIGNAL("clicked()"), self._updateUi)
69         self.connect(self.pageContent.customDirBox, SIGNAL("clicked()"), self._updateUi)
70         self.connect(self.pageContent.searchButton, SIGNAL("clicked()"), self.toSearchSubpage)
71         self.connect(self.pageContent.cancelButton, SIGNAL("clicked()"), self.toSelectionSubpage)
72         self.connect(self.pageContent.doSearchButton, SIGNAL("clicked()"), self.doSearch)
73         self.connect(self.pageContent.addDirButton, SIGNAL("clicked()"), self.addDir)
74         self.connect(self.pageContent.removeDirButton, SIGNAL("clicked()"), self.removeDir)
75     
76     def toSearchSubpage(self):
77         self.pageContent.pageSelector.setCurrentIndex(1)
78
79     def toSelectionSubpage(self):
80         self.pageContent.pageSelector.setCurrentIndex(0)    
81
82     def doSearch(self):
83         path = []
84         if self.pageContent.pathBox.isChecked():
85             path += bertos_utils.getSystemPath()
86         if self.pageContent.customDirBox.isChecked():
87             for element in range(self.pageContent.customDirList.count()):
88                 path += [unicode(self.pageContent.customDirList.item(element).data(Qt.UserRole).toString())]
89         toolchains = bertos_utils.findToolchains(path)
90         self._clearList()
91         for toolchain in toolchains:
92             self.pageContent.toolchainList.addItem(QListWidgetItem(toolchain))
93         self.toSelectionSubpage()
94     
95     def addDir(self):
96         directory = QFileDialog.getExistingDirectory(self, self.tr("Open Directory"), "", QFileDialog.ShowDirsOnly)
97         if not directory.isEmpty():
98             item = QListWidgetItem(directory)
99             item.setData(Qt.UserRole, QVariant(directory))
100             self.pageContent.customDirList.addItem(item)
101             search_dir_list = self._settingsRetrieve("search_dir_list").toList()
102             search_dir_list = set([d.toString() for d in search_dir_list] + [directory])
103             self._settingsStore("search_dir_list", list(search_dir_list))
104     
105     def removeDir(self):
106         item = self.pageContent.customDirList.takeItem(self.pageContent.customDirList.currentRow())
107         search_dir_list = self._settingsRetrieve("search_dir_list").toList()
108         search_dir_list = set([d.toString() for d in search_dir_list])
109         search_dir_list.remove(item.data(Qt.UserRole).toString())
110         self._settingsStore("search_dir_list", list(search_dir_list))