[FIX] Fix some field
[odoo/odoo.git] / addons / web / static / src / xml / base.xml
index 972656d..7ee908a 100644 (file)
@@ -3,7 +3,7 @@
 -->
 <templates id="template" xml:space="preserve">
 <t t-name="Notification">
-    <div class="oe_notification">
+    <div class="oe_notification" t-translation="off">
         <div id="oe_notification_default">
             <a class="ui-notify-cross ui-notify-close" href="#">x</a>
             <h1>#{title}</h1>
         </div>
     </div>
 </t>
-<t t-name="Interface">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" class="main_table">
-    <tr>
-        <td colspan="2" valign="top">
-            <div id="oe_header" class="header"></div>
-            <div id="oe_menu" class="menu"></div>
-        </td>
-    </tr>
-    <tr>
-        <td colspan="2" valign="top" height="100%">
-            <table cellspacing="0" cellpadding="0" border="0" height="100%" width="100%">
-            <tr>
-                <td valign="top" id="oe_secondary_menu" class="secondary_menu"></td>
-                <td valign="top" class="oe-application-container">
-                    <div id="oe_app" class="oe-application">
-                    </div>
-                </td>
-            </tr>
-            </table>
-        </td>
-    </tr>
-    <tr>
-        <td colspan="2">
-            <div id="oe_footer" class="oe_footer">
-                <p class="oe_footer_powered">Powered by <a href="http://www.openerp.com">OpenERP</a></p>
+<t t-name="WebClient">
+    <div class="oe_webclient">
+        <div class="oe_topbar">
+            <div class="oe_menu_placeholder"/>
+            <div class="oe_user_menu_placeholder"/>
+            <div class="oe_systray"/>
+        </div>
+        <div class="oe_leftbar">
+            <a href="#" class="oe_logo"><img t-att-src='_s + "/web/static/src/img/logo.png"'/></a>
+
+            <div class="oe_secondary_menus_container"/>
+
+            <div class="oe_footer">
+                Powered by <a href="http://www.openerp.com"><span>Open</span>ERP</a>
             </div>
-        </td>
-    </tr>
-    </table>
+        </div>
+        <div class="oe_application"/>
+    </div>
 </t>
 <t t-name="Loading">
     <div id="oe_loading">
                             <option t-att-value="db"><t t-esc="db"/></option>
                         </t>
                     </select>
-                    <input t-if="!db_list" name="drop_db" class="required"
+                    <input t-if="!db_list" name="backup_db" class="required"
                            type="text" autofocus="autofocus"/>
                 </td>
             </tr>
         <div id="oe_db_options" class="oe_db_options"></div>
     </div>
 </t>
-<t t-name="Header">
-    <div>
-        <a t-att-href="'/' + widget.qs" class="company_logo_link">
-            <div class="company_logo" />
-        </a>
-    </div>
-</t>
-<t t-name="Header-content">
-    <h1 class="header_title">
-        <t t-esc="user.company_id[1]"/> (<t t-esc="widget.session.db"/>)<br/>
-        <small class="username"><t t-esc="user.name"/></small>
-    </h1>
-    <div class="header_corner">
-        <ul class="block">
-            <li>
-                <a t-att-href="'/' + widget.qs" title="Home" class="home"><img t-att-src='_s + "/web/static/src/img/header-home.png"' width="16" height="16" border="0"/></a>
-            </li>
-            <li class="preferences">
-                <a href="javascript:void(0)" title="Preferences" class="preferences"><img t-att-src='_s + "/web/static/src/img/header-preferences.png"' width="16" height="16" border="0"/></a>
-            </li>
-            <li>
-                <a href="javascript:void(0)" title="About" class="about"><img t-att-src='_s + "/web/static/src/img/header-about.png"' width="16" height="16" border="0"/></a>
-            </li>
-        </ul>
-        <div class="block">
-            <a href="javascript:void(0)" class="logout">LOGOUT</a>
-        </div>
 
