Add comment for each method and class
[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._connectSignals()
30         self._fillVersionList()
31         self._setupUi()
32         self.setTitle(self.tr("Select the BeRTOS version needed"))
33     
34     def _connectSignals(self):
35         """
36         Connects the signals to the related slots.
37         """
38         self.connect(self.pageContent.versionList, SIGNAL("itemSelectionChanged()"), self.rowChanged)
39         self.connect(self.pageContent.addButton, SIGNAL("clicked()"), self.addVersion)
40         self.connect(self.pageContent.removeButton, SIGNAL("clicked()"), self.removeVersion)
41         # Fake signal connection for the update button
42         self.connect(self.pageContent.updateButton, SIGNAL("clicked()"), self.updateClicked)
43     
44     def _setupUi(self):
45         """
46         Sets up the user interface.
47         """
48         self.pageContent.versionList.setCurrentRow(-1)
49     
50     def _storeVersion(self, directory):
51         """
52         Stores the directory selected by the user in the QSettings.
53         """
54         versions = self.versions()
55         versions = set(versions + [directory])
56         self.setVersions(list(versions))
57     
58     def _deleteVersion(self, directory):
59         """
60         Removes the given directory from the QSettings.
61         """
62         versions = self.versions()
63         versions.remove(directory)
64         self.setVersions(versions)
65         
66     def _insertListElement(self, directory):
67         """
68         Inserts the given directory in the version list.
69         """
70         if bertos_utils.isBertosDir(directory):
71             item = QListWidgetItem(QIcon(":/images/ok.png"), bertos_utils.bertosVersion(directory) + " (\"" + os.path.normpath(directory) + "\")")
72             item.setData(Qt.UserRole, qvariant_converter.convertString(directory))
73             self.pageContent.versionList.addItem(item)
74         elif len(directory) > 0:
75             item = QListWidgetItem(QIcon(":/images/warning.png"), "UNKNOWN" + " (\"" + os.path.normpath(directory) + "\")")
76             item.setData(Qt.UserRole, qvariant_converter.convertString(directory))
77             self.pageContent.versionList.addItem(item)
78     
79     def _fillVersionList(self):
80         """
81         Fills the version list with all the BeRTOS versions founded in the QSettings.
82         """
83         versions = self.versions()
84         for directory in versions:
85             self._insertListElement(directory)
86
87     def isComplete(self):
88         """
89         Overload of the QWizardPage isComplete method.
90         """
91         if self.pageContent.versionList.currentRow() != -1:
92             # Remove trailing slash
93             sources_path = qvariant_converter.getString(self.pageContent.versionList.currentItem().data(Qt.UserRole))
94             if sources_path.endswith(os.sep):
95                  sources_path = sources_path[:-1]
96             self._projectInfoStore("SOURCES_PATH", sources_path)
97             return True
98         else:
99             return False
100     
101     def addVersion(self):
102         """
103         Slot called when the user add a BeRTOS version.
104         """
105         directory = QFileDialog.getExistingDirectory(self, self.tr("Choose a directory"), "", QFileDialog.ShowDirsOnly | QFileDialog.DontResolveSymlinks)
106         if not directory.isEmpty():
107             self._storeVersion(unicode(directory))
108             self.pageContent.versionList.clear()
109             self._fillVersionList()
110             self.emit(SIGNAL("completeChanged()"))
111     
112     def removeVersion(self):
113         """
114         Slot called when the user remove a BeRTOS version.
115         """
116         item = self.pageContent.versionList.takeItem(self.pageContent.versionList.currentRow())
117         self._deleteVersion(qvariant_converter.getString(item.data(Qt.UserRole)))
118         self.emit(SIGNAL("completeChanged()"))
119     
120     def updateClicked(self):
121         """
122         Checks for update (TO BE IMPLEMENTED).
123         """
124         pass
125     
126     def rowChanged(self):
127         """
128         Slot called when the user select an entry from the version list.
129         """
130         self.emit(SIGNAL("completeChanged()"))