[IMP] Visually indicate that the form is dirty
authorFabien Meghazi <fme@openerp.com>
Mon, 30 Jan 2012 14:07:25 +0000 (15:07 +0100)
committerFabien Meghazi <fme@openerp.com>
Mon, 30 Jan 2012 14:07:25 +0000 (15:07 +0100)
Need refactoring or o2m changes in order to fully support this feature

lp bug: https://launchpad.net/bugs/899053 fixed

bzr revid: fme@openerp.com-20120130140725-2boxsrs2s7u31tup

addons/web/static/src/css/base.css
addons/web/static/src/js/view_form.js
addons/web/static/src/xml/base.xml

index f2c3593..a599927 100644 (file)
@@ -1164,7 +1164,19 @@ label.error {
 
 
 /* Form */
-
+.openerp .oe_form_button_save_dirty {
+    display: none;
+}
+.openerp .oe_form_dirty > .oe_form_header > .oe_form_buttons > .oe_form_button_save {
+    font-weight: bold;
+}
+.openerp .oe_form_dirty > .oe_form_header > .oe_form_buttons > .oe_form_button_save > .oe_form_button_save_dirty {
+    display: inline;
+    font-weight: bold;
+    font-size: 80%;
+    position: relative;
+    bottom: 0.4em;
+}
 .openerp .oe_form_frame_cell input[type="checkbox"] {
     margin-top: 3px;
     vertical-align: middle;
index 206da19..d84a10c 100644 (file)
@@ -199,9 +199,13 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
             if (record.id) {
                 self.do_push_state({id:record.id});
             }
+            self.$element.removeClass('oe_form_dirty');
         });
     },
-    on_form_changed: function() {
+    on_form_changed: function(changed_by_user) {
+        if (changed_by_user) {
+            this.$element.addClass('oe_form_dirty');
+        }
         for (var w in this.widgets) {
             w = this.widgets[w];
             w.process_modifiers();
@@ -1269,7 +1273,7 @@ openerp.web.form.Field = openerp.web.form.Widget.extend(/** @lends openerp.web.f
         if (this.is_valid()) {
             this.set_value_from_ui();
             this.view.do_onchange(this);
-            this.view.on_form_changed();
+            this.view.on_form_changed(true);
         } else {
             this.update_dom(true);
         }
index d7f08b6..f8de697 100644 (file)
 <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_save">
+                Save
+                <span class="oe_form_button_save_dirty">(*)</span>
+            </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">