-    </div>
-    <div class="oe-shortcuts"> </div>
-</t>
-<ul t-name="Shortcuts">
-    <li t-foreach="shortcuts" t-as="shortcut"
-            t-att-data-id="shortcut.res_id"
-            t-att-data-shortcut-id="shortcut.id"
-        ><t t-esc="shortcut.name"/></li>
-</ul>
 <t t-name="Menu">
-    <table align="center">
-    <tr>
-        <td t-foreach="widget.data.data.children" t-as="menu">
-            <a href="#" t-att-data-menu="menu.id">
-                <t t-esc="menu.name"/>
-            </a>
-        </td>
-    </tr>
-    </table>
+    <ul class="oe_menu" t-if="widget.data">
+        <li t-foreach="widget.data.data.children" t-as="menu">
+            <t t-call="Menu.secondary.link"/>
+        </li>
+    </ul>
 </t>
 <t t-name="Menu.secondary">
-    <div t-attf-class="oe_toggle_secondary_menu">
-        <span class="oe_menu_fold" title="Fold menu">&amp;laquo;</span>
-        <span class="oe_menu_unfold" title="Unfold menu">&amp;raquo;</span>
-    </div>
     <div t-foreach="widget.data.data.children" t-as="menu" style="display: none" class="oe_secondary_menu" t-att-data-menu-parent="menu.id">
         <t t-foreach="menu.children" t-as="menu">
-            <t t-set="classname">oe_secondary_menu_item</t>
-            <t t-set="level" t-value="0"/>
-            <t t-call="Menu.secondary.children"/>
+            <div class="oe_secondary_menu_section">
+                <t t-esc="menu.name"/>
+                <!--
+                    Shall the section be still clickable ?
+                    <t t-call="Menu.secondary.link"/>
+                -->
+            </div>
+            <t t-call="Menu.secondary.submenu"/>
         </t>
     </div>
 </t>
-<t t-name="Menu.secondary.children">
-    <t t-set="level" t-value="level + 1"/>
-    <a href="#" t-att-id="menu.children.length ? 'menu_' + menu.id : undefined"
-        t-att-class="classname + (menu.children.length ? ' submenu' : ' leaf') + (menu_first and level == 1 ? ' opened' : '')"
-        t-att-data-menu="menu.children.length ? undefined : menu.id">
-        <span t-attf-style="padding-left: #{(level - 2) * 20}px"> <t t-esc="menu.name"/></span>
+<t t-name="Menu.secondary.submenu">
+    <ul t-if="menu.children.length" class="oe_secondary_submenu">
+        <li t-foreach="menu.children" t-as="menu">
+            <t t-call="Menu.secondary.link"/>
+            <!--<span class="oe_menu_label">8</span>-->
+            <t t-call="Menu.secondary.submenu"/>
+        </li>
+    </ul>
+</t>
+<t t-name="Menu.secondary.link">
+    <a href="#"
+        t-att-class="menu.children.length ? 'oe_menu_toggler' : 'oe_menu_leaf'"
+        t-att-data-menu="menu.id"
+        t-att-data-action-model="menu.action ? menu.action.split(',')[0] : ''"
+        t-att-data-action-id="menu.action ? menu.action.split(',')[1] : ''">
+        <t t-esc="menu.name"/>
     </a>
-    <div t-attf-class="oe_secondary_submenu" t-if="menu.children.length" t-att-style="menu_first and level == 1 ? undefined : 'display: none'">
-        <t t-foreach="menu.children" t-as="menu">
-            <t t-set="classname">oe_secondary_submenu_item</t>
-            <t t-call="Menu.secondary.children"/>
-        </t>
-    </div>
 </t>
