provide additional control on what appears in the label of a datatable item
This commit is contained in:
parent
27720799f8
commit
aa9661a681
1 changed files with 13 additions and 4 deletions
17
table.py
17
table.py
|
@ -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):
|
||||||
|
|
Loading…
Add table
Reference in a new issue