provide additional control on what appears in the label of a datatable item

This commit is contained in:
Helmut Merz 2012-07-23 13:40:31 +02:00
parent 27720799f8
commit aa9661a681

View file

@ -106,12 +106,19 @@ class DataTableSchemaFactory(SchemaFactory):
return schema return schema
def getRowValue(k, v):
return v[0]
def getRowValueWithKey(k, v):
return u' '.join((unicode(k), v[0]))
class DataTableSourceBinder(object): class DataTableSourceBinder(object):
implements(IContextSourceBinder) implements(IContextSourceBinder)
def __init__(self, tableName): def __init__(self, tableName, valueProvider=getRowValue):
self.tableName = tableName self.tableName = tableName
self.valueProvider = valueProvider
def __call__(self, instance): def __call__(self, instance):
if IInstance.providedBy(instance): if IInstance.providedBy(instance):
@ -119,18 +126,20 @@ class DataTableSourceBinder(object):
else: else:
context = baseObject(instance.context) context = baseObject(instance.context)
dt = context.getLoopsRoot().getConceptManager()[self.tableName] dt = context.getLoopsRoot().getConceptManager()[self.tableName]
return DataTableSourceList(adapted(dt)) return DataTableSourceList(adapted(dt), self.valueProvider)
class DataTableSourceList(object): class DataTableSourceList(object):
implements(IIterableSource) implements(IIterableSource)
def __init__(self, context): def __init__(self, context, valueProvider=getRowValue):
self.context = context self.context = context
self.valueProvider = valueProvider
def __iter__(self): def __iter__(self):
items = [(k, v[0]) for k, v in self.context.data.items()] items = [(k, self.valueProvider(k, v))
for k, v in self.context.data.items()]
return iter(sorted(items, key=lambda x: x[1])) return iter(sorted(items, key=lambda x: x[1]))
def __len__(self): def __len__(self):