+
+<t t-name="UserMenu">
+    <ul class="oe_user_menu oe_topbar_item">
+        <li class="oe_dropdown">
+            <a href="#" class="oe_dropdown_toggle">
+                <img class="oe_topbar_avatar" t-att-data-default-src="_s + '/web/static/src/img/topbar-avatar.png'"/>
+                <span class="oe_topbar_name"/>
+            </a>
+            <ul class="oe_dropdown_options">
+                <!--<li><a href="#" data-menu="profile">Profile</a></li>-->
+                <li><a href="#" data-menu="settings">Settings</a></li>
+                <li><a href="#" data-menu="logout">Log out</a></li>
+                <li><hr/></li>
+                <li><a href="#" data-menu="about">About OpenERP</a></li>
+                <li><hr/></li>
+            </ul>
+        </li>
+    </ul>
+</t>
+<t t-name="UserMenu.shortcut">
+    <li t-foreach="shortcuts" t-as="shortcut">
+        <a href="#" data-menu="shortcut" t-att-data-id="shortcut.res_id" t-att-data-shortcut-id="shortcut.id">
+            <t t-esc="shortcut.name"/>
+        </a>
+    </li>
+</t>
+
 <t t-name="ViewManager">
     <table class="view-manager-main-table" cellpadding="0" cellspacing="0">
     <tbody>
                 <div class="oe_vm_switch">
                     <t t-if="views.length != 1" t-foreach="views" t-as="view">
 
-                        <button type="button" t-attf-class="oe_vm_switch_#{view.view_type}" t-att-data-view-type="view.view_type" t-att-title="view.view_type">
+                        <button type="button" t-attf-class="oe_vm_switch_#{view.view_type}" t-att-data-view-type="view.view_type" t-att-title="view.label || view.view_type">
                             <span><t t-esc="view.label || view.view_type"/></span>
                         </button>
                     </t>
         <option t-if="view_manager.searchview" value="edit" data-model="ir.ui.view" t-att-data-id="view_manager.searchview.view_id">Edit SearchView</option>
         <option t-if="view_manager.action" value="edit" t-att-data-model="view_manager.action.type" t-att-data-id="view_manager.action.id">Edit Action</option>
         <option value="edit_workflow">Edit Workflow</option>
-        <option value="customize_object">Customize Object</option>
     </t>
 </t>
 <t t-name="ViewManagerDebugViewLog">
     </div>
 </t>
 <t t-name="Sidebar.section.items">
-            <li t-foreach="items" t-as="item" t-att-class="item.classname">
-                <a class="oe_sidebar_action_a" t-att-id="item.element_id" t-att-title="item.title" href="#">
-                    <t t-esc="item.label"/>
-                </a>
-            </li>
+    <li t-foreach="items" t-as="item" t-att-class="item.classname">
+        <a class="oe_sidebar_action_a" t-att-id="item.element_id" t-att-title="item.title" href="#">
+            <t t-esc="item.label"/>
+        </a>
+    </li>
 </t>
 
 <t t-name="TranslateDialog">
         t-att-data-id="record.id" t-att-data-level="level + 1">
     <t t-set="children" t-value="record[children_field]"/>
     <t t-set="class" t-value="children and children.length ? 'treeview-tr' : 'treeview-td'"/>
+    <t t-set="rank" t-value="'oe-treeview-first'"/>
     <t t-set="style" t-value="'background-position: ' + 19*level + 'px; padding-left: ' + 19*level + 'px;'"/>
 
     <td t-foreach="fields_view" t-as="field"
         t-if="!field.attrs.modifiers.tree_invisible"
         t-att-data-id="record.id"
         t-att-style="color_for(record) + style "
-        t-att-class="(fields[field.attrs.name].type === 'float') or (fields[field.attrs.name].type === 'integer')
-                    ? (class +' ' +'oe-number') : class">
+        t-attf-class="#{class} #{rank} #{(fields[field.attrs.name].type === 'float') or (fields[field.attrs.name].type === 'integer') ? 'oe-number' : ''}">
 
         <span t-if="!field.attrs.modifiers.invisible" >
             <t t-esc="render(record[field.attrs.name], fields[field.attrs.name])" />
         </span>
 
         <t t-set="class" t-value="'treeview-td'"/>
+        <t t-set="rank" t-value="''"/>
         <t t-set="style" t-value="''"/>
     </td>
 </tr>
     </td>
 </tr>
 <t t-name="ListView.row.form">
