From 5f5abc44617537aee9e4071d005e6f08d4f2a5ea Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 16 Mar 2012 13:23:31 +0100 Subject: [PATCH] [imp] made selection readonly-able bzr revid: nicolas.vanhoren@openerp.com-20120316122331-ewfto4tzutt87t2h --- addons/web/static/src/js/view_form.js | 36 ++++++++++++++++++++------- addons/web/static/src/js/view_page.js | 24 ------------------ addons/web/static/src/xml/base.xml | 28 +++++++++++++-------- 3 files changed, 45 insertions(+), 43 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 76303a69492..c14a59ab616 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -1808,6 +1808,15 @@ openerp.web.form.FieldSelection = openerp.web.form.AbstractField.extend({ this.values.unshift([false, '']); }, start: function() { + this._super.apply(this, arguments); + this.bind_events(); + this.on("change:effective_readonly", this, function() { + this.render_element(); + this.bind_events(); + this.render_value(); + }); + }, + bind_events: function() { // Flag indicating whether we're in an event chain containing a change // event on the select, in order to know what to do on keyup[RETURN]: // * If the user presses [RETURN] as part of changing the value of a @@ -1820,7 +1829,6 @@ openerp.web.form.FieldSelection = openerp.web.form.AbstractField.extend({ // changing the selected value), takes the action as validating the // row var ischanging = false; - this._super.apply(this, arguments); this.$element.find('select') .change(this.on_ui_change) .change(function () { ischanging = true; }) @@ -1835,21 +1843,31 @@ openerp.web.form.FieldSelection = openerp.web.form.AbstractField.extend({ value = value === null ? false : value; value = value instanceof Array ? value[0] : value; this._super(value); - var index = 0; - for (var i = 0, ii = this.values.length; i < ii; i++) { - if (this.values[i][0] === value) index = i; + this.render_value(); + }, + render_value: function() { + if (!this.get("effective_readonly")) { + var index = 0; + for (var i = 0, ii = this.values.length; i < ii; i++) { + if (this.values[i][0] === this.value) index = i; + } + this.$element.find('select')[0].selectedIndex = index; + } else { + var self = this; + var option = _(this.values) + .detect(function (record) { return record[0] === self.value; }); + this.$element.text(option ? option[1] : this.values[0][1]); } - this.$element.find('select')[0].selectedIndex = index; }, set_value_from_ui: function() { this.value = this.values[this.$element.find('select')[0].selectedIndex][0]; this._super(); }, - update_dom: function() { - this._super.apply(this, arguments); - this.$element.find('select').prop('disabled', this.readonly); - }, validate: function() { + if (this.get("effective_readonly")) { + this.invalid = false; + return; + } var value = this.values[this.$element.find('select')[0].selectedIndex]; this.invalid = !(value && !(this.required && value[0] === false)); }, diff --git a/addons/web/static/src/js/view_page.js b/addons/web/static/src/js/view_page.js index 4665c15ca05..4a7264ab1c8 100644 --- a/addons/web/static/src/js/view_page.js +++ b/addons/web/static/src/js/view_page.js @@ -68,29 +68,6 @@ openerp.web.page = function (openerp) { /** @namespace */ openerp.web.page = {}; - openerp.web.page.FieldSelectionReadonly = openerp.web.form.AbstractField.extend({ - form_template: 'FieldChar.readonly', - init: function(view, node) { - // lifted straight from r/w version - var self = this; - this._super(view, node); - this.values = _.clone(this.field.selection); - _.each(this.values, function(v, i) { - if (v[0] === false && v[1] === '') { - self.values.splice(i, 1); - } - }); - this.values.unshift([false, '']); - }, - set_value: function (value) { - value = value === null ? false : value; - value = value instanceof Array ? value[0] : value; - var option = _(this.values) - .detect(function (record) { return record[0] === value; }); - this._super(value); - this.$element.find('div').text(option ? option[1] : this.values[0][1]); - } - }); openerp.web.page.FieldReferenceReadonly = openerp.web.form.FieldMany2One.extend({ set_value: function (value) { if (!value) { @@ -144,7 +121,6 @@ openerp.web.page = function (openerp) { } }); openerp.web.page.readonly = openerp.web.form.widgets.extend({ - 'selection' : 'openerp.web.page.FieldSelectionReadonly', 'reference': 'openerp.web.page.FieldReferenceReadonly', 'binary': 'openerp.web.page.FieldBinaryFileReadonly', 'image': 'openerp.web.page.FieldBinaryImageReaonly', diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index c63394ee0dd..31dc699e4e6 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1022,16 +1022,24 @@ -
- -
+ +
+ +
+
+ +
+
+