From eed6a6e6412d971f2d408f249192842ec97017d1 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 10 Jun 2011 16:58:01 +0200 Subject: [PATCH] [imp] added validation and on_change bzr revid: nicolas.vanhoren@openerp.com-20110610145801-qq0t5vjx14ing2mf --- addons/base/static/src/css/base.css | 13 +++++-- addons/base/static/src/js/form.js | 59 ++++++++++++++++++----------- addons/base/static/src/xml/base.xml | 6 +-- 3 files changed, 48 insertions(+), 30 deletions(-) diff --git a/addons/base/static/src/css/base.css b/addons/base/static/src/css/base.css index 7fd8b287495..1c5ab90b073 100644 --- a/addons/base/static/src/css/base.css +++ b/addons/base/static/src/css/base.css @@ -1011,13 +1011,18 @@ background: linear-gradient(top, #ffffff 0%,#ebe9e9 100%); /* W3C */ border-color: #828282; } -.openerp .oe-m2m-drop-down-button { +.openerp .oe-m2o { + padding-right: 16px; + white-space: nowrap; +} + +.openerp .oe-m2o-drop-down-button { margin-left: -23px; } -.openerp .oe-m2m-drop-down-button img, -.openerp .oe-m2m-cm-button img { +.openerp .oe-m2o-drop-down-button img, +.openerp .oe-m2o-cm-button img { margin-bottom: -4px; } -.openerp .oe-m2m-disabled-cm { +.openerp .oe-m2o-disabled-cm { color: grey; } diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index 2dcde372413..32512a168db 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -1024,8 +1024,8 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ this._super(); var self = this; this.$input = this.$element.find("input"); - this.$drop_down = this.$element.find(".oe-m2m-drop-down-button"); - this.$menu_btn = this.$element.find(".oe-m2m-cm-button"); + this.$drop_down = this.$element.find(".oe-m2o-drop-down-button"); + this.$menu_btn = this.$element.find(".oe-m2o-cm-button"); // context menu var bindings = {}; @@ -1053,9 +1053,9 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ bindings: bindings, itemStyle: {"color": ""}, onContextMenu: function() { if(self.value) { - $("#" + self.cm_id + "_open").removeClass("oe-m2m-disabled-cm"); + $("#" + self.cm_id + "_open").removeClass("oe-m2o-disabled-cm"); } else { - $("#" + self.cm_id + "_open").addClass("oe-m2m-disabled-cm"); + $("#" + self.cm_id + "_open").addClass("oe-m2o-disabled-cm"); } return true; } @@ -1064,9 +1064,9 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ // some behavior for input this.$input.keyup(function() { if (self.$input.val() === "") { - self.value = null; + self._change_int_value(null); } else if (self.value === null || (self.value && self.$input.val() !== self.value[1])) { - self.value = undefined; + self._change_int_value(undefined); } }); this.$drop_down.click(function() { @@ -1086,11 +1086,10 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ !self.$input.autocomplete("widget").is(":visible") && !self.value) { if(self.value === undefined && self.last_search.length > 0) { - self.value = self.last_search[0]; + self._change_int_ext_value(self.last_search[0]); } else { - self.value = null; + self._change_int_ext_value(null); } - self.$input.val(self.value ? self.value[1] : ""); } } this.$input.focusout(anyoneLoosesFocus); @@ -1101,9 +1100,9 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ select: function(event, ui) { var item = ui.item; if (item.id) { - self.value = [item.id, item.name]; + self._change_int_value([item.id, item.name]); } else if (item.action) { - self.value = undefined; + self._change_int_value(undefined); item.action(); return false; } @@ -1136,7 +1135,7 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ values = values.slice(0, self.limit); values.push({label: "   Search More...", action: function() { dataset.name_search(search_val, false, function(data) { - self.value = null; + self._change_int_value(null); self._search_create_popup("search", data.result); }); }}); @@ -1144,12 +1143,12 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ if (self.value === undefined) { values.push({label: '   Create "' + $('').text(search_val).html() + '"', action: function() { - self.value = null; + this._change_int_value(null); self._search_create_popup("form"); }}); } values.push({label: "   Create and Edit...", action: function() { - self.value = null; + this._change_int_value(null); self._search_create_popup("form"); }}); @@ -1164,25 +1163,39 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({ pop.select_element(self.field.relation, ids ? _.map(ids, function(x) {return x[0]}) : undefined, view); pop.on_select_element.add(function(element_id) { dataset.call("name_get", [element_id], function(data) { - self.value = data.result[0]; - self.$input.val(self.value[1]); + this._change_int_ext_value(data.result); pop.stop(); }); }); }, - set_value: function(value) { - if (value != false) { - this.value = value; - this.$input.val(this.value[1]); + _change_int_ext_value: function(value) { + this._change_int_value(value); + this.$input.val(this.value ? this.value[1] : ""); + }, + _change_int_value: function(value) { + this.value = value; + if (this.value !== undefined && + ((this.original_value ? this.original_value[0] : null) !== (this.value ? this.value[0] : null))) { + this.on_ui_change(); } }, + set_value_from_ui: function() {}, + set_value: function(value) { + this._super(value); + this.original_value = value; + this._change_int_ext_value(value); + }, get_value: function() { if (this.value === undefined) throw "theorically unreachable state"; - return this.value ? this.value[0] : null; + return this.value ? this.value[0] : false; + }, + validate: function() { + this.invalid = false; + if (this.value === null) { + this.invalid = this.required; + } } - - //TODO niv: add validation }); openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({ diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index c973174f9ba..919a2115d9e 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -525,11 +525,11 @@ -
+
- + - +