Mercurial > libervia-backend
comparison tools/xml_tools.py @ 105:d2630fba8dfd
params to XMLUI tools
- xml_tools: new paramsXml2xmlUI method, for conversion from params xml to User Interface XML
- xml_tools: new addButton method
- bridge: new method getParamsUI
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 23 Jun 2010 17:26:21 +0800 |
parents | 5458ac1380cc |
children | 138d82f64b6f |
comparison
equal
deleted
inserted
replaced
104:5458ac1380cc | 105:d2630fba8dfd |
---|---|
28 | 28 |
29 | 29 |
30 def dataForm2xml(form): | 30 def dataForm2xml(form): |
31 """Take a data form (xep-0004, Wokkel's implementation) and convert it to a SàT xml""" | 31 """Take a data form (xep-0004, Wokkel's implementation) and convert it to a SàT xml""" |
32 | 32 |
33 form_panel = XMLUI("form", "vertical") | 33 form_ui = XMLUI("form", "vertical") |
34 | |
35 | 34 |
36 if form.instructions: | 35 if form.instructions: |
37 form_panel.addText('\n'.join(form.instructions), 'instructions') | 36 form_ui.addText('\n'.join(form.instructions), 'instructions') |
38 | 37 |
39 form_panel.changeLayout("pairs") | 38 form_ui.changeLayout("pairs") |
40 | 39 |
41 for field in form.fieldList: | 40 for field in form.fieldList: |
42 if field.fieldType == 'fixed': | 41 if field.fieldType == 'fixed': |
43 __field_type = 'text' | 42 __field_type = 'text' |
44 elif field.fieldType == 'text-single': | 43 elif field.fieldType == 'text-single': |
50 else: | 49 else: |
51 error (u"FIXME FIXME FIXME: Type [%s] is not managed yet by SàT" % field.fieldType) | 50 error (u"FIXME FIXME FIXME: Type [%s] is not managed yet by SàT" % field.fieldType) |
52 __field_type = "string" | 51 __field_type = "string" |
53 | 52 |
54 if field.label: | 53 if field.label: |
55 form_panel.addLabel(field.label) | 54 form_ui.addLabel(field.label) |
56 else: | 55 else: |
57 form_panel.addEmpty() | 56 form_ui.addEmpty() |
58 | 57 |
59 elem = form_panel.addElement(__field_type, field.var, None, field.value, [option.value for option in field.options]) | 58 elem = form_ui.addElement(__field_type, field.var, None, field.value, [option.value for option in field.options]) |
60 return form_panel.toXml() | 59 return form_ui.toXml() |
61 | 60 |
62 def tupleList2dataForm(values): | 61 def tupleList2dataForm(values): |
63 """convert a list of tuples (name,value) to a wokkel submit data form""" | 62 """convert a list of tuples (name,value) to a wokkel submit data form""" |
64 form = data_form.Form('submit') | 63 form = data_form.Form('submit') |
65 for value in values: | 64 for value in values: |
66 field = data_form.Field(var=value[0], value=value[1]) | 65 field = data_form.Field(var=value[0], value=value[1]) |
67 form.addField(field) | 66 form.addField(field) |
68 | 67 |
69 return form | 68 return form |
69 | |
70 def paramsXml2xmlUI(xml): | |
71 """Convert the xml for parameter to a SàT XML User Interface""" | |
72 params_doc = minidom.parseString(xml) | |
73 top = params_doc.documentElement | |
74 if top.nodeName != 'params': | |
75 error(_('INTERNAL ERROR: parameters xml not valid')) | |
76 assert(False) | |
77 param_ui = XMLUI("param", "tabs") | |
78 for category in top.getElementsByTagName("category"): | |
79 name = category.getAttribute('name') | |
80 if not name: | |
81 error(_('INTERNAL ERROR: params categories must have a name')) | |
82 assert(False) | |
83 param_ui.addCategory(name, 'pairs') | |
84 for param in category.getElementsByTagName("param"): | |
85 name = param.getAttribute('name') | |
86 if not name: | |
87 error(_('INTERNAL ERROR: params must have a name')) | |
88 assert(False) | |
89 type = param.getAttribute('type') | |
90 value = param.getAttribute('value') or None | |
91 callback = param.getAttribute('callback') or None | |
92 param_ui.addLabel(name) | |
93 param_ui.addElement(name=name, type=type, value=value, callback=callback) | |
94 | |
95 return param_ui.toXml() | |
96 | |
97 | |
98 | |
70 | 99 |
71 class XMLUI: | 100 class XMLUI: |
72 """This class is used to create a user interface (form/window/parameters/etc) using SàT XML""" | 101 """This class is used to create a user interface (form/window/parameters/etc) using SàT XML""" |
73 | 102 |
74 def __init__(self, panel_type, layout="vertical"): | 103 def __init__(self, panel_type, layout="vertical"): |
168 assert (options) | 197 assert (options) |
169 elem = self.__createElem('list', name, self.currentLayout) | 198 elem = self.__createElem('list', name, self.currentLayout) |
170 self.addOptions(options, elem) | 199 self.addOptions(options, elem) |
171 if value: | 200 if value: |
172 elem.setAttribute('value', value) | 201 elem.setAttribute('value', value) |
173 | 202 |
174 def addElement(self, type, name = None, content = None, value = None, options = None): | 203 def addButton(self, callback, name): |
204 """Add a button | |
205 @param callback: callback which will be called if button is pressed | |
206 @param name: name shown on the button""" | |
207 elem = self.__createElem('button', name, self.currentLayout) | |
208 elem.setAttribute('callback', callback) | |
209 | |
210 | |
211 def addElement(self, type, name = None, content = None, value = None, options = None, callback = None): | |
175 """Convenience method to add element, the params correspond to the ones in addSomething methods""" | 212 """Convenience method to add element, the params correspond to the ones in addSomething methods""" |
176 if type == 'empty': | 213 if type == 'empty': |
177 self.addEmpty(name) | 214 self.addEmpty(name) |
178 elif type == 'text': | 215 elif type == 'text': |
179 assert(content) | 216 assert(content) |
184 self.addString(name, value) | 221 self.addString(name, value) |
185 elif type == 'password': | 222 elif type == 'password': |
186 self.addPassword(name, value) | 223 self.addPassword(name, value) |
187 elif type == 'list': | 224 elif type == 'list': |
188 self.addList(options, name, value) | 225 self.addList(options, name, value) |
226 elif type == 'button': | |
227 assert(callback and name) | |
228 self.addButton(callback, name) | |
189 | 229 |
190 def addOptions(self, options, parent): | 230 def addOptions(self, options, parent): |
191 """Add options to a multi-values element (e.g. list) | 231 """Add options to a multi-values element (e.g. list) |
192 @param parent: multi-values element""" | 232 @param parent: multi-values element""" |
193 for option in options: | 233 for option in options: |