Allow states attribute to use every fields for evaluation

This commit is contained in:
Cédric Krier committed 2008-02-06 00:24:05 +01:00
1 parent 86fec51e17
commit a519206c35
3 files changed
+25 -18

No files matched your search

+10 -5
View File
@@ -87,16 +87,21 @@ class CharField(object):
def create(self, model):
return False
def state_set(self, model, state='draft'):
state_changes = dict(self.attrs.get('states', {}).get(state, []))
def state_set(self, model, values=None):
if values is None:
values = {'state': 'draft'}
state_changes = self.attrs.get('states', {})
for key in ('readonly', 'required'):
if key in state_changes:
self.get_state_attrs(model)[key] = state_changes[key]
self.get_state_attrs(model)[key] = \
eval(state_changes[key], values)
else:
self.get_state_attrs(model)[key] = self.attrs[key]
if 'value' in state_changes:
self.set(model, state_changes['value'], test_state=False,
modified=True)
value = eval(state_changes['value'], values)
if value:
self.set(model, value, test_state=False,
modified=True)
def get_state_attrs(self, model):
if self.name not in model.state_attrs:
+10 -8
View File
@@ -18,13 +18,15 @@ class ViewWidget(object):
self.widget._view = self
self.widget_name = widget_name
def display(self, model, state='draft'):
def display(self, model, values=None):
if values is None:
values = {'state': 'draft'}
if not model:
self.widget.display(model, False)
return False
modelfield = model.mgroup.mfields.get(self.widget_name, None)
if modelfield:
modelfield.state_set(model, state)
modelfield.state_set(model, values)
self.widget.display(model, modelfield)
elif isinstance(self.widget, Action):
self.widget.display(model, False)
@@ -258,14 +260,14 @@ class ViewForm(ParserView):
def display(self):
model = self.screen.current_model
if model and ('state' in model.mgroup.fields):
state = model['state'].get(model)
else:
state = 'draft'
values = {'state': 'draft'}
if model:
for field in model.mgroup.fields:
values[field] = model[field].get(model)
for widget in self.widgets.values():
widget.display(model, state)
widget.display(model, values)
for button in self.buttons:
button.state_set(state)
button.state_set(values)
return True
def set_cursor(self, new=False):
@@ -66,16 +66,16 @@ class Button(object):
_('Invalid Form, correct red fields!'))
self.form.screen.display()
def state_set(self, state):
def state_set(self, values):
if self.attrs.get('states', False):
my_states = self.attrs.get('states', '').split(',')
if state not in my_states:
self.widget.hide()
else:
if eval(self.attrs.get('states', 'True'), values):
self.widget.show()
else:
self.widget.hide()
else:
self.widget.show()
class _container(object):
def __init__(self, tooltips):
self.cont = []