Xavier ALT (OpenERP) has proposed merging
lp:~openerp-dev/openobject-client/trunk-imp-gtk_recursive_onchange-xal into
lp:openobject-client.
Requested reviews:
OpenERP sa GTK client R&D (openerp-dev-gtk)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-client/trunk-imp-gtk_recursive_onchange-xal/+merge/104498
Hi,
This improve the GTK to allow recursive "on_change" updating.
Regards,
Xavier
--
https://code.launchpad.net/~openerp-dev/openobject-client/trunk-imp-gtk_recursive_onchange-xal/+merge/104498
Your team OpenERP sa GTK client R&D is requested to review the proposed merge
of lp:~openerp-dev/openobject-client/trunk-imp-gtk_recursive_onchange-xal into
lp:openobject-client.
=== modified file 'bin/widget/model/field.py'
--- bin/widget/model/field.py 2011-12-09 09:33:16 +0000
+++ bin/widget/model/field.py 2012-05-03 07:41:20 +0000
@@ -62,7 +62,7 @@
if self.get_state_attrs(model).get('readonly', False):
return
if self.attrs.get('on_change',False):
- model.on_change(self.attrs['on_change'])
+ model.on_change(self.name, self.attrs['on_change'])
if self.attrs.get('change_default', False):
model.cond_default(self.attrs['name'], self.get(model))
@@ -122,7 +122,7 @@
res = self.set(model, value)
model.cond_default(self.attrs['name'], self.get(model))
if self.attrs.get('on_change',False):
- model.on_change(self.attrs['on_change'])
+ model.on_change(self.name, self.attrs['on_change'])
return res
def get_default(self, model):
=== modified file 'bin/widget/model/record.py'
--- bin/widget/model/record.py 2011-11-14 06:07:24 +0000
+++ bin/widget/model/record.py 2012-05-03 07:41:20 +0000
@@ -300,7 +300,10 @@
return val
#XXX Shoud use changes of attributes (ro, ...)
- def on_change(self, callback):
+ def on_change(self, fieldname, callback, processed=None):
+ if processed is None:
+ processed = []
+ processed.append(fieldname)
match = re.match('^\s?(.*?)\((.*?)\)\s?$', callback)
if not match:
raise Exception, 'ERROR: Wrong on_change trigger: %s' % callback
@@ -310,7 +313,18 @@
ids = self.id and [self.id] or []
response = getattr(self.rpc, func_name)(ids, *args)
if response:
- self.set(response.get('value', {}), modified=True)
+ values = response.get('value', {})
+ if isinstance(values, dict):
+ for ocv_field, ocv_value in values.iteritems():
+ if not ocv_field in self.mgroup.mfields:
+ continue # ignore field not in current view/model
+ field = self.mgroup.mfields[ocv_field]
+ cur_value = field.get(self)
+ if ocv_value != cur_value:
+ self.set({ocv_field: ocv_value}, modified=True)
+ if field.attrs.get('on_change',False) and ocv_field not in processed:
+ # calling recursive on_change for field not already processed
+ self.on_change(field.name, field.attrs.get('on_change',False), processed=processed)
if 'domain' in response:
for fieldname, value in response['domain'].items():
if fieldname not in self.mgroup.mfields:
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help : https://help.launchpad.net/ListHelp