Fix typos.
[bertos.git] / wizard / BVersionPage.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 import os
13
14 from PyQt4.QtGui import *
15 from BWizardPage import *
16 import bertos_utils
17 import qvariant_converter
18
19 from const import *
20
21 class BVersionPage(BWizardPage):
22     """
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.
25     """
26     
27     def __init__(self):
28         BWizardPage.__init__(self, UI_LOCATION + "/bertos_versions.ui")
29         self.setTitle(self.tr("Select the BeRTOS version needed"))
30
31     ## Overloaded QWizardPage methods ##
32     
33     def isComplete(self):
34         """
35         Overload of the QWizardPage isComplete method.
36         """
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)
43             return True
44         else:
45             return False
46     
47     ####
48     
49     ## Overloaded BWizardPage methods ##
50
51     def connectSignals(self):
52         """
53         Overload of the BWizardPage connectSignals method.
54         """
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)
60     
61     def reloadData(self):
62         """
63         Overload of the BWizardPage reloadData method.
64         """
65         self.resetVersionList()
66         self.pageContent.versionList.setCurrentRow(-1)
67         self.fillVersionList()
68     
69     ####
70     
71     ## Slots ##
72     
73     def addVersion(self):
74         """
75         Slot called when the user add a BeRTOS version.
76         """
77         directory = QFileDialog.getExistingDirectory(self, self.tr("Choose a directory"), "", QFileDialog.ShowDirsOnly | QFileDialog.DontResolveSymlinks)
78         if not directory.isEmpty():
79             self.storeVersion(unicode(directory))
80             self.pageContent.versionList.clear()
81             self.fillVersionList()
82             self.emit(SIGNAL("completeChanged()"))
83     
84     def removeVersion(self):
85         """
86         Slot called when the user remove a BeRTOS version.
87         """
88         item = self.pageContent.versionList.takeItem(self.pageContent.versionList.currentRow())
89         self.deleteVersion(qvariant_converter.getString(item.data(Qt.UserRole)))
90         self.emit(SIGNAL("completeChanged()"))
91     
92     def rowChanged(self):
93         """
94         Slot called when the user select an entry from the version list.
95         """
96         self.emit(SIGNAL("completeChanged()"))
97
98     def updateClicked(self):
99         """
100         Slot called when the user clicks on the 'update' button. It checks for
101         update (TO BE IMPLEMENTED).
102         """
103         pass    
104
105     ####
106     
107     def storeVersion(self, directory):
108         """
109         Stores the directory selected by the user in the QSettings.
110         """
111         versions = self.versions()
112         versions = set(versions + [directory])
113         self.setVersions(list(versions))
114     
115     def deleteVersion(self, directory):
116         """
117         Removes the given directory from the QSettings.
118         """
119         versions = self.versions()
120         versions.remove(directory)
121         self.setVersions(versions)
122     
123     def resetVersionList(self):
124         """
125         Remove all the version entries from the list.
126         """
127         self.pageContent.versionList.clear()
128     
129     def insertListElement(self, directory):
130         """
131         Inserts the given directory in the version list and returns the
132         inserted item.
133         """
134         if bertos_utils.isBertosDir(directory):
135             item = QListWidgetItem(QIcon(":/images/ok.png"), bertos_utils.bertosVersion(directory) + " (\"" + os.path.normpath(directory) + "\")")
136             item.setData(Qt.UserRole, qvariant_converter.convertString(directory))
137             self.pageContent.versionList.addItem(item)
138             return item
139         elif len(directory) > 0:
140             item = QListWidgetItem(QIcon(":/images/warning.png"), "UNKNOWN" + " (\"" + os.path.normpath(directory) + "\")")
141             item.setData(Qt.UserRole, qvariant_converter.convertString(directory))
142             self.pageContent.versionList.addItem(item)
143             return item
144     
145     def fillVersionList(self):
146         """
147         Fills the version list with all the BeRTOS versions founded in the QSettings.
148         """
149         versions = self.versions()
150         selected = self.projectInfo("SOURCES_PATH")
151         for directory in versions:
152             item = self.insertListElement(directory)
153             if not selected is None and selected == directory:
154                 self.setCurrentItem(item)
155     
156     def setCurrentItem(self, item):
157         """
158         Select the given item in the version list.
159         """
160         self.pageContent.versionList.setCurrentItem(item)