-    <t t-raw="frame.render()"/>
+    <th t-if="widget.editable_list.options.selectable"></th>
+    <th t-if="widget.editable_list.options.isClarkGable"></th>
 </t>
 
 <t t-name="FormView">
-    <div class="oe_form_header">
-        <div class="oe_form_buttons" t-if="widget.options.action_buttons !== false">
-            <button type="button" class="oe_button oe_form_button_save">Save</button>
-            <button type="button" class="oe_button oe_form_button_cancel">Cancel</button>
-        </div>
-        <div class="oe_form_pager" t-if="widget.options.pager !== false">
-            <t t-call="ViewPager">
-                <span class="oe_pager_index">0</span><span class="oe_pager_separator"> / </span><span class="oe_pager_count">0</span>
-            </t>
+    <div class="oe_formview">
+        <div class="oe_form_header">
+            <div class="oe_form_buttons" t-if="widget.options.action_buttons !== false">
+                <button type="button" class="oe_button oe_form_button_save">Save</button>
+                <button type="button" class="oe_button oe_form_button_cancel">Cancel</button>
+            </div>
+            <div class="oe_form_pager" t-if="widget.options.pager !== false">
+                <t t-call="ViewPager">
+                    <span class="oe_pager_index">0</span><span class="oe_pager_separator"> / </span><span class="oe_pager_count">0</span>
+                </t>
+            </div>
         </div>
+        <div class="oe_form_content"/>
     </div>
-    <t t-raw="frame.render()"/>
 </t>
 <t t-name="One2Many.formview" t-extend="FormView">
     <t t-jquery=".oe_form_buttons" t-operation="inner">
         </li>
     </ul>
 </t>
-<t t-name="Widget">
-    Unhandled widget
-    <t t-js="dict">console.warn('Unhandled widget', dict.widget);</t>
-</t>
-<t t-name="WidgetFrame">
-    <table border="0" width="100%" cellpadding="0" cellspacing="0" class="oe_frame oe_forms">
-    <tr t-foreach="widget.table" t-as="row">
-        <t t-foreach="row" t-as="td">
-            <td t-att-colspan="td.colspan gt 1 ? td.colspan : undefined"
-                t-att-width="td.width"
-                t-att-valign="td.table ? 'top' : undefined"
-                t-attf-class="oe_form_frame_cell #{td.classname} #{td.element_class}"
-            >
-                <t t-raw="td.render()"/>
+<form t-name="FormView.set_default" class="oe_forms oe_frame">
+    <t t-set="args" t-value="widget.dialog_options.args"/>
+    <table style="width: 100%">
+        <tr>
+            <td>
+                <label for="formview_default_fields"
+                       class="oe_label oe_align_right">
+                    Default:
+                </label>
             </td>
-        </t>
-    </tr>
+            <td class="required">
+                <select id="formview_default_fields">
+                    <option value=""/>
+                    <option t-foreach="args.fields" t-as="field"
+                            t-att-value="field.name">
+                        <t t-esc="field.string"/> = <t t-esc="field.displayed"/>
+                    </option>
+                </select>
+            </td>
+        </tr>
+        <tr t-if="args.conditions.length">
+            <td>
+                <label for="formview_default_conditions"
+                       class="oe_label oe_align_right">
+                    Condition:
+                </label>
+            </td>
+            <td>
+                <select id="formview_default_conditions">
+                    <option value=""/>
+                    <option t-foreach="args.conditions" t-as="cond"
+                            t-att-value="cond.name + '=' + cond.value">
+                        <t t-esc="cond.string"/>=<t t-esc="cond.displayed"/>
+                    </option>
+                </select>
+            </td>
+        </tr>
+        <tr>
+            <td colspan="2">
+                <input type="radio" id="formview_default_self"
+                       value="self" name="scope" checked="checked"/>
+                <label for="formview_default_self" class="oe_label"
+                       style="display: inline;">
+                    Only you
+                </label>
+                <br/>
+                <input type="radio" id="formview_default_all"
+                       value="all" name="scope"/>
+                <label for="formview_default_all" class="oe_label"
+                       style="display: inline;">
+                    All users
+                </label>
+            </td>
+        </tr>
     </table>
