← Back to team overview

openerp-dev-web team mailing list archive

[Merge] lp:~openerp-dev/openobject-client/trunk-attrs_on_group-rga into lp:openobject-client

 

Ravi Gadhia (OpenERP) has proposed merging lp:~openerp-dev/openobject-client/trunk-attrs_on_group-rga into lp:openobject-client.

Requested reviews:
  Naresh(OpenERP) (nch-openerp)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-client/trunk-attrs_on_group-rga/+merge/57489

Hello
      1) Now group attrs(required/readonly) implicitly apply on it's all children.
      2) Remove field from state_aware_widget list
      3) Improve form view display method.  
-- 
https://code.launchpad.net/~openerp-dev/openobject-client/trunk-attrs_on_group-rga/+merge/57489
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-client/trunk-attrs_on_group-rga.
=== modified file 'bin/widget/model/field.py'
--- bin/widget/model/field.py	2011-04-08 11:49:01 +0000
+++ bin/widget/model/field.py	2011-04-13 13:33:28 +0000
@@ -131,7 +131,7 @@
     def create(self, model):
         return False
 
-    def attrs_set(self, model):
+    def attrs_set(self, model, widget=None):
         uid = rpc.session.uid
         try:
             attrs_changes = eval(self.attrs.get('attrs',"{}"))
@@ -147,23 +147,28 @@
         for k,v in attrs_changes.items():
             result = True
             result = tools.calc_condition(self, model, v)
-            if result:
-               self.get_state_attrs(model)[k]=True
+            if k == 'invisible' and widget:
+                func = ['show_all', 'hide_all'][bool(result)]
+                getattr(widget, func)()
+            elif k in ['readonly', 'required'] :
+                self.get_state_attrs(model)[k] = result
 
     def state_set(self, model, state='draft'):
         ro = model.mgroup._readonly
         state_changes = dict(self.attrs.get('states',{}).get(state,[]))
         if 'readonly' in state_changes:
-            self.get_state_attrs(model)['readonly'] = state_changes.get('readonly', False) or ro
+            self.get_state_attrs(model)['readonly'] = state_changes.get('readonly', False) 
         else:
-            self.get_state_attrs(model)['readonly'] = self.attrs.get('readonly', False) or ro
+            if (self.attrs.get('readonly', False) or  ro) and  ro  or self.attrs['readonly']:
+                self.get_state_attrs(model)['readonly'] = True
         if 'required' in state_changes:
             self.get_state_attrs(model)['required'] = state_changes.get('required', False)
         else:
-            self.get_state_attrs(model)['required'] = self.attrs.get('required', False)
+            if self.attrs.get('required', False):
+                self.get_state_attrs(model)['required'] = self.attrs['required']
         if 'value' in state_changes:
             self.set(model, state_changes['value'], test_state=False, modified=True)
-
+    
     def get_state_attrs(self, model):
         if self.name not in model.state_attrs:
             model.state_attrs[self.name] = self.attrs.copy()

=== modified file 'bin/widget/view/form.py'
--- bin/widget/view/form.py	2011-03-31 09:26:25 +0000
+++ bin/widget/view/form.py	2011-04-13 13:33:28 +0000
@@ -47,7 +47,7 @@
         if modelfield:
             modelfield.state_set(model, state)
             if modelfield.attrs.get('attrs',False):
-                modelfield.attrs_set(model)
+                modelfield.attrs_set(model, self.widget)
             if hasattr(self.widget,'screen') and self.widget.screen.type in ('one2many','many2many'):
                 self.widget.pager.reset_pager()
             self.widget.display(model, modelfield)

=== modified file 'bin/widget/view/form_gtk/parser.py'
--- bin/widget/view/form_gtk/parser.py	2011-04-13 05:07:59 +0000
+++ bin/widget/view/form_gtk/parser.py	2011-04-13 13:33:28 +0000
@@ -156,7 +156,6 @@
 
     def attrs_set(self, model):
         sa = getattr(self.widget, 'attrs') or {}
-
         attrs_changes = eval(sa.get('attrs',"{}"),{'uid':rpc.session.uid})
         for k,v in attrs_changes.items():
             result = True
@@ -166,14 +165,13 @@
                 getattr(self.widget, func)()
                 if self.label:
                     getattr(self.label, func)()
-            elif k == 'readonly':
+            elif k in ['readonly', 'required'] and model:
                 if isinstance(self.widget, gtk.Frame):
                     for name, wid in self.group_child.iteritems():
-                        wid.set_sensitive(not result)
-                else:
+                        model.mgroup.mfields[name].get_state_attrs(model)[k] = result
+                elif k == 'readonly':
                     self.widget.set_sensitive(not result)
 
-
 class _container(object):
     def __init__(self):
         self.cont = []
@@ -500,9 +498,6 @@
                     detail_tooltip = self.create_detail_tooltip(name, fields[name])
 
                 widget_label = container.create_label(label, help=hlp, fname=name, detail_tooltip=detail_tooltip) if label else None
-                if attrs.get('attrs'):
-                    saw_list.append(StateAwareWidget(widget_act, widget_label))
-
                 container.wid_add(widget=widget_act.widget, label=widget_label, expand=expand, translate=translate, colspan=size, fname=name, fill=fill)
 
             elif node.tag =='group':


Follow ups