← Back to team overview

openerp-dev-web team mailing list archive

lp:~openerp-dev/openobject-server/trunk-schemas-improvements-xmo into lp:openobject-server

 

Xavier (Open ERP) has proposed merging lp:~openerp-dev/openobject-server/trunk-schemas-improvements-xmo into lp:openobject-server.

Requested reviews:
  OpenERP Core Team (openerp)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-schemas-improvements-xmo/+merge/53507

Various fixes (mostly tighter constraints) in the view schemas, especially the search view which was extracted from the base `view.rng` file to a module of its own and constrained a lot. Attributes were also documented, as part of the web client's reimplementation efforts.

The corresponding views were fixed for breakages (e.g. group/@colspan or field/@select).

The same fixing was performed for the addons, it lives in the branch lp:~openerp-dev/openobject-addons/trunk-views-cleanup-xmo
-- 
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-schemas-improvements-xmo/+merge/53507
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-server/trunk-schemas-improvements-xmo.
=== modified file '.bzrignore'
--- .bzrignore	2010-11-18 09:34:12 +0000
+++ .bzrignore	2011-03-15 19:44:32 +0000
@@ -21,3 +21,4 @@
 .project
 .pydevproject
 .settings
+bin/*

=== modified file 'openerp/addons/base/ir/ir.xml'
--- openerp/addons/base/ir/ir.xml	2011-01-18 22:40:40 +0000
+++ openerp/addons/base/ir/ir.xml	2011-03-15 19:44:32 +0000
@@ -28,7 +28,7 @@
                     <group col="2" colspan="2">
                         <separator string="Values for Event Type" colspan="2"/>
                         <label string="client_action_multi, client_action_relate" colspan="2"/>
-                        <label string="tree_but_action, client_print_multi"  colspan="2"/>
+                        <label string="tree_but_action, client_print_multi" colspan="2"/>
                     </group>
                     <group col="2" colspan="2">
                         <separator colspan="2" string="Value"/>
@@ -190,8 +190,8 @@
                                 <label colspan="4" string="Day of the week (0:Monday): %%(weekday)s"/>
                             </group>
                             <group>
-                                <label colspan="4" string="Hour 00->24: %%(h24)s"/>
-                                <label colspan="4" string="Hour 00->12: %%(h12)s"/>
+                                <label colspan="4" string="Hour 00-&gt;24: %%(h24)s"/>
+                                <label colspan="4" string="Hour 00-&gt;12: %%(h12)s"/>
                                 <label colspan="4" string="Minute: %%(min)s"/>
                                 <label colspan="4" string="Seconde: %%(sec)s"/>
                             </group>
@@ -228,7 +228,7 @@
                     <field name="name"/>
                     <field name="code"/>
                     <separator orientation="vertical"/>
-                    <field name="company_id" select="1" groups="base.group_multi_company"/>
+                    <field name="company_id" groups="base.group_multi_company"/>
                 </search>
             </field>
         </record>
@@ -276,8 +276,8 @@
             <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Sequences Type">
-                    <field name="name" select="1"/>
-                    <field name="code" select="1"/>
+                    <field name="name"/>
+                    <field name="code"/>
                 </search>
             </field>
         </record>
@@ -290,9 +290,7 @@
             <field name="view_mode">tree,form</field>
             <field eval="False" name="view_id"/>
         </record>
-        <menuitem action="ir_sequence_type" id="menu_ir_sequence_type"
-            groups="base.group_extended"
-            parent="base.next_id_5"/>
+        <menuitem action="ir_sequence_type" id="menu_ir_sequence_type" groups="base.group_extended" parent="base.next_id_5"/>
 
         <!-- Actions -->
 
@@ -351,14 +349,14 @@
             <field name="type">form</field>
             <field name="arch" type="xml">
                 <form string="Filters">
-                    <group colspan="4" col="6" >
+                    <group colspan="4" col="6">
                         <field name="name"/>
                         <field name="model_id"/>
                         <field name="user_id"/>
                     </group>
                     <group col="4" expand="1">
-                        <separator string="Domain" colspan="2" />
-                        <separator string="Context" colspan="2" />
+                        <separator string="Domain" colspan="2"/>
+                        <separator string="Context" colspan="2"/>
                         <field name="domain" nolabel="1" colspan="2"/>
                         <field name="context" nolabel="1" colspan="2"/>
                     </group>
@@ -391,13 +389,13 @@
             <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Filters">
-                    <group colspan="4" col="10">
+                    <group>
                       <field name="name"/>
                       <field name="user_id"/>
                       <field name="model_id"/>
                     </group>
                     <newline/>
-                    <group expand="0" string="Group By" colspan="4">
+                    <group expand="0" string="Group By">
                       <filter string="User" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
                     </group>
                 </search>
@@ -417,8 +415,7 @@
 
         <!--        Filters view menu-->
 
-        <menuitem parent="base.next_id_6" name="Filters"
-            id="menu_ir_filters" action="actions_ir_filters_view" />
+        <menuitem parent="base.next_id_6" name="Filters" id="menu_ir_filters" action="actions_ir_filters_view"/>
 
         <record id="act_report_xml_view" model="ir.ui.view">
             <field name="name">ir.actions.report.xml</field>
@@ -486,7 +483,7 @@
             <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Report xml">
-                    <group col="10" colspan="4">
+                    <group>
                         <field name="name"/>
                         <field name="model"/>
                         <field name="type"/>
@@ -494,7 +491,7 @@
                         <field name="report_type"/>
                     </group>
                     <newline/>
-                    <group expand="0" string="Group By" colspan="4">
+                    <group expand="0" string="Group By">
                         <filter string="Report Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'report_type'}"/>
                     </group>
                 </search>
@@ -577,8 +574,8 @@
                             </group>
                         </page>
                         <page string="Security">
-                            <separator colspan="4" string="Select Groups" />
-                            <field name="groups_id" nolabel="1" colspan="4" />
+                            <separator colspan="4" string="Select Groups"/>
+                            <field name="groups_id" nolabel="1" colspan="4"/>
                         </page>
                     </notebook>
                 </form>
@@ -590,13 +587,13 @@
             <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Open a Window">
-                    <group col="10" colspan="4">
+                    <group>
                         <field name="name"/>
                         <field name="res_model"/>
                         <field name="view_type"/>
                     </group>
                     <newline/>
-                    <group expand="0" string="Group By" colspan="4">
+                    <group expand="0" string="Group By">
                         <filter string="View Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'view_type'}"/>
                     </group>
                 </search>
@@ -684,10 +681,7 @@
         <menuitem action="ir_action_wizard" id="menu_ir_action_wizard" parent="base.next_id_6"/>
 
         <!-- Companies -->
-        <menuitem id="menu_res_company_global"
-            parent="base.menu_administration"
-            name="Companies"
-            sequence="5"/>
+        <menuitem id="menu_res_company_global" parent="base.menu_administration" name="Companies" sequence="5"/>
 
         <record id="action_res_company_tree" model="ir.actions.act_window">
             <field name="name">Company's Structure</field>
@@ -696,10 +690,7 @@
             <field name="domain">[('parent_id','=',False)]</field>
             <field name="view_type">tree</field>
         </record>
-        <menuitem action="action_res_company_tree"
-            groups="base.group_multi_company"
-            id="menu_action_res_company_tree" parent="base.menu_res_company_global"
-            sequence="16"/>
+        <menuitem action="action_res_company_tree" groups="base.group_multi_company" id="menu_action_res_company_tree" parent="base.menu_res_company_global" sequence="16"/>
         <record id="action_res_company_form" model="ir.actions.act_window">
             <field name="name">Companies</field>
             <field name="type">ir.actions.act_window</field>
@@ -761,8 +752,7 @@
             <field name="view_type">form</field>
             <field name="help">A group is a set of functional areas that will be assigned to the user in order to give them access and rights to specific applications and tasks in the system. You can create custom groups or edit the ones existing by default in order to customize the view of the menu that users will be able to see. Whether they can have a read, write, create and delete access right can be managed from here.</field>
         </record>
-        <menuitem action="action_res_groups" id="menu_action_res_groups" parent="base.menu_users"
-            groups="base.group_extended"/>
+        <menuitem action="action_res_groups" id="menu_action_res_groups" parent="base.menu_users" groups="base.group_extended"/>
 
         <!-- View -->
         <record id="view_view_form" model="ir.ui.view">
@@ -816,15 +806,9 @@
             <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Views">
-                    <filter icon="terp-stock_zoom"
-                        string="Search"
-                        domain="[('type', '=', 'search')]"/>
-                    <filter icon="gtk-indent"
-                        string="Tree"
-                        domain="[('type', '=', 'tree')]"/>
-                    <filter icon="gtk-new"
-                        string="Form"
-                        domain="[('type', '=','form')]"/>
+                    <filter icon="terp-stock_zoom" string="Search" domain="[('type', '=', 'search')]"/>
+                    <filter icon="gtk-indent" string="Tree" domain="[('type', '=', 'tree')]"/>
+                    <filter icon="gtk-new" string="Form" domain="[('type', '=','form')]"/>
                     <separator orientation="vertical"/>
                     <field name="name"/>
                     <field name="type"/>
@@ -902,7 +886,7 @@
             <field name="arch" type="xml">
                 <form string="Attachments">
                     <group colspan="4" col="6">
-                        <field name="name" />
+                        <field name="name"/>
                         <field name="type"/>
                         <field name="company_id" groups="base.group_multi_company" widget="selection"/>
                     </group>
@@ -910,7 +894,7 @@
                     <page string="Attachment">
                     <group col="4" colspan="4">
                         <separator string="Data" colspan="4"/>
-                        <newline />
+                        <newline/>
                         <group col="2" colspan="4" attrs="{'invisible':[('type','=','url')]}">
                             <field name="datas" filename="datas_fname"/>
                             <field name="datas_fname" select="1"/>
@@ -959,30 +943,23 @@
             <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Attachments">
-                    <group colspan="4" col="10">
-                        <filter icon="terp-stage"
-                            string="URL"
-                            domain="[('type','=','url')]"/>
-                        <filter icon="terp-stock_align_left_24"
-                            string="Binary"
-                            domain="[('type','=','binary')]"/>
+                    <group>
+                        <filter icon="terp-stage" string="URL" domain="[('type','=','url')]"/>
+                        <filter icon="terp-stock_align_left_24" string="Binary" domain="[('type','=','binary')]"/>
                         <separator orientation="vertical"/>
-                        <filter icon="terp-go-month" string="Month"
-                            domain="[('create_date','&lt;=', time.strftime('%%Y-%%m-%%d')),('create_date','&gt;=',time.strftime('%%Y-%%m-01'))]"/>
+                        <filter icon="terp-go-month" string="Month" domain="[('create_date','&lt;=', time.strftime('%%Y-%%m-%%d')),('create_date','&gt;=',time.strftime('%%Y-%%m-01'))]"/>
                         <separator orientation="vertical"/>
                         <field name="name"/>
                         <field name="type"/>
                         <field name="datas_fname"/>
                         <field name="create_uid">
-                            <filter icon="terp-personal"
-                                domain="[('create_uid','=',uid)]"
-                                help="Filter on my documents" />
+                            <filter icon="terp-personal" domain="[('create_uid','=',uid)]" help="Filter on my documents"/>
                         </field>
                     </group>
                     <newline/>
                     <group expand="0" string="Group By...">
                         <filter string="Owner" icon="terp-personal" domain="[]" context="{'group_by':'create_uid'}"/>
-                        <filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type'}"  groups="base.group_extended"/>
+                        <filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'type'}" groups="base.group_extended"/>
                         <filter string="Company" icon="terp-gtk-home" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
                         <separator orientation="vertical"/>
                         <filter string="Month" help="Creation Month" icon="terp-go-month" domain="[]" context="{'group_by':'create_date'}"/>
@@ -1054,11 +1031,7 @@
                                 </form>
                             </field>
                             <group col="2" colspan="4">
-                                <button colspan="2"
-                                    icon="gtk-justify-fill"
-                                    name="%(act_menu_create)d"
-                                    string="Create a Menu" type="action"
-                                    target="new" />
+                                <button colspan="2" icon="gtk-justify-fill" name="%(act_menu_create)d" string="Create a Menu" type="action" target="new"/>
                             </group>
                         </page>
                         <page string="Access Rights">
@@ -1105,19 +1078,13 @@
             <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Model Description">
-                    <filter icon="terp-camera_test"
-                        string="In Memory"
-                        domain="[('osv_memory', '=', True)]"/>
-                    <separator orientation="vertical"/>
-
-                    <filter icon="terp-stock_align_left_24"
-                        string="Custom"
-                        domain="[('state', '=', 'manual')]"/>
-                    <separator orientation="vertical"/>
-
-                    <filter icon="terp-translate"
-                        string="Base"
-                        domain="[('state', '=', 'base')]"/>
+                    <filter icon="terp-camera_test" string="In Memory" domain="[('osv_memory', '=', True)]"/>
+                    <separator orientation="vertical"/>
+
+                    <filter icon="terp-stock_align_left_24" string="Custom" domain="[('state', '=', 'manual')]"/>
+                    <separator orientation="vertical"/>
+
+                    <filter icon="terp-translate" string="Base" domain="[('state', '=', 'base')]"/>
 
                     <separator orientation="vertical"/>
 
@@ -1137,7 +1104,7 @@
             <field name="arch" type="xml">
                 <form string="Fields">
                     <group colspan="4" col="6">
-                        <field name="name" select="1" />
+                        <field name="name" select="1"/>
                         <field name="model_id" attrs="{'readonly': [('state','!=', 'manual')]}"/>
                         <field name="field_description"/>
                         <field name="state"/>
@@ -1146,8 +1113,7 @@
                         <page string="Properties">
                             <group colspan="2" col="2">
                                 <field name="ttype"/>
-                                <field name="relation" attrs="{'required': [('ttype','in', ['many2one','one2many','many2many'])],
-                                                                          'readonly': [('ttype','not in', ['many2one','one2many','many2many'])]}"/>
+                                <field name="relation" attrs="{'required': [('ttype','in', ['many2one','one2many','many2many'])],                                                                           'readonly': [('ttype','not in', ['many2one','one2many','many2many'])]}"/>
                                 <field name="relation_field" attrs="{'required': [('ttype','=','one2many')], 'readonly': [('ttype','!=','one2many')]}"/>
                                 <field name="selection" attrs="{'required': [('ttype','in',['selection','reference'])], 'readonly': [('ttype','not in',['selection','reference'])]}"/>
                                 <field name="size" attrs="{'required': [('ttype','in',['char','reference'])], 'readonly': [('ttype','not in',['char','reference'])]}"/>
@@ -1192,17 +1158,11 @@
             <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Fields">
-                    <filter icon="terp-gnome-cpu-frequency-applet+"
-                        string="Required"
-                        domain="[('required', '=', True)]"/>
-                    <separator orientation="vertical"/>
-                    <filter icon="terp-dialog-close"
-                        string="Readonly"
-                        domain="[('readonly', '=', True)]"/>
-                    <separator orientation="vertical"/>
-                    <filter icon="terp-translate"
-                        string="Translate"
-                        domain="[('translate', '=', True)]"/>
+                    <filter icon="terp-gnome-cpu-frequency-applet+" string="Required" domain="[('required', '=', True)]"/>
+                    <separator orientation="vertical"/>
+                    <filter icon="terp-dialog-close" string="Readonly" domain="[('readonly', '=', True)]"/>
+                    <separator orientation="vertical"/>
+                    <filter icon="terp-translate" string="Translate" domain="[('translate', '=', True)]"/>
                     <newline/>
                     <field name="name"/>
                     <field name="field_description"/>
@@ -1231,8 +1191,8 @@
                     <field name="res_id"/>
                     <field name="noupdate"/>
                     <newline/>
-                    <field name="date_update" />
-                    <field name="date_init" />
+                    <field name="date_update"/>
+                    <field name="date_init"/>
                 </form>
             </field>
         </record>
@@ -1257,9 +1217,7 @@
             <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Object Identifiers">
-                    <filter icon="terp-camera_test"
-                        string="Updatable"
-                        domain="[('noupdate', '=', False)]"/>
+                    <filter icon="terp-camera_test" string="Updatable" domain="[('noupdate', '=', False)]"/>
                     <separator orientation="vertical"/>
                     <field name="module"/>
                     <field name="name"/>
@@ -1301,8 +1259,7 @@
             <field name="view_type">form</field>
             <field name="view_id" ref="view_model_data_list"/>
         </record>
-        <menuitem action="action_model_data" id="ir_model_data_menu" parent="base.next_id_5"
-                  groups="base.group_extended"/>
+        <menuitem action="action_model_data" id="ir_model_data_menu" parent="base.next_id_5" groups="base.group_extended"/>
 
         <!-- Translations -->
 
@@ -1312,13 +1269,11 @@
             <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Translations">
-                    <filter icon="terp-gdu-smart-failing"
-                        string="Untranslated"
-                        domain="['|',('value', '=', False),('value','=','')]"/>
+                    <filter icon="terp-gdu-smart-failing" string="Untranslated" domain="['|',('value', '=', False),('value','=','')]"/>
                     <separator orientation="vertical"/>
-                    <field name="lang" select="1"/>
-                    <field name="src" select="1"/>
-                    <field name="value" select="1"/>
+                    <field name="lang"/>
+                    <field name="src"/>
+                    <field name="value"/>
                 </search>
             </field>
         </record>
@@ -1366,7 +1321,7 @@
             <field name="view_type">form</field>
             <field name="view_id" ref="view_translation_tree"/>
         </record>
-        <menuitem action="action_translation" id="menu_action_translation" parent="base.menu_translation_app" />
+        <menuitem action="action_translation" id="menu_action_translation" parent="base.menu_translation_app"/>
 
         <!--
     =============================================================
@@ -1417,17 +1372,17 @@
             <field name="arch" type="xml">
                 <form string="Menu">
                     <group col="6">
-                        <field name="name" string="Menu" />
+                        <field name="name" string="Menu"/>
                         <field name="parent_id" colspan="2"/>
                         <field name="sequence" colspan="2"/>
 
                         <field name="complete_name" string="Full Path" colspan="2"/>
-                        <field name="action" colspan="2" />
-                        <field name="icon"  colspan="2"/>
+                        <field name="action" colspan="2"/>
+                        <field name="icon" colspan="2"/>
 
                         <group col="4" colspan="6" groups="base.group_extended">
-                            <field name="web_icon" groups="base.group_extended" />
-                            <field name="web_icon_hover" groups="base.group_extended" />
+                            <field name="web_icon" groups="base.group_extended"/>
+                            <field name="web_icon_hover" groups="base.group_extended"/>
                             <field name="web_icon_data" widget="image" groups="base.group_extended"/>
                             <field name="web_icon_hover_data" widget="image" groups="base.group_extended"/>
                         </group>
@@ -1447,7 +1402,7 @@
             <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Menu">
-                    <field name="name" string="Menu" />
+                    <field name="name" string="Menu"/>
                     <field name="parent_id"/>
                 </search>
             </field>
@@ -1494,8 +1449,8 @@
                 <form string="Scheduled Actions">
                     <field name="name"/>
                     <field name="active"/>
-                    <field name="user_id" />
-                    <field name="priority" />
+                    <field name="user_id"/>
+                    <field name="priority"/>
                     <notebook colspan="4">
                     <page string="Information">
                         <field name="interval_number"/>
@@ -1530,8 +1485,7 @@
                     <newline/>
                     <group expand="0" string="Group By...">
                         <filter string="User" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/>
-                        <filter string="Execution" icon="terp-go-month"
-                                domain="[]" context="{'group_by':'nextcall'}" />
+                        <filter string="Execution" icon="terp-go-month" domain="[]" context="{'group_by':'nextcall'}"/>
                     </group>
                 </search>
             </field>
@@ -1559,7 +1513,7 @@
             <field name="view_id" ref="ir_cron_view_tree"/>
         </record>
 
-        <menuitem id="next_id_10" name="Scheduler" parent="base.menu_config"  groups="base.group_extended"/>
+        <menuitem id="next_id_10" name="Scheduler" parent="base.menu_config" groups="base.group_extended"/>
         <menuitem action="ir_cron_act" id="menu_ir_cron_act" parent="next_id_10"/>
 
 
@@ -1618,7 +1572,7 @@
                         <field name="group_id"/>
                 </group>
                 <newline/>
-                <group expand="0" string="Group By..." colspan="11" col="11" groups="base.group_extended">
+                <group expand="0" string="Group By..." groups="base.group_extended">
                      <filter string="Group" icon="terp-personal" domain="[]" context="{'group_by':'group_id'}"/>
                      <filter string="Object" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'model_id'}"/>
                    </group>
@@ -1665,14 +1619,10 @@
                         <field name="groups" nolabel="1" colspan="4"/>
                     </group>
                     <separator colspan="4" string="Combination of rules"/>
-                    <label align="0.0" colspan="4"
-                        string="1. Global rules are combined together with a logical AND operator, and with the result of the following steps"/>
-                    <label align="0.0" colspan="4"
-                        string="2. Group-specific rules are combined together with a logical AND operator"/>
-                    <label align="0.0" colspan="4"
-                        string="3. If user belongs to several groups, the results from step 2 are combined with logical OR operator"/>
-                    <label align="0.0" colspan="4"
-                        string="Example: GLOBAL_RULE_1 AND GLOBAL_RULE_2 AND ( (GROUP_A_RULE_1 AND GROUP_A_RULE_2) OR (GROUP_B_RULE_1 AND GROUP_B_RULE_2) )"/>
+                    <label align="0.0" colspan="4" string="1. Global rules are combined together with a logical AND operator, and with the result of the following steps"/>
+                    <label align="0.0" colspan="4" string="2. Group-specific rules are combined together with a logical AND operator"/>
+                    <label align="0.0" colspan="4" string="3. If user belongs to several groups, the results from step 2 are combined with logical OR operator"/>
+                    <label align="0.0" colspan="4" string="Example: GLOBAL_RULE_1 AND GLOBAL_RULE_2 AND ( (GROUP_A_RULE_1 AND GROUP_A_RULE_2) OR (GROUP_B_RULE_1 AND GROUP_B_RULE_2) )"/>
                 </form>
             </field>
         </record>
@@ -1711,7 +1661,7 @@
                         <field name="groups"/>
                     </group>
                     <newline/>
-                    <group expand="0" string="Group By..." colspan="11" col="11" groups="base.group_extended">
+                    <group expand="0" string="Group By..." groups="base.group_extended">
                         <filter string="Object" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'model_id'}"/>
                     </group>
                 </search>
@@ -1835,13 +1785,13 @@
             <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Server Actions">
-                    <group col="10" colspan="4">
+                    <group>
                         <field name="name"/>
                         <field name="state"/>
                         <field name="model_id"/>
                     </group>
                     <newline/>
-                    <group expand="0" string="Group By" colspan="4" col="4">
+                    <group expand="0" string="Group By">
                        <filter string="Action Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'state'}"/>
                     </group>
                 </search>
@@ -1871,9 +1821,7 @@
                     <field name="restart"/>
                     <field name="state" readonly="1"/>
                     <button name="action_launch" states="open" string="Launch" type="object" icon="gtk-execute" help="Launch Configuration Wizard"/>
-                    <button name="action_open" states="cancel,skip,done"
-                            string="Todo" type="object" help="Set as Todo"
-                            icon="gtk-convert"/>
+                    <button name="action_open" states="cancel,skip,done" string="Todo" type="object" help="Set as Todo" icon="gtk-convert"/>
                 </tree>
             </field>
         </record>
@@ -1894,9 +1842,7 @@
                     <group colspan="4" col="4">
                         <field name="state" colspan="2" readonly="1"/>
                         <button name="action_launch" states="open" string="Launch" type="object" icon="gtk-execute" help="Launch Configuration Wizard"/>
-                        <button name="action_open" states="cancel,skip,done"
-                            string="Set as Todo" type="object"
-                            icon="gtk-convert"/>
+                        <button name="action_open" states="cancel,skip,done" string="Set as Todo" type="object" icon="gtk-convert"/>
                     </group>
                 </form>
             </field>
@@ -1925,18 +1871,17 @@
         </record>
         <menuitem id="next_id_11" name="Configuration Wizards" parent="base.menu_config" sequence="1"/>
 
-        <menuitem action="act_ir_actions_todo_form" id="menu_ir_actions_todo_form"
-                parent="next_id_11" groups="base.group_extended" sequence="20"/>
+        <menuitem action="act_ir_actions_todo_form" id="menu_ir_actions_todo_form" parent="next_id_11" groups="base.group_extended" sequence="20"/>
 
 
 
         <record model="ir.cron" id="cronjob_osv_memory_autovacuum">
-            <field name='name'>AutoVacuum osv_memory objects</field>
-            <field name='interval_number'>30</field>
-            <field name='interval_type'>minutes</field>
+            <field name="name">AutoVacuum osv_memory objects</field>
+            <field name="interval_number">30</field>
+            <field name="interval_type">minutes</field>
             <field name="numbercall">-1</field>
             <field name="active">True</field>
-            <field name="doall" eval="False" />
+            <field name="doall" eval="False"/>
             <field name="model">osv_memory.autovacuum</field>
             <field name="function">power_on</field>
             <field name="args">()</field>

=== modified file 'openerp/addons/base/module/module_view.xml'
--- openerp/addons/base/module/module_view.xml	2011-01-04 10:18:47 +0000
+++ openerp/addons/base/module/module_view.xml	2011-03-15 19:44:32 +0000
@@ -38,7 +38,7 @@
             <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Search modules">
-                    <group col='10' colspan='4'>
+                    <group>
                         <filter icon="terp-check" string="Installed" domain="[('state', 'in', ['installed', 'to upgrade', 'to remove'])]"/>
                         <filter icon="terp-dialog-close" string="Not Installed" domain="[('state', 'in', ['uninstalled', 'uninstallable'])]"/>
                         <filter icon="terp-gtk-jump-to-ltr" string="To be upgraded" domain="[('state','in', ['to upgrade', 'to remove', 'to install'])]"/>
@@ -51,7 +51,7 @@
                         <field name="state"/>
                     </group>
                     <newline/>
-                    <group expand="0" string="Group By..." colspan="11" col="11" groups="base.group_extended">
+                    <group expand="0" string="Group By..." groups="base.group_extended">
                         <filter string="Author" icon="terp-personal" domain="[]" context="{'group_by':'author'}"/>
                         <separator orientation="vertical"/>
                         <filter string="Category" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by':'category_id'}"/>
@@ -87,7 +87,7 @@
             <field name="arch" type="xml">
                 <form string="Module">
                     <field name="name" select="1"/>
-                    <field name="certificate" />
+                    <field name="certificate"/>
                     <field colspan="4" name="shortdesc" select="2"/>
                     <field name="category_id"/>
                     <field name="demo" readonly="1"/>

=== modified file 'openerp/addons/base/res/partner/partner_view.xml'
--- openerp/addons/base/res/partner/partner_view.xml	2011-01-17 16:58:40 +0000
+++ openerp/addons/base/res/partner/partner_view.xml	2011-03-15 19:44:32 +0000
@@ -1,17 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
 <openerp>
     <data>
-        <menuitem icon="terp-partner" id="menu_base_partner" name="Sales" sequence="0"
-                  web_icon="data/sales.png"
-                  web_icon_hover="data/sales-hover.png"/>
+        <menuitem icon="terp-partner" id="menu_base_partner" name="Sales" sequence="0" web_icon="data/sales.png" web_icon_hover="data/sales-hover.png"/>
 
         <menuitem id="menu_address_book" name="Address Book" parent="menu_base_partner" sequence="2"/>
 
-        <menuitem id="menu_base_config" name="Configuration" parent="menu_base_partner" sequence="30"
-            groups="group_system"/>
+        <menuitem id="menu_base_config" name="Configuration" parent="menu_base_partner" sequence="30" groups="group_system"/>
 
-        <menuitem id="menu_config_address_book" name="Address Book" parent="menu_base_config" sequence="2"
-            groups="group_system"/>
+        <menuitem id="menu_config_address_book" name="Address Book" parent="menu_base_config" sequence="2" groups="group_system"/>
 
         <!--
           =====================
@@ -26,18 +22,18 @@
             <field name="arch" type="xml">
                 <search string="Search Contact">
                     <group>
-                        <filter string="Customer" name="customer" icon="terp-personal" domain="[('is_customer_add','=','1')]" />
-                        <filter string="Supplier" name="supplier"  icon="terp-personal" domain="[('is_supplier_add','=','1')]" />
+                        <filter string="Customer" name="customer" icon="terp-personal" domain="[('is_customer_add','=','1')]"/>
+                        <filter string="Supplier" name="supplier" icon="terp-personal" domain="[('is_supplier_add','=','1')]"/>
                         <separator orientation="vertical"/>
                         <field name="partner_id" string="Partner"/>
-                        <field name="name" />
-                        <field name="country_id" />
+                        <field name="name"/>
+                        <field name="country_id"/>
                     </group>
                     <newline/>
                     <group expand="0" string="Group By...">
-                       <filter string="Partner" icon="terp-personal" domain="[]" context="{'group_by' : 'partner_id'}" />
-                       <filter string="Country" icon="terp-go-home" domain="[]" context="{'group_by' : 'country_id'}" />
-                       <filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by' : 'type'}" />
+                       <filter string="Partner" icon="terp-personal" domain="[]" context="{'group_by' : 'partner_id'}"/>
+                       <filter string="Country" icon="terp-go-home" domain="[]" context="{'group_by' : 'country_id'}"/>
+                       <filter string="Type" icon="terp-stock_symbol-selection" domain="[]" context="{'group_by' : 'type'}"/>
                    </group>
                  </search>
             </field>
@@ -124,9 +120,7 @@
             <field name="view_id" ref="view_partner_address_form1"/>
             <field name="act_window_id" ref="action_partner_address_form"/>
         </record>
-        <menuitem action="action_partner_address_form" id="menu_partner_address_form"
-            groups="base.group_extended"
-            parent="base.menu_address_book" sequence="30"/>
+        <menuitem action="action_partner_address_form" id="menu_partner_address_form" groups="base.group_extended" parent="base.menu_address_book" sequence="30"/>
 
         <!--
           =========================================
@@ -250,7 +244,7 @@
             <field name="model">res.partner</field>
             <field name="type">form</field>
             <field name="arch" type="xml">
-                <form string="Partners" col='1'>
+                <form string="Partners" col="1">
                     <group col="6" colspan="4">
                         <group colspan="5" col="6">
                             <field name="name" select="1"/>
@@ -275,7 +269,7 @@
                                     </group>
                                     <newline/>
                                       <group colspan="2" col="4">
-                                        <separator string="Postal Address" colspan="4" col="4" />
+                                        <separator string="Postal Address" colspan="4" col="4"/>
                                         <field name="type" string="Type" colspan="2"/>
                                         <field name="street" colspan="4"/>
                                         <field name="street2" colspan="4"/>
@@ -285,7 +279,7 @@
                                         <field name="state_id"/>
                                      </group>
                                      <group colspan="2" col="2">
-                                        <separator string="Communication" colspan="2" col="2" />
+                                        <separator string="Communication" colspan="2" col="2"/>
                                         <field name="phone"/>
                                         <field name="mobile"/>
                                         <field name="fax"/>
@@ -301,9 +295,9 @@
                                     <field name="email"/>
                                 </tree>
                             </field>
-                            <group  groups="base.group_extended">
+                            <group groups="base.group_extended">
                                     <separator colspan="4" string="Categories"/>
-                                    <field  colspan="4" name="category_id" nolabel="1"/>
+                                    <field colspan="4" name="category_id" nolabel="1"/>
                             </group>
                         </page>
                         <page string="Sales &amp; Purchases">
@@ -332,21 +326,21 @@
             <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Search Partner">
-                   <group col='10' colspan='4'>
+                   <group>
                         <filter string="Customers" name="customer" icon="terp-personal" domain="[('customer','=',1)]" help="Customer Partners"/>
                         <filter string="Suppliers" name="supplier" icon="terp-personal" domain="[('supplier','=',1)]" help="Supplier Partners"/>
                         <separator orientation="vertical"/>
-                        <field name="name" select="1"/>
-                        <field name="address" select="1"/>
-                        <field name="country" select="1"/>
-                        <field name="category_id" select="1" groups="base.group_extended"/>
-                        <field name="user_id" select="1">
+                        <field name="name"/>
+                        <field name="address"/>
+                        <field name="country"/>
+                        <field name="category_id" groups="base.group_extended"/>
+                        <field name="user_id">
                             <filter string="My Partners" icon="terp-personal+" domain="[('user_id','=',uid)]"/>
                         </field>
                    </group>
-                   <newline />
+                   <newline/>
                    <group expand="0" string="Group By...">
-                       <filter string="Salesman" icon="terp-personal" domain="[]" context="{'group_by' : 'user_id'}" />
+                       <filter string="Salesman" icon="terp-personal" domain="[]" context="{'group_by' : 'user_id'}"/>
                    </group>
                </search>
             </field>
@@ -373,11 +367,7 @@
             <field name="view_id" ref="view_partner_form"/>
             <field name="act_window_id" ref="action_partner_form"/>
         </record>
-        <menuitem
-            action="action_partner_form"
-            id="menu_partner_form"
-            parent="base.menu_address_book"
-            sequence="2"/>
+        <menuitem action="action_partner_form" id="menu_partner_form" parent="base.menu_address_book" sequence="2"/>
 
         <record id="action_partner_customer_form" model="ir.actions.act_window">
             <field name="name">Customers</field>
@@ -583,12 +573,7 @@
 
         <menuitem action="action_partner_category_form" id="menu_partner_category_form" name="Partner Categories" sequence="4" parent="menu_config_address_book"/>
 
-        <act_window domain="[('partner_id', '=', active_id)]"
-            id="act_res_partner_event" name="Events"
-            res_model="res.partner.event"
-            src_model="res.partner"
-            groups="base.group_extended"
-            />
+        <act_window domain="[('partner_id', '=', active_id)]" id="act_res_partner_event" name="Events" res_model="res.partner.event" src_model="res.partner" groups="base.group_extended"/>
 
     </data>
 </openerp>

=== modified file 'openerp/addons/base/res/res_company_view.xml'
--- openerp/addons/base/res/res_company_view.xml	2010-12-29 18:06:26 +0000
+++ openerp/addons/base/res/res_company_view.xml	2011-03-15 19:44:32 +0000
@@ -12,7 +12,7 @@
                     <field name="company_id"/>
                     <field name="object_id"/>
                     <field name="field_id"/>
-                    <field name="expression" />
+                    <field name="expression"/>
                     <field name="sequence"/>
                     <field name="company_dest_id"/>
                     <field name="name"/>
@@ -49,10 +49,10 @@
             <field name="priority" eval="8"/>
             <field name="arch" type="xml">
                 <search string="Multi Company">
-                    <field name="name" select="1"/>
-                    <field name="company_id" select="1" widget="selection"/>
-                    <field name="company_dest_id" select="1" widget="selection"/>
-                    <field name="object_id" select="1"/>
+                    <field name="name"/>
+                    <field name="company_id" widget="selection"/>
+                    <field name="company_dest_id" widget="selection"/>
+                    <field name="object_id"/>
                 </search>
             </field>
         </record>
@@ -65,14 +65,8 @@
             <field name="search_view_id" ref="view_inventory_search"/>
         </record>
 
-        <menuitem id="menu_custom_multicompany"
-            name="Multi-Companies"
-            parent="base.menu_custom"
-            sequence="50"/>
+        <menuitem id="menu_custom_multicompany" name="Multi-Companies" parent="base.menu_custom" sequence="50"/>
 
-        <menuitem id="menu_action_inventory_form" 
-            action="action_inventory_form"
-            parent="menu_custom_multicompany"/>
+        <menuitem id="menu_action_inventory_form" action="action_inventory_form" parent="menu_custom_multicompany"/>
     </data>
 </openerp>
-

=== modified file 'openerp/addons/base/res/res_request_view.xml'
--- openerp/addons/base/res/res_request_view.xml	2010-10-01 11:54:15 +0000
+++ openerp/addons/base/res/res_request_view.xml	2011-03-15 19:44:32 +0000
@@ -77,17 +77,16 @@
             <field name="type">search</field>
             <field name="arch" type="xml">
                 <search string="Requests">
-                    <filter string="Current" icon="terp-camera_test" domain="['|',('state','=','draft'),('state','=','active')]"
-                    help="Draft and Active"/>
+                    <filter string="Current" icon="terp-camera_test" domain="['|',('state','=','draft'),('state','=','active')]" help="Draft and Active"/>
                     <separator orientation="vertical"/>
                     <filter string="Waiting" icon="terp-gtk-media-pause" domain="[('state','=','waiting')]"/>
                     <separator orientation="vertical"/>
                     <field name="act_from"/>
-                    <field name="act_to" select="1"/>
+                    <field name="act_to"/>
                     <field name="name"/>
                     <field name="state"/>
 	                <newline/>
-	                <group expand="0" string="Group By" colspan="4">
+	                <group expand="0" string="Group By">
                         <filter string="State" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
 	                </group>
                 </search>
@@ -113,7 +112,7 @@
             <field name="search_view_id" ref="res_request_search_view"/>
             <field name="context">{"search_default_act_to":uid}</field>
         </record>
-        <menuitem action="res_request-act" id="menu_res_request_act" parent="menu_resquest_ref" />
+        <menuitem action="res_request-act" id="menu_res_request_act" parent="menu_resquest_ref"/>
 
         <record id="res_request_link-view" model="ir.ui.view">
             <field name="name">res.request.link.form</field>
@@ -158,7 +157,7 @@
             <field name="view_id" eval="False"/>
             <field name="search_view_id" ref="res_request_link_search_view"/>
         </record>
-        <menuitem action="res_request_link-act" id="menu_res_request_link_act" parent="menu_resquest_ref" />
+        <menuitem action="res_request_link-act" id="menu_res_request_link_act" parent="menu_resquest_ref"/>
 
 
 

=== added file 'openerp/addons/base/rng/search.rng'
--- openerp/addons/base/rng/search.rng	1970-01-01 00:00:00 +0000
+++ openerp/addons/base/rng/search.rng	2011-03-15 19:44:32 +0000
@@ -0,0 +1,162 @@
+<rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0";
+             datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes";>
+  <rng:include href="utils.rng"/>
+
+  <rng:start combine="choice">
+    <rng:notAllowed/>
+  </rng:start>
+  <rng:define name="search">
+    <rng:element name="search">
+      <rng:optional><rng:attribute name="string"/></rng:optional>
+      <rng:oneOrMore>
+        <rng:choice>
+          <rng:ref name="search.field"/>
+          <rng:ref name="search.group"/>
+          <rng:ref name="search.separator"/>
+          <rng:ref name="search.filter"/>
+          <rng:element name="newline"><rng:empty/></rng:element>
+        </rng:choice>
+      </rng:oneOrMore>
+    </rng:element>
+  </rng:define>
+
+  <rng:define name="search.filter">
+    <rng:element name="filter">
+      <rng:ref name="access_rights"/>
+      <!-- The label on the filter button -->
+      <rng:optional><rng:attribute name="string" /></rng:optional>
+      <!-- used for some referencings & replacement patterns, also GTK client -->
+      <rng:optional><rng:attribute name="name" /></rng:optional>
+      <!-- TODO: should @icon be mandatory? only document/document_view.xml:167 seems to not have one -->
+      <!-- current default is a small home icon if @icon not set -->
+      <rng:optional><rng:attribute name="icon" /></rng:optional>
+      <rng:optional><rng:attribute name="help"/></rng:optional>
+      <!--
+        Stuff applied to the matching list view when the filter is active:
+          * A domain is added to the list domain to filter it
+          * A context is added to the list's context
+          * Both
+      -->
+      <rng:choice>
+        <rng:attribute name="context"/>
+        <rng:attribute name="domain"/>
+        <rng:group>
+          <rng:attribute name="context"/>
+          <rng:attribute name="domain"/>
+        </rng:group>
+      </rng:choice>
+    </rng:element>
+  </rng:define>
+  <rng:define name="search.separator">
+    <rng:element name="separator">
+      <rng:ref name="access_rights"/>
+      <rng:optional>
+        <rng:attribute name="string"/>
+      </rng:optional>
+      <rng:optional>
+        <rng:attribute name="orientation">
+          <rng:value>vertical</rng:value>
+        </rng:attribute>
+      </rng:optional>
+    </rng:element>
+  </rng:define>
+  <rng:define name="search.group">
+    <rng:element name="group">
+      <rng:ref name="access_rights"/>
+      <rng:optional>
+        <rng:attribute name="string"/>
+      </rng:optional>
+      <rng:optional>
+        <rng:attribute name="expand">
+          <rng:choice>
+            <rng:value>0</rng:value>
+            <rng:value>1</rng:value>
+          </rng:choice>
+        </rng:attribute>
+      </rng:optional>
+      <rng:oneOrMore>
+        <rng:choice>
+          <rng:ref name="search.filter"/>
+          <rng:ref name="search.field"/>
+          <rng:ref name="search.separator"/>
+          <rng:element name="newline"><rng:empty/></rng:element>
+        </rng:choice>
+      </rng:oneOrMore>
+    </rng:element>
+  </rng:define>
+  <rng:define name="search.field">
+    <rng:element name="field">
+      <rng:ref name="access_rights"/>
+      <rng:attribute name="name"/>
+      <rng:optional>
+        <rng:attribute name="string"/>
+      </rng:optional>
+      <rng:optional>
+        <!-- this field should be focused by default instead of the first
+             field|filter in the form -->
+        <rng:attribute name="default_focus">
+          <rng:value>1</rng:value>
+        </rng:attribute>
+      </rng:optional>
+      <rng:optional>
+        <!-- Domain applied to the values the field can take,
+             for relational fields (restricts the relational
+             field's research -->
+        <rng:attribute name="domain"/>
+      </rng:optional>
+      <rng:optional>
+        <!-- Use the specified widget instead of the default
+             widget of the field's type -->
+       <rng:attribute name="widget">
+         <rng:choice>
+           <!-- TODO: other widgets? Need all? -->
+           <rng:value>selection</rng:value>
+           <rng:value>date</rng:value>
+         </rng:choice>
+       </rng:attribute>
+      </rng:optional>
+      <rng:optional>
+        <!-- Merged with the "global" search context (as with filter/@context)
+             when the field has a value.
+             Can reference the ``self`` variable which is evaluated to the
+             field's current value.
+        -->
+        <rng:attribute name="context"/>
+      </rng:optional>
+      <rng:optional>
+        <rng:choice>
+          <!-- Domain applied to the search when this field has a value
+               (similar to filter/@domain). As with the context, it can
+               reference the field's current value via the ``self``
+               variable.
+
+               Replaces the context normally generated.
+          -->
+          <rng:attribute name="filter_domain"/>
+          <!-- change the matching operator from the default, incompatible
+               with filter_domain (as this is used during the generation
+               of the default domain for the field) -->
+          <rng:attribute name="operator">
+            <rng:choice>
+              <rng:value>=</rng:value><rng:value>!=</rng:value>
+              <rng:value>&lt;</rng:value><rng:value>&lt;=</rng:value>
+              <rng:value>&gt;</rng:value><rng:value>&gt;=</rng:value>
+              <rng:value>=?</rng:value>
+              <rng:value>=like</rng:value><rng:value>=ilike</rng:value>
+              <rng:value>like</rng:value><rng:value>not like</rng:value>
+              <rng:value>ilike</rng:value><rng:value>not ilike</rng:value>
+              <rng:value>in</rng:value><rng:value>not in</rng:value>
+              <rng:value>child_of</rng:value>
+            </rng:choice>
+          </rng:attribute>
+        </rng:choice>
+      </rng:optional>
+      <rng:optional>
+        <rng:attribute name="help"/>
+      </rng:optional>
+      <rng:zeroOrMore>
+        <rng:ref name="search.filter"/>
+      </rng:zeroOrMore>
+    </rng:element>
+  </rng:define>
+</rng:grammar>

=== added file 'openerp/addons/base/rng/utils.rng'
--- openerp/addons/base/rng/utils.rng	1970-01-01 00:00:00 +0000
+++ openerp/addons/base/rng/utils.rng	2011-03-15 19:44:32 +0000
@@ -0,0 +1,33 @@
+<rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0";
+             xmlns:a="http://www.example.com/annotation";
+             datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes";>
+  <rng:start combine="choice">
+    <rng:notAllowed/>
+  </rng:start>
+
+  <rng:define name="access_rights">
+    <rng:optional>
+      <rng:attribute name="groups"/>
+    </rng:optional>
+  </rng:define>
+
+  <rng:define name="colspan">
+    <a:documentation>The width the element takes in its
+    row, in cells</a:documentation>
+    <rng:optional>
+      <rng:attribute name="colspan">
+        <rng:data type="positiveInteger"/>
+      </rng:attribute>
+    </rng:optional>
+  </rng:define>
+
+  <rng:define name="rowspan">
+    <a:documentation>The height the element takes in its column, in
+    cells</a:documentation>
+    <rng:optional>
+      <rng:attribute name="rowspan">
+        <rng:data type="positiveInteger"/>
+      </rng:attribute>
+    </rng:optional>
+  </rng:define>
+</rng:grammar>

=== modified file 'openerp/addons/base/rng/view.rng'
--- openerp/addons/base/rng/view.rng	2010-12-27 10:41:55 +0000
+++ openerp/addons/base/rng/view.rng	2011-03-15 19:44:32 +0000
@@ -1,50 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0";
-              datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes";>
-  <!-- Handling of element overloading when inheriting from a base
-       template
-  -->
-  <rng:define name="overload">
-    <rng:optional>
-      <!--
-          Alter matched element with content
-      -->
-      <rng:choice>
-        <rng:attribute name="position">
-          <rng:choice>
-            <!-- Insert content before first child -->
-            <rng:value>before</rng:value>
-            <!-- Insert content after last child -->
-            <rng:value>after</rng:value>
-            <!-- Replace all children with content -->
-            <rng:value>inside</rng:value>
-            <!-- Replace matched element itself with content -->
-            <rng:value>replace</rng:value>
-          </rng:choice>
-        </rng:attribute>
-        <rng:group>
-          <rng:attribute name="position">
-            <!-- Edit element attributes -->
-            <rng:value>attributes</rng:value>
-          </rng:attribute>
-          <rng:oneOrMore>
-            <rng:element name="attribute">
-              <rng:attribute name="name"><rng:text/></rng:attribute>
-              <rng:text />
-            </rng:element>
-          </rng:oneOrMore>
-        </rng:group>
-      </rng:choice>
-    </rng:optional>
-  </rng:define>
-
-    <rng:define name="access_rights">
-        <rng:optional>
-            <rng:attribute name="groups"/>
-        </rng:optional>
-    </rng:define>
-
-
+             xmlns:a="http://www.example.com/annotation";
+             datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes";>
+  <rng:include href="search.rng"/>
 
   <rng:define name="container">
     <rng:optional><rng:attribute name="col"/></rng:optional>
@@ -58,9 +16,7 @@
         <rng:ref name="label" />
         <rng:ref name="separator"/>
         <rng:ref name="image"/>
-        <rng:ref name="form"/>
         <rng:ref name="vpaned"/>
-        <rng:ref name="filter"/>
         <rng:ref name="html"/>
         <rng:element name="newline"><rng:empty/></rng:element>
         <rng:element name="properties"><rng:empty/></rng:element>
@@ -70,7 +26,6 @@
 
     <rng:define name="form">
         <rng:element name="form">
-            <rng:ref name="overload"/>
             <rng:optional><rng:attribute name="string"/></rng:optional>
             <rng:optional><rng:attribute name="editable"/></rng:optional>
             <rng:optional><rng:attribute name="type"/></rng:optional>
@@ -122,7 +77,6 @@
 
     <rng:define name="tree">
         <rng:element name="tree">
-            <rng:ref name="overload"/>
             <rng:optional><rng:attribute name="string"/></rng:optional>
             <rng:optional><rng:attribute name="colors"/></rng:optional>
             <rng:optional><rng:attribute name="color"/></rng:optional>
@@ -140,7 +94,6 @@
                     <rng:ref name="tree"/>
                     <rng:ref name="group"/>
                     <rng:ref name="button"/>
-                    <rng:ref name="filter"/>
                     <rng:ref name="html"/>
                     <rng:element name="newline"><rng:empty/></rng:element>
                 </rng:choice>
@@ -148,27 +101,6 @@
         </rng:element>
     </rng:define>
 
-    <rng:define name="search">
-        <rng:element name="search">
-            <rng:ref name="overload"/>
-            <rng:optional><rng:attribute name="string"/></rng:optional>
-            <rng:optional><rng:attribute name="col"/></rng:optional>
-            <rng:optional><rng:attribute name="type"/></rng:optional>
-            <rng:optional><rng:attribute name="link"/></rng:optional>
-            <rng:zeroOrMore>
-                <rng:choice>
-                    <rng:ref name="field"/>
-                    <rng:ref name="group"/>
-                    <rng:ref name="separator"/>
-                    <rng:ref name="filter"/>
-                    <rng:ref name="search"/>
-                    <rng:element name="newline"><rng:empty/></rng:element>
-                    <rng:element name="properties"><rng:empty/></rng:element>
-                </rng:choice>
-            </rng:zeroOrMore>
-        </rng:element>
-    </rng:define>
-
     <rng:define name="image">
         <rng:element name="image">
             <rng:attribute name="name"/>
@@ -186,34 +118,15 @@
 
     <rng:define name="label">
         <rng:element name="label">
-            <rng:ref name="overload"/>
+            <rng:ref name="colspan"/>
             <rng:optional><rng:attribute name="align"/></rng:optional>
             <rng:optional><rng:attribute name="nolabel"/></rng:optional>
-            <rng:optional><rng:attribute name="colspan"/></rng:optional>
             <rng:optional><rng:attribute name="string"/></rng:optional>
             <rng:optional><rng:attribute name="angle"/></rng:optional>
             <rng:optional><rng:attribute name="fill"/></rng:optional>
             <rng:optional><rng:attribute name="help"/></rng:optional>
             <rng:optional><rng:attribute name="width"/></rng:optional>
             <rng:optional><rng:attribute name="wrap"/></rng:optional>
-            <rng:zeroOrMore>
-                <rng:choice>
-                    <rng:ref name="notebook"/>
-                    <rng:ref name="field"/>
-                    <rng:ref name="group"/>
-                    <rng:ref name="button"/>
-                    <rng:ref name="hpaned" />
-                    <rng:ref name="label" />
-                    <rng:ref name="separator"/>
-                    <rng:ref name="image"/>
-                    <rng:ref name="form"/>
-                    <rng:ref name="vpaned"/>
-                    <rng:ref name="filter"/>
-                    <rng:ref name="html"/>
-                    <rng:element name="newline"><rng:empty/></rng:element>
-                    <rng:element name="properties"><rng:empty/></rng:element>
-                </rng:choice>
-            </rng:zeroOrMore>
         </rng:element>
     </rng:define>
 
@@ -306,37 +219,18 @@
 
     <rng:define name="page">
         <rng:element name="page">
-            <rng:ref name="overload"/>
             <rng:ref name="access_rights"/>
             <rng:optional><rng:attribute name="string"/></rng:optional>
             <rng:optional><rng:attribute name="name"/></rng:optional>
             <rng:optional><rng:attribute name="attrs"/></rng:optional>
             <rng:optional><rng:attribute name="invisible"/></rng:optional>
-            <rng:zeroOrMore>
-                <rng:choice>
-                    <rng:element name="newline"><rng:empty/></rng:element>
-                    <rng:element name="properties"><rng:empty/></rng:element>
-                    <rng:ref name="label" />
-                    <rng:ref name="field"/>
-                    <rng:ref name="group"/>
-                    <rng:ref name="separator"/>
-                    <rng:ref name="button"/>
-                    <rng:ref name="form" />
-                    <rng:ref name="page" />
-                    <rng:ref name="notebook"/>
-                    <rng:ref name="hpaned"/>
-                    <rng:ref name="vpaned"/>
-                    <rng:ref name="filter"/>
-                    <rng:ref name="html"/>
-                </rng:choice>
-            </rng:zeroOrMore>
+            <rng:ref name="container"/>
         </rng:element>
     </rng:define>
 
     <rng:define name="notebook">
         <rng:element name="notebook">
-            <rng:ref name="overload"/>
-            <rng:optional><rng:attribute name="colspan"/></rng:optional>
+            <rng:ref name="colspan"/>
             <rng:optional><rng:attribute name="tabpos"/></rng:optional>
             <rng:oneOrMore>
                 <rng:ref name="page"/>
@@ -346,72 +240,28 @@
 
     <rng:define name="separator">
         <rng:element name="separator">
-            <rng:ref name="overload"/>
             <rng:ref name="access_rights"/>
-            <rng:optional><rng:attribute name="colspan"/></rng:optional>
-            <rng:optional><rng:attribute name="rowspan"/></rng:optional>
             <rng:optional><rng:attribute name="string"/></rng:optional>
             <rng:optional><rng:attribute name="col"/></rng:optional>
             <rng:optional><rng:attribute name="select"/></rng:optional>
-            <rng:optional><rng:attribute name="orientation"/></rng:optional>
-            <rng:zeroOrMore>
-                <rng:choice>
-                    <rng:ref name="separator"/>
-                    <rng:ref name="button"/>
-                    <rng:ref name="field"/>
-                    <rng:ref name="label" />
-                    <rng:ref name="group" />
-                    <rng:ref name="filter"/>
-                    <rng:ref name="html"/>
-                    <rng:element name="properties"><rng:empty/></rng:element>
-                    <rng:element name="newline"><rng:empty/></rng:element>
-                </rng:choice>
-            </rng:zeroOrMore>
-        </rng:element>
-    </rng:define>
-
-    <rng:define name="xpath">
-        <rng:element name="xpath">
-            <rng:optional><rng:attribute name="expr"/></rng:optional>
-            <rng:ref name="overload"/>
-            <rng:zeroOrMore>
-                <rng:choice>
-                    <rng:ref name="any"/>
-                    <rng:ref name="button"/>
-                    <rng:ref name="html"/>
-                </rng:choice>
-            </rng:zeroOrMore>
-        </rng:element>
-    </rng:define>
-
-    <rng:define name="data">
-        <rng:element name="data">
-            <rng:zeroOrMore>
-                <rng:choice>
-                    <rng:ref name="form"/>
-                    <rng:ref name="tree"/>
-                    <rng:ref name="field"/>
-                    <rng:ref name="label"/>
-                    <rng:ref name="separator"/>
-                    <rng:ref name="notebook"/>
-                    <rng:ref name="page"/>
-                    <rng:ref name="xpath"/>
-                    <rng:ref name="button"/>
-                    <rng:ref name="group"/>
-                    <rng:ref name="filter"/>
-                    <rng:ref name="graph"/>
-                    <rng:ref name="html"/>
-                    <rng:element name="newline"><rng:empty/></rng:element>
-                </rng:choice>
-            </rng:zeroOrMore>
+            <rng:ref name="colspan"/>
+            <rng:optional>
+              <rng:group>
+                <rng:attribute name="orientation" >
+                  <rng:value>vertical</rng:value>
+                </rng:attribute>
+                <rng:ref name="rowspan"/>
+              </rng:group>
+            </rng:optional>
         </rng:element>
     </rng:define>
 
     <rng:define name="field">
         <rng:element name="field">
             <rng:attribute name="name" />
-            <rng:ref name="overload"/>
             <rng:ref name="access_rights"/>
+            <rng:ref name="colspan"/>
+            <rng:ref name="rowspan"/>
             <rng:optional><rng:attribute name="editable"/></rng:optional>
             <rng:optional><rng:attribute name="domain_filter"/></rng:optional>
             <rng:optional><rng:attribute name="attrs"/></rng:optional>
@@ -436,7 +286,6 @@
             <rng:optional><rng:attribute name="select"/></rng:optional>
             <rng:optional><rng:attribute name="group"/></rng:optional>
             <rng:optional><rng:attribute name="operator"/></rng:optional>
-            <rng:optional><rng:attribute name="colspan"/></rng:optional>
             <rng:optional><rng:attribute name="nolabel"/></rng:optional>
             <rng:optional><rng:attribute name="default"/></rng:optional>
             <rng:optional><rng:attribute name="default_get"/></rng:optional>
@@ -455,40 +304,26 @@
             <rng:optional><rng:attribute name="filename"/></rng:optional>
             <rng:optional><rng:attribute name="fieldname"/></rng:optional>
             <rng:optional><rng:attribute name="height"/></rng:optional>
-            <rng:optional><rng:attribute name="rowspan"/></rng:optional>
             <rng:optional><rng:attribute name="align"/></rng:optional>
             <rng:optional><rng:attribute name="selection"/></rng:optional>
             <rng:optional><rng:attribute name="default_focus"/></rng:optional>
             <rng:optional><rng:attribute name="filters"/></rng:optional>
-            <rng:zeroOrMore>
-                <rng:choice>
-                    <rng:ref name="diagram"/>
-                    <rng:ref name="form"/>
-                    <rng:ref name="data"/>
-                    <rng:ref name="tree"/>
-                    <rng:ref name="field"/>
-                    <rng:ref name="label"/>
-                    <rng:ref name="separator"/>
-                    <rng:ref name="xpath"/>
-                    <rng:ref name="button"/>
-                    <rng:ref name="group"/>
-                    <rng:ref name="graph"/>
-                    <rng:ref name="filter"/>
-                    <rng:ref name="notebook"/>
-                    <rng:ref name="html"/>
-                    <rng:element name="newline"><rng:empty/></rng:element>
-                </rng:choice>
-            </rng:zeroOrMore>
+
+            <!-- o2m and m2m fields -->
+            <rng:interleave>
+                <rng:optional><rng:ref name="form"/></rng:optional>
+                <rng:optional><rng:ref name="tree"/></rng:optional>
+                <rng:optional><rng:ref name="graph"/></rng:optional>
+            </rng:interleave>
         </rng:element>
     </rng:define>
 
     <rng:define name="group">
         <rng:element name="group">
-            <rng:ref name="overload"/>
             <rng:ref name="access_rights"/>
+            <rng:ref name="colspan"/>
+            <rng:ref name="rowspan"/>
             <rng:optional><rng:attribute name="attrs"/></rng:optional>
-            <rng:optional><rng:attribute name="colspan"/></rng:optional>
-            <rng:optional><rng:attribute name="rowspan"/></rng:optional>
             <rng:optional><rng:attribute name="expand"/></rng:optional>
             <rng:optional><rng:attribute name="states"/></rng:optional>
             <rng:optional><rng:attribute name="string"/></rng:optional>
@@ -537,8 +372,8 @@
 
     <rng:define name="button">
         <rng:element name="button">
-            <rng:ref name="overload"/>
             <rng:ref name="access_rights"/>
+            <rng:ref name="colspan"/>
             <rng:optional><rng:attribute name="attrs"/></rng:optional>
             <rng:optional><rng:attribute name="invisible"/></rng:optional>
             <rng:optional><rng:attribute name="name" /></rng:optional>
@@ -548,97 +383,117 @@
             <rng:optional><rng:attribute name="type" /></rng:optional>
             <rng:optional><rng:attribute name="special" /></rng:optional>
             <rng:optional><rng:attribute name="align" /></rng:optional>
-            <rng:optional><rng:attribute name="colspan"/></rng:optional>
             <rng:optional><rng:attribute name="target"/></rng:optional>
             <rng:optional><rng:attribute name="readonly"/></rng:optional>
             <rng:optional><rng:attribute name="context"/></rng:optional>
             <rng:optional><rng:attribute name="confirm"/></rng:optional>
             <rng:optional><rng:attribute name="help"/></rng:optional>
             <rng:optional><rng:attribute name="default_focus"/></rng:optional>
-            <rng:zeroOrMore>
-                <rng:choice>
-                    <rng:ref name="form" />
-                    <rng:ref name="field" />
-                    <rng:ref name="tree" />
-                    <rng:ref name="notebook" />
-                    <rng:ref name="graph" />
-                    <rng:ref name="calendar" />
-                    <rng:ref name="gantt" />
-                    <rng:ref name="xpath" />
-                    <rng:ref name="page" />
-                    <rng:ref name="separator"/>
-                    <rng:ref name="button"/>
-                    <rng:ref name="group"/>
-                    <rng:ref name="filter"/>
-                    <rng:ref name="html"/>
-                    <rng:element name="properties"><rng:empty/></rng:element>
-                    <rng:element name="newline"><rng:empty/></rng:element>
-                </rng:choice>
-            </rng:zeroOrMore>
-
-        </rng:element>
-    </rng:define>
-
-    <rng:define name="filter">
-        <rng:element name="filter">
-            <rng:ref name="overload"/>
-            <rng:ref name="access_rights"/>
-            <rng:optional><rng:attribute name="attrs"/></rng:optional>
-            <rng:optional><rng:attribute name="name" /></rng:optional>
-            <rng:optional><rng:attribute name="separator" /></rng:optional>
-            <rng:optional><rng:attribute name="icon" /></rng:optional>
-            <rng:optional><rng:attribute name="string" /></rng:optional>
-            <rng:optional><rng:attribute name="type" /></rng:optional>
-            <rng:optional><rng:attribute name="align" /></rng:optional>
-            <rng:optional><rng:attribute name="colspan"/></rng:optional>
-            <rng:optional><rng:attribute name="readonly"/></rng:optional>
-            <rng:optional><rng:attribute name="context"/></rng:optional>
-            <rng:optional><rng:attribute name="help"/></rng:optional>
-            <rng:optional><rng:attribute name="domain"/></rng:optional>
-            <rng:optional><rng:attribute name="default"/></rng:optional>
-            <rng:zeroOrMore>
-                <rng:choice>
-                    <rng:ref name="form" />
-                    <rng:ref name="field" />
-                    <rng:ref name="tree" />
-                    <rng:ref name="notebook" />
-                    <rng:ref name="graph" />
-                    <rng:ref name="calendar" />
-                    <rng:ref name="gantt" />
-                    <rng:ref name="xpath" />
-                    <rng:ref name="page" />
-                    <rng:ref name="separator"/>
-                    <rng:ref name="button"/>
-                    <rng:ref name="filter"/>
-                    <rng:ref name="html"/>
-                    <rng:element name="properties"><rng:empty/></rng:element>
-                    <rng:element name="newline"><rng:empty/></rng:element>
-                </rng:choice>
-            </rng:zeroOrMore>
-
-        </rng:element>
-    </rng:define>
-
-    <rng:start>
+        </rng:element>
+    </rng:define>
+
+    <!--
+        Handling of element overloading when inheriting from a base
+        view
+    -->
+    <rng:define name="overload">
+        <a:documentation>
+            Overriding of the content of a given element
+        </a:documentation>
+        <!--
+            Alter matched element with content
+        -->
+        <rng:zeroOrMore>
+            <rng:attribute>
+                <rng:anyName>
+                    <rng:except>
+                        <rng:name>position</rng:name>
+                        <rng:name>expr</rng:name>
+                    </rng:except>
+                </rng:anyName>
+            </rng:attribute>
+        </rng:zeroOrMore>
+        <rng:choice>
+            <rng:group>
+                <rng:attribute name="position">
+                    <!-- Edit element attributes -->
+                    <rng:value>attributes</rng:value>
+                </rng:attribute>
+                <rng:oneOrMore>
+                    <rng:element name="attribute">
+                        <rng:attribute name="name"/>
+                        <rng:text />
+                    </rng:element>
+                </rng:oneOrMore>
+            </rng:group>
+            <rng:group>
+                <rng:attribute name="position">
+                    <rng:choice>
+                        <!-- Insert content before first child -->
+                        <rng:value>before</rng:value>
+                        <!-- Insert content after last child -->
+                        <rng:value>after</rng:value>
+                        <!-- Replace all children with content -->
+                        <rng:value>inside</rng:value>
+                        <!-- Replace matched element itself with content -->
+                        <rng:value>replace</rng:value>
+                    </rng:choice>
+                </rng:attribute>
+                <rng:zeroOrMore>
+                    <rng:ref name="any"/>
+                </rng:zeroOrMore>
+            </rng:group>
+        </rng:choice>
+    </rng:define>
+
+    <rng:define name="overloader">
+        <rng:choice>
+            <!-- TODO: better define & validate overloading -->
+            <rng:element name="xpath">
+                <rng:attribute name="expr"/>
+                <rng:ref name="overload"/>
+            </rng:element>
+            <rng:element>
+                <rng:anyName/>
+                <rng:ref name="overload"/>
+            </rng:element>
+            <!--
+                TODO: if the case below is removed, the view at
+                account/product_view.xml:51 fails to validate even though
+                it can not match the pattern below. If the pattern is moved
+                above the previous one it still works, and it fails depending
+                on the exact alterations done to it (or if it's removed), but
+                I have not managed to find why that happens yet
+            -->
+            <rng:element>
+                <rng:anyName/>
+                <rng:element name="refuse-to-match-anything"><rng:empty/></rng:element>
+            </rng:element>
+        </rng:choice>
+    </rng:define>
+
+    <rng:define name="overloading">
+        <rng:choice>
+            <rng:ref name="overloader"/>
+            <rng:element name="data">
+                <rng:oneOrMore>
+                    <rng:ref name="overloader"/>
+                </rng:oneOrMore>
+            </rng:element>
+        </rng:choice>
+    </rng:define>
+
+    <rng:start combine="choice">
         <rng:choice>
             <rng:ref name="diagram" />
             <rng:ref name="form" />
             <rng:ref name="search" />
-            <rng:ref name="group" />
-            <rng:ref name="field" />
             <rng:ref name="tree" />
-            <rng:ref name="notebook" />
             <rng:ref name="graph" />
             <rng:ref name="calendar" />
-            <rng:ref name="data" />
-            <rng:ref name="gantt" />
-            <rng:ref name="xpath" />
-            <rng:ref name="page" />
-            <rng:ref name="separator"/>
-            <rng:ref name="button"/>
-            <rng:ref name="filter"/>
-            <rng:ref name="label" />
-            <rng:ref name="html"/>
+            <rng:ref name="gantt"/>
+
+            <rng:ref name="overloading"/>
         </rng:choice>
     </rng:start>
 </rng:grammar>