""" open/dulcinea/lib/ui/form/widget.qpy """ from qp.fill.widget import Widget, CompositeWidget, StringWidget, SingleSelectWidget class PairWidget(CompositeWidget): def __init__(self, name, value=None, element_type=StringWidget, element1_kwargs={}, element2_kwargs={}, **kwargs): assert value is None or type(value) is list or type(value) is tuple, ( "value '%s' not a list or tuple: got %r" % (name, value)) if value is not None: assert len(value) == 2, ( "non-None value not of length 2: got %r" % (name, value)) assert issubclass(element_type, Widget), ( "value '%s' element_type not a Widget: " "got %r" % (name, element_type)) assert type(element1_kwargs) is dict, ( "value '%s' element1_kwargs not a dict: " "got %r" % (name, element1_kwargs)) assert type(element2_kwargs) is dict, ( "value '%s' element2_kwargs not a dict: " "got %r" % (name, element2_kwargs)) CompositeWidget.__init__(self, name, value, **kwargs) if not value: value = (None, None) self.add(element_type, 'element1', value=value[0], **element1_kwargs) self.add(element_type, 'element2', value=value[1], **element2_kwargs) def _parse(self, request): element1 = self.get('element1') element2 = self.get('element2') if element1 and element2: self.value = (element1, element2) else: self.value = None class SingleSelectAndStringWidget(CompositeWidget): def __init__(self, name, value=None, size=55, options=None, **kwargs): CompositeWidget.__init__(self, name, value, **kwargs) self.add(SingleSelectWidget, 'selection', value=None, options=options) self.add(StringWidget, 'text', value=None, size=size) def _parse(self, request): if self.get('selection') is None: self.value = None else: self.value = self.get('selection') if self.get('text'): self.value += ': ' + self.get('text')