-</t>
-<t t-name="WidgetFrame.readonly" t-extend="WidgetFrame">
-    <t t-jquery="&gt;table">
-        this.attr('class', this.attr('class')+' oe_form_readonly');
-    </t>
-</t>
-<t t-name="WidgetGroup">
-    <t t-if="widget.string">
-    <fieldset class="oe_group_box">
-        <legend><t t-esc="widget.string"/></legend>
-        <t t-call="WidgetFrame"/>
-    </fieldset>
+</form>
+
+<t t-name="FormRenderingGroup">
+    <t t-set="table">
+        <table border="0" cellpadding="0" cellspacing="0" width="100%"/>
     </t>
-    <t t-if="!widget.string">
-        <t t-call="WidgetFrame"/>
+    <t t-if="string">
+        <fieldset class="oe_group_box">
+            <legend><t t-esc="string"/></legend>
+            <t t-raw="table"/>
+        </fieldset>
     </t>
-</t>
-<t t-name="WidgetNotebook">
-    <ul>
-        <li t-foreach="widget.pages" t-as="page">
-            <a href="#">
-                <t t-esc="page.string"/>
-            </a>
-        </li>
-    </ul>
-    <t t-foreach="widget.pages" t-as="page">
-        <t t-raw="page.render()"/>
+    <t t-if="!string">
+        <t t-raw="table"/>
     </t>
 </t>
-<t t-name="WidgetNotebook.tooltip">
-    <t t-foreach="widget.pages" t-as="page">
-        <div class="oe_tooltip_string">
-            Notebook Page "<t t-esc="page.string"/>"
-        </div>
-        <ul class="oe_tooltip_technical">
-            <li data-item="modifiers">
-                <span class="oe_tooltip_technical_title">Modifiers:</span>
-                <t t-esc="page.node.attrs.modifiers"/>
+<t t-name="FormRenderingNotebook">
+    <div class="oe_form_notebook">
+        <ul>
+            <li t-foreach="pages" t-as="page">
+                <a t-attf-href="##{page.id}">
+                    <t t-esc="page.string"/>
+                </a>
             </li>
         </ul>
-    </t>
-</t>
-<t t-name="WidgetNotebookPage">
-    <div>
-        <t t-call="WidgetFrame"/>
     </div>
 </t>
-<t t-name="WidgetSeparator">
-    <div t-if="widget.orientation !== 'vertical'" t-att-class="'separator ' + widget.orientation">
-        <t t-esc="widget.string"/>
+<t t-name="FormRenderingNotebookPage">
+    <div class="oe_form_notebook_page" t-att-id="id"/>
+</t>
+<t t-name="FormRenderingSeparator">
+    <div class="oe_horizontal_separator">
+        <t t-esc="string"/>
     </div>
 </t>
-<t t-name="WidgetLabel">
-    <label t-att-for="widget.element_id"
-           t-attf-class="oe_label#{widget.help ? '_help' : ''} oe_align_#{widget.align}">
-        <t t-esc="widget.string"/>
-        <span t-if="widget.help">?</span>
-        <t t-if="widget.string and widget.node.tag != 'label'">:</t>
+<t t-name="FormRenderingLabel">
+    <label  t-att-for="for"
+            t-att-title="help"
+            t-attf-class="oe_label#{help ? '_help' : ''} oe_align_#{align}">
+        <t t-esc="string"/>
+        <span t-if="help">?</span>
+        :
     </label>
 </t>
+
+<t t-name="Widget">
+    Unhandled widget
+    <t t-js="dict">console.warn('Unhandled widget', dict.widget);</t>
+</t>
 <t t-name="WidgetLabel.tooltip">
     <div class="oe_tooltip_string" t-if="widget.string">
