Mercurial > libervia-backend
diff src/tools/xml_tools.py @ 969:5c7707c958d8
tools, frontends (xmlui): add setter methods for widgets + new widget InternalButton to process UI operations
author | souliane <souliane@mailoo.org> |
---|---|
date | Tue, 01 Apr 2014 21:30:21 +0200 |
parents | 75f3b3b430ff |
children | b37b1d183ac3 |
line wrap: on
line diff
--- a/src/tools/xml_tools.py Tue Apr 01 21:21:13 2014 +0200 +++ b/src/tools/xml_tools.py Tue Apr 01 21:30:21 2014 +0200 @@ -299,6 +299,16 @@ self.elem.setAttribute('name', name) +class InternalFieldElement(Element): + """ Used by InternalButtonWidget to indicate which field are manipulated by internal action """ + type = 'internal_field' + + def __init__(self, parent, name): + assert(isinstance(parent, InternalButtonWidget)) + super(InternalFieldElement, self).__init__(parent.xmlui, parent) + self.elem.setAttribute('name', name) + + class OptionElement(Element): """" Used by ListWidget to specify options """ type = 'option' @@ -621,6 +631,37 @@ FieldBackElement(self, field) +class InternalButtonWidget(Widget): + type = 'internal_button' + + def __init__(self, xmlui, action='copy', value=None, fields=None, name=None, parent=None): + """Add an button to process internal UI operations. + + The internal button is not associated to any callback id because it is + not using the bridge (no communication with the backend). + + @param action (string): a value from: + - 'copy': process the widgets given in 'fields' + two by two, by copying the values of one widget + to the other. + - 'move': same than copy but moves the values + if the source widget is not a List. + - more operation to be added when necessary... + @param value (string): label of the button + @param fields (list): a list of widget name (string) + @param name: name + @param parent: parent container + """ + if fields is None: + fields = [] + super(InternalButtonWidget, self).__init__(xmlui, name, parent) + self.elem.setAttribute('action', action) + if value: + self.elem.setAttribute('value', value) + for field in fields: + InternalFieldElement(self, field) + + class ListWidget(InputWidget): type = 'list'