Add the check for empty filenames
[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         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))
125     
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)
134     
135     def addDir(self):
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))
144     
145     def removeDir(self):
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))
152     
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())
156             return True
157         else:
158             return False