-        <t t-esc="widget.string"/> <t t-if="debug and widget.nolabel">(nolabel)</t>
+        <t t-esc="widget.node.attrs.string"/> <t t-if="debug and widget.nolabel">(nolabel)</t>
     </div>
     <p t-if="widget.help" class="oe_tooltip_help"><t t-esc="widget.help"/></p>
     <ul t-if="debug" class="oe_tooltip_technical">
             <span class="oe_tooltip_technical_title">Modifiers:</span>
             <t t-esc="widget.node.attrs.modifiers"/>
         </li>
+        <li t-if="widget.field and widget.field.change_default" data-item="change_default">
+            <span class="oe_tooltip_technical_title">Change default:</span>
+            Yes
+        </li>
         <li t-if="widget.node.attrs.on_change" data-item="on_change">
             <span class="oe_tooltip_technical_title">On change:</span>
             <t t-esc="widget.node.attrs.on_change"/>
         </li>
     </ul>
 </t>
-<t t-name="WidgetParagraph">
-    <p t-attf-class="oe_form_paragraph oe_align_#{widget.align}"><t t-esc="widget.string"/></p>
-</t>
 <t t-name="FieldChar">
-    <input t-att-type="widget.password ? 'password' : 'text'" size="1"
-        t-att-name="widget.name"
-        t-att-id="widget.element_id"
-        t-attf-class="field_#{widget.type} #{_(['integer', 'float', 'float_time']).contains(widget.type) ? 'oe-number' : ''}"
-        style="width: 100%"
-    /><img class="oe_field_translate oe_input_icon" t-if="widget.field.translate" t-att-src='_s + "/web/static/src/img/icons/terp-translate.png"' width="16" height="16" border="0"/>
+    <div t-attf-class="oe_form_field_#{type}">
+        <input t-att-type="widget.password ? 'password' : 'text'" size="1"
+            t-att-name="widget.name"
+            t-att-id="widget.node.attrs.id"
+            t-attf-class="field_#{widget.type} #{_(['integer', 'float', 'float_time']).contains(widget.type) ? 'oe-number' : ''}"
+            style="width: 100%"
+        /><img class="oe_field_translate oe_input_icon" t-if="widget.field.translate" t-att-src='_s + "/web/static/src/img/icons/terp-translate.png"' width="16" height="16" border="0"/>
+    </div>
 </t>
 <t t-name="FieldChar.readonly">
     <div
 </t>
 <t t-name="FieldURI.readonly">
     <div>
-        <a href="#" class="oe_form_uri">#</a>
+        <a href="#" class="oe_form_uri"/>
     </div>
 </t>
 <t t-name="FieldEmail">
-    <table cellpadding="0" cellspacing="0" border="0" width="100%">
+    <table t-attf-class="oe_form_field_#{type}" cellpadding="0" cellspacing="0" border="0" width="100%">
     <tr>
         <td width="100%">
             <t t-call="FieldChar"/>
     </table>
 </t>
 <t t-name="FieldUrl">
-    <table cellpadding="0" cellspacing="0" border="0" width="100%">
+    <table t-attf-class="oe_form_field_#{type}" cellpadding="0" cellspacing="0" border="0" width="100%">
     <tr>
         <td width="100%">
             <t t-call="FieldChar"/>
     </table>
 </t>
 <t t-name="FieldText">
-    <textarea rows="6"
-        t-att-name="widget.name"
-        t-att-id="widget.element_id"
-        t-attf-class="field_#{widget.type}"
-        style="width: 100%"
-    ></textarea><img class="oe_field_translate oe_input_icon" t-if="widget.field.translate" t-att-src='_s + "/web/static/src/img/icons/terp-translate.png"' width="16" height="16" border="0"/>
+    <div t-attf-class="oe_form_field_#{type}">
+        <textarea rows="6"
+            t-att-name="widget.name"
+            t-attf-class="field_#{widget.type}"
+            style="width: 100%"
+        ></textarea><img class="oe_field_translate oe_input_icon" t-if="widget.field.translate" t-att-src='_s + "/web/static/src/img/icons/terp-translate.png"' width="16" height="16" border="0"/>
+    </div>
 </t>
 <t t-name="web.datetimepicker">
