Add the appropriate widget for the parameters
[bertos.git] / wizard / BModulePage.py
1 #!/usr/bin/env python
2 # encoding: utf-8
3 #
4 # Copyright 2009 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
18
19 class BModulePage(BWizardPage):
20     
21     def __init__(self):
22         BWizardPage.__init__(self, "module_select.ui")
23         self.setTitle(self.tr("Configure the modules"))
24         self._setupUi()
25         self._connectSignals()
26     
27     def reloadData(self):
28         self._fillModuleList()
29     
30     def _setupUi(self):
31         self.pageContent.moduleList.setSortingEnabled(True)
32         self.pageContent.propertyTable.horizontalHeader().setResizeMode(QHeaderView.ResizeToContents)
33         self.pageContent.propertyTable.horizontalHeader().setVisible(False)
34         self.pageContent.propertyTable.verticalHeader().setVisible(False)
35         self.pageContent.propertyTable.setColumnCount(2)
36         self.pageContent.propertyTable.setRowCount(0)
37     
38     def _connectSignals(self):
39         self.connect(self.pageContent.moduleList, SIGNAL("currentRowChanged(int)"), self.moduleItemClicked)
40     
41     def _fillModuleList(self):
42         moduleInfos = bertos_utils.loadModuleInfos(self._projectInfoRetrieve("SOURCES_PATH"))
43         self._projectInfoStore("MODULE_INFO", moduleInfos)
44         for key, value in moduleInfos.items():
45             self.pageContent.moduleList.addItem(QListWidgetItem(key))
46     
47     def _fillParameterTable(self, parameters):
48         self.pageContent.propertyTable.clear()
49         self.pageContent.propertyTable.setRowCount(len(parameters))
50         for index, key in enumerate(parameters):
51             self.pageContent.propertyTable.setItem(index, 0, QTableWidgetItem(key))
52             if "type" in parameters[key]["informations"].keys():
53                 if parameters[key]["informations"]["type"] == "boolean":
54                     checkBox = QCheckBox()
55                     self.pageContent.propertyTable.setCellWidget(index, 1, checkBox)
56                     checkBox.setChecked(parameters[key]["value"] == "1")
57                 if parameters[key]["informations"]["type"] == "int":
58                     spinBox = QSpinBox()
59                     if "max" in parameters[key]["informations"].keys():
60                         spinBox.setMaximum(int(parameters[key]["informations"]["max"]))
61                     if "min" in parameters[key]["informations"].keys():
62                         spinBox.setMinimum(int(parameters[key]["informations"]["min"]))
63                     if "long" in parameters[key]["informations"].keys():
64                         if bool(parameters[key]["informations"]["long"]):
65                             spinBox.setSuffix("L")
66                     self.pageContent.propertyTable.setCellWidget(index, 1, spinBox)
67                     spinBox.setValue(int(parameters[key]["value"]))
68             else:
69                 self.pageContent.propertyTable.setItem(index, 1, QTableWidgetItem(parameters[key]["value"]))
70     
71     def moduleItemClicked(self):
72         module = unicode(self.pageContent.moduleList.currentItem().text())
73         self._fillParameterTable(self._projectInfoRetrieve("MODULE_INFO")[module])
74
75             
76