[REF] deduplicate old-style dashboard elements
[odoo/odoo.git] / openerp / addons / base / rng / view.rng
index d4ef442..d77c9ca 100644 (file)
@@ -1,42 +1,42 @@
 <?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>
+    <!-- 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:optional>
     </rng:define>
 
+    <rng:define name="dashboard">
+        <rng:choice>
+            <rng:element>
+                <rng:choice>
+                    <rng:name>hpaned</rng:name>
+                    <rng:name>vpaned</rng:name>
+                </rng:choice>
+                <rng:optional>
+                    <rng:attribute name="position">
+                        <rng:data type="int"/>
+                    </rng:attribute>
+                </rng:optional>
+                <rng:zeroOrMore>
+                    <rng:optional><rng:ref name="any"/></rng:optional>
+                    <rng:optional><rng:ref name="html"/></rng:optional>
+                </rng:zeroOrMore>
+            </rng:element>
+        </rng:choice>
+    </rng:define>
 
-
-  <rng:define name="container">
-    <rng:optional><rng:attribute name="col"/></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:define>
+    <rng:define name="container">
+        <rng:optional><rng:attribute name="col"/></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="label" />
+                <rng:ref name="separator"/>
+                <rng:ref name="image"/>
+                <rng:ref name="form"/>
+                <rng:ref name="dashboard"/>
+                <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:define>
 
     <rng:define name="form">
         <rng:element name="form">
     <rng:define name="diagram">
         <rng:element name="diagram">
             <rng:optional><rng:attribute name="string"/></rng:optional>
-            <rng:zeroOrMore>
-                <rng:choice>
-                    <rng:ref name="node"/>
-                    <rng:ref name="arrow"/>
-                </rng:choice>
-            </rng:zeroOrMore>
+            <rng:ref name="node"/>
+            <rng:ref name="arrow"/>
         </rng:element>
     </rng:define>
 
             <rng:optional><rng:attribute name="shape"/></rng:optional>
             <rng:optional><rng:attribute name="bgcolor"/></rng:optional>
             <rng:optional><rng:attribute name="form_view_ref"/></rng:optional>
-            <rng:zeroOrMore>
-                <rng:choice>
-                    <rng:ref name="field"/>
-                </rng:choice>
-            </rng:zeroOrMore>
+            <rng:oneOrMore>
+              <rng:ref name="field"/>
+            </rng:oneOrMore>
         </rng:element>
     </rng:define>
 
             <rng:attribute name="destination" />
             <rng:optional><rng:attribute name="form_view_ref"/></rng:optional>
             <rng:optional><rng:attribute name="label"/></rng:optional>
-            <rng:zeroOrMore>
-                <rng:choice>
-                    <rng:ref name="field"/>
-                </rng:choice>
-            </rng:zeroOrMore>
+            <rng:oneOrMore>
+              <rng:ref name="field"/>
+            </rng:oneOrMore>
         </rng:element>
     </rng:define>
 
     <rng:define name="kanban">
         <rng:element name="kanban">
+            <rng:optional>
+                <!-- group-by field to apply in the kanban view when no other
+                     grouping is selected in the search view -->
+                <rng:attribute name="default_group_by" />
+            </rng:optional>
             <rng:zeroOrMore>
-                <rng:choice>
-                    <rng:ref name="colors"/>
-                    <rng:ref name="template"/>
-                </rng:choice>
-            </rng:zeroOrMore>
-        </rng:element>
-    </rng:define>
-
-    <rng:define name="colors">
-        <rng:element name="colors">
-            <rng:zeroOrMore>
-                <rng:choice>
-                    <rng:ref name="color"/>
-                </rng:choice>
+                <rng:ref name="field"/>
             </rng:zeroOrMore>
-        </rng:element>
-    </rng:define>
-
-    <rng:define name="color">
-        <rng:element name="color">
-            <rng:optional><rng:attribute name="condition"/><rng:text/></rng:optional>
-        </rng:element>
-    </rng:define>
-
-    <rng:define name="template">
-        <rng:element name="template">
-            <rng:zeroOrMore>
-                <rng:choice>
+            <rng:element name="templates">
+                <rng:oneOrMore>
                     <rng:ref name="any"/>
-                </rng:choice>
-            </rng:zeroOrMore>
+                </rng:oneOrMore>
+            </rng:element>
         </rng:element>
     </rng:define>
 
             <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:optional><rng:attribute name="name"/></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="dashboard"/>
                     <rng:ref name="filter"/>
                     <rng:ref name="html"/>
                     <rng:element name="newline"><rng:empty/></rng:element>
         </rng:element>
     </rng:define>
 
-    <rng:define name="hpaned">
-        <rng:element name="hpaned">
-            <rng:optional>
-              <rng:attribute name="position">
-                <rng:data type="int"/>
-              </rng:attribute>
-            </rng:optional>
-            <rng:zeroOrMore>
-                <rng:ref name="any" />
-                <rng:optional><rng:ref name="html"/></rng:optional>
-            </rng:zeroOrMore>
-        </rng:element>
-    </rng:define>
-
-    <rng:define name="vpaned">
-        <rng:element name="vpaned">
-            <rng:optional>
-              <rng:attribute name="position">
-                <rng:data type="int"/>
-              </rng:attribute>
-            </rng:optional>
-            <rng:zeroOrMore>
-                <rng:optional><rng:ref name="any"/></rng:optional>
-                <rng:optional><rng:ref name="html"/></rng:optional>
-            </rng:zeroOrMore>
-        </rng:element>
-    </rng:define>
-
     <rng:define name="any">
         <rng:element>
             <rng:anyName/>
                     <rng:ref name="form" />
                     <rng:ref name="page" />
                     <rng:ref name="notebook"/>
-                    <rng:ref name="hpaned"/>
-                    <rng:ref name="vpaned"/>
+                    <rng:ref name="dashboard"/>
                     <rng:ref name="filter"/>
                     <rng:ref name="html"/>
                 </rng:choice>
             <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>
             <rng:optional><rng:attribute name="required"/></rng:optional>
             <rng:optional><rng:attribute name="readonly"/></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:optional><rng:attribute name="statusbar_visible"/></rng:optional>
+            <rng:optional><rng:attribute name="statusbar_colors"/></rng:optional>
             <rng:zeroOrMore>
                 <rng:choice>
                     <rng:ref name="diagram"/>
             <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" />