-    <div class="oe_datepicker_root">
+    <div class="oe_datepicker_root" t-attf-class="oe_form_field_#{type}">
         <input type="text" size="1" class="oe_datepicker_container" disabled="disabled" style="display: none;"/>
         <input type="text" size="1" style="width: 100%"
             t-att-name="widget.name"
     </div>
 </t>
 <t t-name="FieldSelection">
-    <select
-        t-att-name="widget.name"
-        t-att-id="widget.element_id"
-        t-attf-class="field_#{widget.type}"
-        style="width: 100%">
-            <t t-foreach="widget.values" t-as="option">
-                <option><t t-esc="option[1]"/></option>
-            </t>
-    </select>
+    <div t-attf-class="oe_form_field_#{type}">
+        <select
+            t-att-name="widget.name"
+            t-att-id="widget.node.attrs.id"
+            style="width: 100%">
+                <t t-foreach="widget.values" t-as="option">
+                    <option><t t-esc="option[1]"/></option>
+                </t>
+        </select>
+    </div>
 </t>
 <t t-name="FieldMany2One">
-    <table cellpadding="0" cellspacing="0" border="0" width="100%">
+    <table t-attf-class="oe_form_field_#{type}" cellpadding="0" cellspacing="0" border="0" width="100%">
     <tr>
         <td width="100%" valign="top">
             <t t-call="FieldChar"/>
     </tr>
     </table>
 </t>
+<t t-name="FieldMany2One_readonly">
+   <a href="#" class="oe_form_uri"/>
+</t>
 <t t-name="FieldMany2One.context_menu">
     <ul>
         <li t-att-id="widget.cm_id + '_open'" style="color:grey" class="oe_m2o_menu_item_mandatory">Open...</li>
 <t t-name="FieldOne2Many">
 </t>
 <t t-name="FieldMany2Many">
-    <div t-att-id="widget.list_id"></div>
+    <div t-attf-class="oe_form_field_#{type}" t-att-id="widget.list_id"></div>
 </t>
 <t t-name="FieldReference">
-    <table border="0" width="100%" cellpadding="0" cellspacing="0" class="oe_frame oe_forms">
+    <table t-attf-class="oe_form_field_#{type}" border="0" width="100%" cellpadding="0" cellspacing="0" class="oe_frame oe_forms">
     <tr>
-        <td t-attf-class="oe_form_frame_cell oe_form_selection #{widget.selection.element_class}">
-            <t t-raw="widget.selection.render()"/>
+        <td t-attf-class="oe_form_frame_cell oe_form_selection oe_form_view_reference_selection">
         </td>
-        <td t-attf-class="oe_form_frame_cell oe_form_many2one #{widget.m2o.element_class}" nowrap="true" style="display: none">
-            <t t-raw="widget.m2o.render()"/>
+        <td t-attf-class="oe_form_frame_cell oe_form_many2one oe_form_view_reference_m2o" nowrap="true" style="display: none">
         </td>
     </tr>
     </table>
 </t>
 <t t-name="FieldBoolean">
-    <input type="checkbox"
-        t-att-name="widget.name"
-        t-att-id="widget.element_id"
-        t-attf-class="field_#{widget.type}"/>
+    <div t-attf-class="oe_form_field_#{type}">
+        <input type="checkbox"
+            t-att-name="widget.name"
+            t-attf-class="field_#{widget.type}"/>
+    </div>
 </t>
 <t t-name="FieldProgressBar">
-    <div t-opentag="true" class="oe-progressbar">
+    <div t-attf-class="oe_form_field_#{type}" t-opentag="true">
         <span></span>
     </div>
 </t>
 <t t-name="FieldBinaryImage">
