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 version needed"))
31 ## Overloaded QWizardPage methods ##
35 Overload of the QWizardPage isComplete method.
37 if self.pageContent.versionList.currentRow() != -1:
38 sources_path = qvariant_converter.getString(self.pageContent.versionList.currentItem().data(Qt.UserRole))
39 # Remove the trailing slash
40 if sources_path.endswith(os.sep):
41 sources_path = sources_path[:-1]
42 self.setProjectInfo("SOURCES_PATH", sources_path)
49 ## Overloaded BWizardPage methods ##
51 def connectSignals(self):
53 Overload of the BWizardPage connectSignals method.
55 self.connect(self.pageContent.versionList, SIGNAL("itemSelectionChanged()"), self.rowChanged)
56 self.connect(self.pageContent.addButton, SIGNAL("clicked()"), self.addVersion)
57 self.connect(self.pageContent.removeButton, SIGNAL("clicked()"), self.removeVersion)
58 # Fake signal connection for the update button
59 self.connect(self.pageContent.updateButton, SIGNAL("clicked()"), self.updateClicked)
63 Overload of the BWizardPage reloadData method.
65 self.resetVersionList()
66 self.pageContent.versionList.setCurrentRow(-1)
67 self.fillVersionList()
71 Overload of the BWizardPage setupUi method.
73 self.pageContent.updateButton.setVisible(False)
81 Slot called when the user add a BeRTOS version.
83 directory = QFileDialog.getExistingDirectory(self, self.tr("Choose a directory"), "", QFileDialog.ShowDirsOnly | QFileDialog.DontResolveSymlinks)
84 if not directory.isEmpty():
85 self.storeVersion(unicode(directory))
86 self.pageContent.versionList.clear()
87 self.fillVersionList()
88 self.emit(SIGNAL("completeChanged()"))
90 def removeVersion(self):
92 Slot called when the user remove a BeRTOS version.
94 item = self.pageContent.versionList.takeItem(self.pageContent.versionList.currentRow())
95 self.deleteVersion(qvariant_converter.getString(item.data(Qt.UserRole)))
96 self.emit(SIGNAL("completeChanged()"))
100 Slot called when the user select an entry from the version list.
102 self.emit(SIGNAL("completeChanged()"))
104 def updateClicked(self):
106 Slot called when the user clicks on the 'update' button. It checks for
107 update (TO BE IMPLEMENTED).
113 def storeVersion(self, directory):
115 Stores the directory selected by the user in the QSettings.
117 versions = self.versions()
118 versions = set(versions + [directory])
119 self.setVersions(list(versions))
121 def deleteVersion(self, directory):
123 Removes the given directory from the QSettings.
125 versions = self.versions()
126 versions.remove(directory)
127 self.setVersions(versions)
129 def resetVersionList(self):
131 Remove all the version entries from the list.
133 self.pageContent.versionList.clear()
135 def insertListElement(self, directory):
137 Inserts the given directory in the version list and returns the
140 if bertos_utils.isBertosDir(directory):
141 item = QListWidgetItem(QIcon(":/images/ok.png"), bertos_utils.bertosVersion(directory) + " (\"" + os.path.normpath(directory) + "\")")
142 item.setData(Qt.UserRole, qvariant_converter.convertString(directory))
143 self.pageContent.versionList.addItem(item)
145 elif len(directory) > 0:
146 item = QListWidgetItem(QIcon(":/images/warning.png"), "UNKNOWN" + " (\"" + os.path.normpath(directory) + "\")")
147 item.setData(Qt.UserRole, qvariant_converter.convertString(directory))
148 self.pageContent.versionList.addItem(item)
151 def fillVersionList(self):
153 Fills the version list with all the BeRTOS versions founded in the QSettings.
155 versions = self.versions()
156 selected = self.projectInfo("SOURCES_PATH")
157 for directory in versions:
158 item = self.insertListElement(directory)
159 if not selected is None and selected == directory:
160 self.setCurrentItem(item)
162 def setCurrentItem(self, item):
164 Select the given item in the version list.
166 self.pageContent.versionList.setCurrentItem(item)