Try to correct indentation problem...
[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 setupUi(self):
52         """
53         Overload of the BWizardPage setupUi method.
54         """
55         self.fillVersionList()
56         self.pageContent.versionList.setCurrentRow(-1)
57
58     def connectSignals(self):
59         """
60         Overload of the BWizardPage connectSignals method.
61         """
62         self.connect(self.pageContent.versionList, SIGNAL("itemSelectionChanged()"), self.rowChanged)
63         self.connect(self.pageContent.addButton, SIGNAL("clicked()"), self.addVersion)
64         self.connect(self.pageContent.removeButton, SIGNAL("clicked()"), self.removeVersion)
65         # Fake signal connection for the update button
66         self.connect(self.pageContent.updateButton, SIGNAL("clicked()"), self.updateClicked)
67     
68     ####
69     
70     ## Slots ##
71     
72     def addVersion(self):
73         """
74         Slot called when the user add a BeRTOS version.
75         """
76         directory = QFileDialog.getExistingDirectory(self, self.tr("Choose a directory"), "", QFileDialog.ShowDirsOnly | QFileDialog.DontResolveSymlinks)
77         if not directory.isEmpty():
78             self.storeVersion(unicode(directory))
79             self.pageContent.versionList.clear()
80             self.fillVersionList()
81             self.emit(SIGNAL("completeChanged()"))
82     
83     def removeVersion(self):
84         """
85         Slot called when the user remove a BeRTOS version.
86         """
87         item = self.pageContent.versionList.takeItem(self.pageContent.versionList.currentRow())
88         self.deleteVersion(qvariant_converter.getString(item.data(Qt.UserRole)))
89         self.emit(SIGNAL("completeChanged()"))
90     
91     def rowChanged(self):
92         """
93         Slot called when the user select an entry from the version list.
94         """
95         self.emit(SIGNAL("completeChanged()"))
96
97     def updateClicked(self):
98         """
99         Slot called when the user clicks on the 'update' button. It checks for
100         update (TO BE IMPLEMENTED).
101         """
102         pass    
103
104     ####
105     
106     def storeVersion(self, directory):
107         """
108         Stores the directory selected by the user in the QSettings.
109         """
110         versions = self.versions()
111         versions = set(versions + [directory])
112         self.setVersions(list(versions))
113     
114     def deleteVersion(self, directory):
115         """
116         Removes the given directory from the QSettings.
117         """
118         versions = self.versions()
119         versions.remove(directory)
120         self.setVersions(versions)
121         
122     def insertListElement(self, directory):
123         """
124         Inserts the given directory in the version list.
125         """
126         if bertos_utils.isBertosDir(directory):
127             item = QListWidgetItem(QIcon(":/images/ok.png"), bertos_utils.bertosVersion(directory) + " (\"" + os.path.normpath(directory) + "\")")
128             item.setData(Qt.UserRole, qvariant_converter.convertString(directory))
129             self.pageContent.versionList.addItem(item)
130         elif len(directory) > 0:
131             item = QListWidgetItem(QIcon(":/images/warning.png"), "UNKNOWN" + " (\"" + os.path.normpath(directory) + "\")")
132             item.setData(Qt.UserRole, qvariant_converter.convertString(directory))
133             self.pageContent.versionList.addItem(item)
134     
135     def fillVersionList(self):
136         """
137         Fills the version list with all the BeRTOS versions founded in the QSettings.
138         """
139         versions = self.versions()
140         for directory in versions:
141             self.insertListElement(directory)