-    <table cellpadding="0" cellspacing="0" border="0">
+    <table t-attf-class="oe_form_field_#{type}" cellpadding="0" cellspacing="0" border="0">
     <tr>
         <td align="center">
             <img t-att-src='_s + "/web/static/src/img/placeholder.png"' class="oe-binary-image"
     </table>
 </t>
 <t t-name="FieldBinaryFile">
-    <table cellpadding="0" cellspacing="0" border="0" width="100%">
+    <table t-attf-class="oe_form_field_#{type}" cellpadding="0" cellspacing="0" border="0" width="100%">
     <tr>
         <td width="100%">
             <input type="text" size="1" readonly="readonly"
     </table>
 </t>
 <t t-name="WidgetButton">
-    <button type="button" class="oe_button">
-        <img t-if="widget.node.attrs.icon" t-att-src="_s + '/web/static/src/img/icons/' + widget.node.attrs.icon + '.png'" width="16" height="16"/>
-        <span t-if="widget.string"><t t-esc="widget.string"/></span>
-    </button>
+    <div t-attf-class="oe_form_field_#{type}">
+        <button type="button" class="oe_button">
+            <img t-if="widget.node.attrs.icon" t-att-src="_s + '/web/static/src/img/icons/' + widget.node.attrs.icon + '.png'" width="16" height="16"/>
+            <span t-if="widget.string"><t t-esc="widget.string"/></span>
+        </button>
+    </div>
 </t>
 <t t-name="WidgetButton.tooltip" t-extend="WidgetLabel.tooltip">
     <t t-jquery="div.oe_tooltip_string" t-operation="replace">
     <option class="oe-filters-title" value="">Filters</option>
     <optgroup label="-- Filters --">
         <t t-foreach="filters" t-as="filter">
-            <option t-attf-value="get:#{filter_index}"><t t-esc="filter.name"/></option>
+            <option t-attf-value="get:#{filter_index}"
+                    t-att-disabled="filter.disabled and 'disabled'"
+                    t-att-title="filter.disabled and disabled_filter_message">
+                <t t-esc="filter.name"/>
+            </option>
         </t>
     </optgroup>
     <optgroup label="-- Actions --">
         <span t-if="attrs.help">?</span>
     </label>
     <div t-att-style="style">
-        <span t-att-id="element_id"></span>
+        <span t-att-id="element_id"/>
         <t t-if="filters.length" t-raw="filters.render(defaults)"/>
     </div>
 </t>
         <td t-if="edited and !options.deletable" class="oe-listview-padding"/>
     </t>
 </t>
-<t t-name="ListView.row.frame" t-extend="WidgetFrame">
-    <t t-jquery="tr">
-        $(document.createElement('t'))
-            .append(this.contents())
-            .attr({
-                't-foreach': this.attr('t-foreach'),
-                't-as': this.attr('t-as')
-            })
-            .replaceAll(this)
-            .after($(document.createElement('td')).append(
-                $(document.createElement('button')).attr({
-                    'class': 'oe-edit-row-save', 'type': 'button'})
-                  .html(' ')))
-            .unwrap();
+<t t-name="ListView.row.frame">
+    <t t-foreach="widget.table" t-as="row">
+        <t t-foreach="row" t-as="td">
+            <td t-att-colspan="td.colspan gt 1 ? td.colspan : undefined"
+                t-att-valign="td.table ? 'top' : undefined"
+                t-attf-class="oe_form_frame_cell #{td.classname} #{td.element_class} oe-field-cell"
+            >
+                <t t-raw="td.render()"/>
+            </td>
+        </t>
     </t>
+    <td>
+        <button class="oe-edit-row-save" type="button"> </button>
+    </td>
 </t>
 <t t-name="view_editor">
     <table class="oe_view_editor">
             <tr class="oe_export_row">
                 <t t-foreach="(field.id).split('/')" t-as="level" >
                     <t t-if="(field.id).split('/')[0] != level">
-                        <td width="18">&amp;nbsp;</td>
+                        <td width="18" t-translation="off">&amp;nbsp;</td>
                     </t>
                 </t>
                 <td valign="top" align="left" style="cursor: pointer;" width="18">