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 @@
-
-
-
+
+
+
+
+
+
+
+
+