Mercurial > libervia-backend
diff tools/xml_tools.py @ 107:5ae370c71803
CS: message sending is now working
- xmltools/xmlui: buttons can now send fields of the ui when used
- xmltools/xmlui: new textbox element, to write a large text (used for messages in CS plugin)
- xmltools/xmlui: list have now an attribute multi for selecting several options
- xmltools/xmlui: window title can now be specified in the xml (attribute title)
- CS_plugin: message sending interface & management
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 28 Jun 2010 15:18:59 +0800 |
parents | 138d82f64b6f |
children | 7c00c4b0a5c2 |
line wrap: on
line diff
--- a/tools/xml_tools.py Sat Jun 26 15:33:16 2010 +0800 +++ b/tools/xml_tools.py Mon Jun 28 15:18:59 2010 +0800 @@ -103,17 +103,19 @@ class XMLUI: """This class is used to create a user interface (form/window/parameters/etc) using SàT XML""" - def __init__(self, panel_type, layout="vertical"): + def __init__(self, panel_type, layout="vertical", title=None): """Init SàT XML Panel @param panel_type: one of - window (new window) - form (formulaire, depend of the frontend, usually a panel with cancel/submit buttons) - param (parameters, presentatio depend of the frontend) @param layout: disposition of elements, one of: - - VERTICAL: elements are disposed up to bottom - - HORIZONTAL: elements are disposed left to right - - PAIRS: elements come on two aligned columns + - vertical: elements are disposed up to bottom + - horizontal: elements are disposed left to right + - pairs: elements come on two aligned columns (usually one for a label, the next for the element) + - tabs: elemens are in categories with tabs (notebook) + @param title: title or default if None """ if not panel_type in ['window', 'form', 'param']: error(_("Unknown panel type [%s]") % panel_type) @@ -124,6 +126,8 @@ self.doc = impl.createDocument(None, "sat_xmlui", None) top_element = self.doc.documentElement top_element.setAttribute("type", panel_type) + if title: + top_element.setAttribute("title", title) self.parentTabsLayout = None #used only we have 'tabs' layout self.currentCategory = None #used only we have 'tabs' layout self.changeLayout(layout) @@ -195,23 +199,38 @@ if value: elem.setAttribute('value', value) - def addList(self, options, name=None, value=None): + def addTextBox(self, name=None, value=None): + """Add a string box""" + elem = self.__createElem('textbox', name, self.currentLayout) + if value: + elem.setAttribute('value', value) + + def addList(self, options, name=None, value=None, style=set()): """Add a list of choices""" + styles = set(style) assert (options) + assert (styles.issubset(['multi'])) elem = self.__createElem('list', name, self.currentLayout) self.addOptions(options, elem) if value: elem.setAttribute('value', value) + for style in styles: + elem.setAttribute(style, 'yes') - def addButton(self, callback_id, name, value): + def addButton(self, callback_id, name, value, fields_back=[]): """Add a button @param callback: callback which will be called if button is pressed @param name: name - @param value: label of the button""" + @param value: label of the button + @fields_back: list of names of field to give back when pushing the button""" elem = self.__createElem('button', name, self.currentLayout) elem.setAttribute('callback_id', callback_id) - if value: - elem.setAttribute('value', value) + elem.setAttribute('value', value) + for field in fields_back: + fback_el = self.doc.createElement('field_back') + fback_el.setAttribute('name', field) + elem.appendChild(fback_el) + def addElement(self, type, name = None, content = None, value = None, options = None, callback_id = None): @@ -227,6 +246,8 @@ self.addString(name, value) elif type == 'password': self.addPassword(name, value) + elif type == 'textbox': + self.addTextBox(name, value) elif type == 'list': self.addList(options, name, value) elif type == 'button':