def df_makeDynamicField(self,fb,tag=None,wdg_attr=None,data_type=None,fields=None,dbstore_kwargs=None,fieldPrefix=None,df_is_new=None,**kwargs): mask = wdg_attr.pop('field_mask',None) if tag.endswith('_nopopup'): tag = tag.replace('_nopopup','') wdg_attr['popup'] = False wdg_attr['tag'] =tag #wdg_attr['colspan'] = col_max if data_type == 'TL' else 1 code = wdg_attr.get('code') description = wdg_attr.pop('description','') fieldPrefix = fieldPrefix or '.' wdg_attr['value']='^%s%s' %(fieldPrefix,code) if tag.lower() in ('checkbox' or 'radiobutton'): wdg_attr['label'] = description else: wdg_attr['lbl'] = description wdg_attr['ghost'] = wdg_attr.pop('field_placeholder',None) wdg_attr['tip'] = wdg_attr.pop('field_tip',None) wdg_attr['style'] = wdg_attr.pop('field_style',None) wdg_attr['format'] = wdg_attr.pop('field_format',None) wdg_attr['dtype'] = data_type wdg_attr['mask'] = mask wdg_attr['colspan'] = 1 wdg_kwargs = wdg_attr.pop('wdg_kwargs',None) if wdg_kwargs: if isinstance(wdg_kwargs,basestring): wdg_kwargs = Bag(wdg_kwargs) wdg_kwargs = wdg_kwargs.asDict(ascii=True) wdg_attr.update(wdg_kwargs) for dim in ('height','width','crop_height','crop_width'): c = wdg_attr.pop(dim, None) if isinstance(c,int) or (c and c.isdigit()): wdg_attr[dim] = '%spx' %c if c else None else: wdg_attr[dim] = c wdg_attr['colspan'] = wdg_attr.pop('colspan',1) or 1 if tag.lower()=='simpletextarea': wdg_attr.setdefault('speech',True) wdg_attr['width'] = wdg_attr.get('width') or '94%' customizer = getattr(self,'df_%(tag)s' %wdg_attr,None) if customizer: customizer(wdg_attr,dbstore_kwargs=dbstore_kwargs) dictExtract(wdg_attr,'source_',pop=True) self._df_handleFieldFormula(wdg_attr,fb=fb,fields=fields,**kwargs) self._df_handleFieldValidation(wdg_attr,fields=fields) code = wdg_attr.pop('code') getter = wdg_attr.pop('getter',None) default_value = wdg_attr.pop('default_value',None) if default_value is not None and df_is_new: print 'SET setting default for ',code fb.data('.%s' %code,default_value) wdg = self.df_child(fb,**wdg_attr) if not getter: return wdg if isinstance(getter,basestring): getter = Bag(getter) if getter['table']: self._df_handleGetter(fb,code=code,getter=getter)
def df_makeDynamicField(self, fb, tag=None, wdg_attr=None, data_type=None, fields=None, dbstore_kwargs=None, fieldPrefix=None, df_is_new=None, **kwargs): mask = wdg_attr.pop('field_mask', None) if tag.endswith('_nopopup'): tag = tag.replace('_nopopup', '') wdg_attr['popup'] = False wdg_attr['tag'] = tag #wdg_attr['colspan'] = col_max if data_type == 'TL' else 1 code = wdg_attr.get('code') description = wdg_attr.pop('description', '') fieldPrefix = fieldPrefix or '.' wdg_attr['value'] = '^%s%s' % (fieldPrefix, code) if tag.lower() in ('checkbox' or 'radiobutton'): wdg_attr['label'] = description else: wdg_attr['lbl'] = description wdg_attr['ghost'] = wdg_attr.pop('field_placeholder', None) wdg_attr['tip'] = wdg_attr.pop('field_tip', None) wdg_attr['style'] = wdg_attr.pop('field_style', None) wdg_attr['format'] = wdg_attr.pop('field_format', None) wdg_attr['dtype'] = data_type wdg_attr['mask'] = mask wdg_attr['colspan'] = 1 wdg_kwargs = wdg_attr.pop('wdg_kwargs', None) if wdg_kwargs: if isinstance(wdg_kwargs, basestring): wdg_kwargs = Bag(wdg_kwargs) wdg_kwargs = wdg_kwargs.asDict(ascii=True) wdg_attr.update(wdg_kwargs) for dim in ('height', 'width', 'crop_height', 'crop_width'): c = wdg_attr.pop(dim, None) if isinstance(c, int) or (c and c.isdigit()): wdg_attr[dim] = '%spx' % c if c else None elif c is not None: wdg_attr[dim] = c wdg_attr['colspan'] = wdg_attr.pop('colspan', 1) or 1 if tag.lower() == 'simpletextarea': wdg_attr.setdefault('speech', True) wdg_attr['width'] = wdg_attr.get('width') or '94%' customizer = getattr(self, 'df_%(tag)s' % wdg_attr, None) if customizer: customizer(wdg_attr, dbstore_kwargs=dbstore_kwargs) dictExtract(wdg_attr, 'source_', pop=True) self._df_handleFieldFormula(wdg_attr, fb=fb, fields=fields, **kwargs) self._df_handleFieldValidation(wdg_attr, fields=fields) code = wdg_attr.pop('code') getter = wdg_attr.pop('getter', None) default_value = wdg_attr.pop('default_value', None) if default_value is not None and df_is_new: fb.data('.%s' % code, self.catalog.fromText(default_value, data_type)) wdg = self.df_child(fb, **wdg_attr) if not getter: return wdg if isinstance(getter, basestring): getter = Bag(getter) if getter['table']: self._df_handleGetter(fb, code=code, getter=getter)