Source code for pyforms_web.controls.control_multipleselection

from pyforms_web.controls.control_base import ControlBase
import simplejson, collections

[docs]class ControlMultipleSelection(ControlBase): def __init__(self, *args, **kwargs): if kwargs.get('default', None) is None: kwargs['default'] = [] super(ControlMultipleSelection, self).__init__(*args, **kwargs) self.mode = kwargs.get('mode', 'selection') self._update_items = True self._items = collections.OrderedDict() def init_form(self): return "new ControlMultipleSelection('{0}', {1})".format( self._name, simplejson.dumps(self.serialize()) )
[docs] def add_item(self, label, value = None): if self._items==None: self._items={} if value==None: self._items[label] = label else: self._items[label] = value self._update_items = True self.mark_to_update_client()
[docs] def clear_items(self): self._items = {} self._value = None self.mark_to_update_client()
def serialize(self): data = ControlBase.serialize(self) items = [] for key, value in self._items.items(): items.append({'text': str(key), 'value': str(value), 'name': str(key)}) #value = str(self._value) if self._value is not None else None if isinstance(self._value, list) and len(self._value)>0: value = list(map(str,sorted(self._value))) else: value = None data.update({ 'items': items, 'value': value, 'mode': self.mode, 'update_items': self._update_items }) self._update_items = False return data def deserialize(self, properties): value = properties.get('value', []) values = [] for v in value: if len(v.strip())>0: values.append(v) properties.update({'value':values}) ControlBase.deserialize(self, properties)