Set the visibility of the updateButton to False.
[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     def setupUi(self):
70         """
71         Overload of the BWizardPage setupUi method.
72         """
73         self.pageContent.updateButton.setVisible(False)
74     
75     ####
76     
77     ## Slots ##
78     
79     def addVersion(self):
80         """
81         Slot called when the user add a BeRTOS version.
82         """
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()"))
89     
90     def removeVersion(self):
91         """
92         Slot called when the user remove a BeRTOS version.
93         """
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()"))
97     
98     def rowChanged(self):
99         """
100         Slot called when the user select an entry from the version list.
101         """
102         self.emit(SIGNAL("completeChanged()"))
103
104     def updateClicked(self):
105         """
106         Slot called when the user clicks on the 'update' button. It checks for
107         update (TO BE IMPLEMENTED).
108         """
109         pass    
110
111     ####
112     
113     def storeVersion(self, directory):
114         """
115         Stores the directory selected by the user in the QSettings.
116         """
117         versions = self.versions()
118         versions = set(versions + [directory])
119         self.setVersions(list(versions))
120     
121     def deleteVersion(self, directory):
122         """
123         Removes the given directory from the QSettings.
124         """
125         versions = self.versions()
126         versions.remove(directory)
127         self.setVersions(versions)
128     
129     def resetVersionList(self):
130         """
131         Remove all the version entries from the list.
132         """
133         self.pageContent.versionList.clear()
134     
135     def insertListElement(self, directory):
136         """
137         Inserts the given directory in the version list and returns the
138         inserted item.
139         """
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)
144             return 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)
149             return item
150     
151     def fillVersionList(self):
152         """
153         Fills the version list with all the BeRTOS versions founded in the QSettings.
154         """
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)
161     
162     def setCurrentItem(self, item):
163         """
164         Select the given item in the version list.
165         """
166         self.pageContent.versionList.setCurrentItem(item)