From 90bf87734425b8a0f3fa838b0a4b6aa61013cd9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 17 Apr 2008 23:41:00 +0200 Subject: [PATCH] Make states change more fault tolerant --- tryton/gui/window/view_form/model/field.py | 33 ++++++----- .../window/view_form/view/form_gtk/parser.py | 56 +++++++++++-------- 2 files changed, 51 insertions(+), 38 deletions(-) diff --git a/tryton/gui/window/view_form/model/field.py b/tryton/gui/window/view_form/model/field.py index 2eae00e513..7cb42928f2 100644 --- a/tryton/gui/window/view_form/model/field.py +++ b/tryton/gui/window/view_form/model/field.py @@ -98,21 +98,24 @@ class CharField(object): if values is None: values = {'state': 'draft'} state_changes = self.attrs.get('states', {}) - if isinstance(state_changes, basestring): - state_changes = eval(state_changes) - for key in ('readonly', 'required', 'invisible'): - if key in state_changes: - self.get_state_attrs(model)[key] = \ - eval(state_changes[key], values) - elif key in self.attrs: - self.get_state_attrs(model)[key] = self.attrs[key] - if model.mgroup.readonly: - self.get_state_attrs(model)['readonly'] = True - if 'value' in state_changes: - value = eval(state_changes['value'], values) - if value: - self.set(model, value, test_state=False, - modified=True) + try: + if isinstance(state_changes, basestring): + state_changes = eval(state_changes) + for key in ('readonly', 'required', 'invisible'): + if key in state_changes: + self.get_state_attrs(model)[key] = \ + eval(state_changes[key], values) + elif key in self.attrs: + self.get_state_attrs(model)[key] = self.attrs[key] + if model.mgroup.readonly: + self.get_state_attrs(model)['readonly'] = True + if 'value' in state_changes: + value = eval(state_changes['value'], values) + if value: + self.set(model, value, test_state=False, + modified=True) + except: + pass def get_state_attrs(self, model): if self.name not in model.state_attrs: diff --git a/tryton/gui/window/view_form/view/form_gtk/parser.py b/tryton/gui/window/view_form/view/form_gtk/parser.py index 570adc1e23..3443e5e339 100644 --- a/tryton/gui/window/view_form/view/form_gtk/parser.py +++ b/tryton/gui/window/view_form/view/form_gtk/parser.py @@ -82,21 +82,25 @@ class Button(object): def state_set(self, values): state_changes = self.attrs.get('states', {}) - if isinstance(state_changes, basestring): - state_changes = eval(state_changes) - if 'invisible' in state_changes: - if eval(state_changes['invisible'], values): - self.widget.hide() + try: + if isinstance(state_changes, basestring): + state_changes = eval(state_changes) + if 'invisible' in state_changes: + if eval(state_changes['invisible'], values): + self.widget.hide() + else: + self.widget.show() else: self.widget.show() - else: - self.widget.show() - if 'readonly' in state_changes: - if eval(state_changes['readonly'], values): - self.widget.set_sensitive(False) + if 'readonly' in state_changes: + if eval(state_changes['readonly'], values): + self.widget.set_sensitive(False) + else: + self.widget.set_sensitive(True) else: self.widget.set_sensitive(True) - else: + except: + self.widget.show() self.widget.set_sensitive(True) class Label(gtk.Label): @@ -107,14 +111,17 @@ class Label(gtk.Label): def state_set(self, values): state_changes = self.attrs.get('states', {}) - if isinstance(state_changes, basestring): - state_changes = eval(state_changes) - if 'invisible' in state_changes: - if eval(state_changes['invisible'], values): - self.hide() + try: + if isinstance(state_changes, basestring): + state_changes = eval(state_changes) + if 'invisible' in state_changes: + if eval(state_changes['invisible'], values): + self.hide() + else: + self.show() else: self.show() - else: + except: self.show() @@ -126,14 +133,17 @@ class VBox(gtk.VBox): def state_set(self, values): state_changes = self.attrs.get('states', {}) - if isinstance(state_changes, basestring): - state_changes = eval(state_changes) - if 'invisible' in state_changes: - if eval(state_changes['invisible'], values): - self.hide() + try: + if isinstance(state_changes, basestring): + state_changes = eval(state_changes) + if 'invisible' in state_changes: + if eval(state_changes['invisible'], values): + self.hide() + else: + self.show() else: self.show() - else: + except: self.show()