4 # Copyright 2008 Develer S.r.l. (http://www.develer.com/)
9 # Author: Lorenzo Berni <duplo@develer.com>
14 from PyQt4.QtGui import *
15 from BWizardPage import *
17 import qvariant_converter
21 class BVersionPage(BWizardPage):
23 Page of the wizard that permits to choose which BeRTOS version the user wants
24 to use. This page show some pieces of information about the version.
28 BWizardPage.__init__(self, UI_LOCATION + "/bertos_versions.ui")
29 self.setTitle(self.tr("Select the BeRTOS directory"))
30 self.setSubTitle(self.tr("The project created will be based on the BeRTOS version found"))
32 ## Overloaded QWizardPage methods ##
36 Overload of the QWizardPage isComplete method.
38 if self.pageContent.versionList.currentRow() != -1:
39 sources_path = qvariant_converter.getString(self.pageContent.versionList.currentItem().data(Qt.UserRole))
40 # Remove the trailing slash
41 if sources_path.endswith(os.sep):
42 sources_path = sources_path[:-1]
43 self.setProjectInfo("SOURCES_PATH", sources_path)
50 ## Overloaded BWizardPage methods ##
52 def connectSignals(self):
54 Overload of the BWizardPage connectSignals method.
56 self.connect(self.pageContent.versionList, SIGNAL("itemSelectionChanged()"), self.rowChanged)
57 self.connect(self.pageContent.addButton, SIGNAL("clicked()"), self.addVersion)
58 self.connect(self.pageContent.removeButton, SIGNAL("clicked()"), self.removeVersion)
59 # Fake signal connection for the update button
60 self.connect(self.pageContent.updateButton, SIGNAL("clicked()"), self.updateClicked)
64 Overload of the BWizardPage reloadData method.
66 self.resetVersionList()
67 self.pageContent.versionList.setCurrentRow(-1)
68 self.fillVersionList()
72 Overload of the BWizardPage setupUi method.
74 self.pageContent.updateButton.setVisible(False)
82 Slot called when the user add a BeRTOS version.
84 directory = QFileDialog.getExistingDirectory(self, self.tr("Choose a directory"), "", QFileDialog.ShowDirsOnly | QFileDialog.DontResolveSymlinks)
85 if not directory.isEmpty():
86 self.storeVersion(unicode(directory))
87 self.pageContent.versionList.clear()
88 self.fillVersionList()
89 self.emit(SIGNAL("completeChanged()"))
91 def removeVersion(self):
93 Slot called when the user remove a BeRTOS version.
95 item = self.pageContent.versionList.takeItem(self.pageContent.versionList.currentRow())
96 self.deleteVersion(qvariant_converter.getString(item.data(Qt.UserRole)))
97 self.emit(SIGNAL("completeChanged()"))
101 Slot called when the user select an entry from the version list.
103 if self.isDefaultVersion(self.currentVersion()):
104 self.disableRemoveButton()
106 self.enableRemoveButton()
107 self.emit(SIGNAL("completeChanged()"))
109 def updateClicked(self):
111 Slot called when the user clicks on the 'update' button. It checks for
112 update (TO BE IMPLEMENTED).
118 def storeVersion(self, directory):
120 Stores the directory selected by the user in the QSettings.
122 versions = self.versions()
123 versions = set(versions + [directory])
124 self.setVersions(list(versions))
126 def deleteVersion(self, directory):
128 Removes the given directory from the QSettings.
130 versions = self.versions()
131 versions.remove(directory)
132 self.setVersions(versions)
134 def resetVersionList(self):
136 Remove all the version entries from the list.
138 self.pageContent.versionList.clear()
140 def insertListElement(self, directory):
142 Inserts the given directory in the version list and returns the
145 if bertos_utils.isBertosDir(directory):
146 item = QListWidgetItem(QIcon(":/images/ok.png"), bertos_utils.bertosVersion(directory) + " (\"" + os.path.normpath(directory) + "\")")
147 item.setData(Qt.UserRole, qvariant_converter.convertString(directory))
148 self.pageContent.versionList.addItem(item)
150 elif len(directory) > 0:
151 item = QListWidgetItem(QIcon(":/images/warning.png"), "UNKNOWN" + " (\"" + os.path.normpath(directory) + "\")")
152 item.setData(Qt.UserRole, qvariant_converter.convertString(directory))
153 self.pageContent.versionList.addItem(item)
156 def fillVersionList(self):
158 Fills the version list with all the BeRTOS versions founded in the QSettings.
162 import winreg_importer
163 versions |= set(winreg_importer.getBertosDirs())
164 versions |= set(self.versions())
165 selected = self.projectInfo("SOURCES_PATH")
166 for directory in versions:
167 item = self.insertListElement(directory)
168 if selected and selected == directory:
169 self.setCurrentItem(item)
171 self.setCurrentItem(self.latestVersionItem())
173 def disableRemoveButton(self):
175 Disable the Remove button.
177 self.pageContent.removeButton.setEnabled(False)
179 def enableRemoveButton(self):
181 Enable the Remove button.
183 self.pageContent.removeButton.setEnabled(True)
185 def latestVersionItem(self):
187 Returns the latest BeRTOS version founded.
189 latest_version_item = QTableWidgetItem("")
190 for index in range(self.pageContent.versionList.count()):
191 item = self.pageContent.versionList.item(index)
192 version = item.text().split(" (")[0]
193 latest = latest_version_item.text().split(" (")[0]
194 if version != "UNKNOWN" and version > latest:
195 latest_version_item = item
196 return latest_version_item
198 def setCurrentItem(self, item):
200 Select the given item in the version list.
202 self.pageContent.versionList.setCurrentItem(item)
204 def currentItem(self):
206 Returns the current selected item.
208 return self.pageContent.versionList.currentItem()
210 def currentVersion(self):
212 Return the path of the selected version.
214 current = self.currentItem()
215 return qvariant_converter.getString(current.data(Qt.UserRole))
217 def isDefaultVersion(self, version):
219 Returns True if the given version is one of the default versions.
222 import winreg_importer
223 if version in winreg_importer.getBertosDirs():