From 993c99a41449e508554c4e33342ef484020d8c31 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Mon, 19 Mar 2012 14:09:52 +0100 Subject: [PATCH] [imp] made reference readonly-able bzr revid: nicolas.vanhoren@openerp.com-20120319130952-k1921f9za3duezyn --- addons/web/static/src/js/view_form.js | 60 ++++++++++++++++++--------- addons/web/static/src/js/view_page.js | 26 ------------ addons/web/static/src/xml/base.xml | 23 ++++++---- 3 files changed, 55 insertions(+), 54 deletions(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index dfe09f32ef9..04cb93175f2 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -3158,7 +3158,7 @@ openerp.web.form.FormOpenDataset = openerp.web.ProxyDataSet.extend({ } }); -openerp.web.form.FieldReference = openerp.web.form.AbstractField.extend({ +openerp.web.form.FieldReference = openerp.web.form.AbstractField.extend(_.extend({}, openerp.web.form.ReinitializeFieldMixin, { template: 'FieldReference', init: function(view, node) { this._super(view, node); @@ -3181,17 +3181,7 @@ openerp.web.form.FieldReference = openerp.web.form.AbstractField.extend({ this.widgets = {}; this.fields = {}; this.fields_order = []; - this.selection = new openerp.web.form.FieldSelection(this, { attrs: { - name: 'selection', - widget: 'selection' - }}); this.reference_ready = true; - this.selection.on_value_changed.add_last(this.on_selection_changed); - this.m2o = new openerp.web.form.FieldMany2One(this, { attrs: { - name: 'm2o', - widget: 'many2one' - }}); - this.m2o.on_ui_change.add_last(this.on_ui_change); }, on_nop: function() { }, @@ -3205,10 +3195,37 @@ openerp.web.form.FieldReference = openerp.web.form.AbstractField.extend({ }, start: function() { this._super(); - // TODO: not niv compliant - this.selection.$element = $(".oe_form_view_reference_selection", this.$element); - this.selection.renderElement(); - this.selection.start(); + openerp.web.form.ReinitializeFieldMixin.start.call(this); + }, + renderElement: function() { + if (this.selection) { + this.selection.stop(); + this.selection = undefined; + } + if (this.m2o) { + this.m2o.stop(); + this.m2o.undefined; + } + this._super(); + }, + bind_events: function() { + if (!this.get("effective_readonly")) { + this.selection = new openerp.web.form.FieldSelection(this, { attrs: { + name: 'selection', + widget: 'selection' + }}); + this.selection.on_value_changed.add_last(this.on_selection_changed); + + this.selection.$element = $(".oe_form_view_reference_selection", this.$element); + this.selection.renderElement(); + this.selection.start(); + } + this.m2o = new openerp.web.form.FieldMany2One(this, { attrs: { + name: 'm2o', + widget: 'many2one' + }}); + this.m2o.set({"readonly": this.get("effective_readonly")}); + this.m2o.on_ui_change.add_last(this.on_ui_change); this.m2o.$element = $(".oe_form_view_reference_m2o", this.$element); this.m2o.renderElement(); this.m2o.start(); @@ -3221,14 +3238,19 @@ openerp.web.form.FieldReference = openerp.web.form.AbstractField.extend({ }, set_value: function(value) { this._super(value); + this.render_value(); + }, + render_value: function() { this.reference_ready = false; var vals = [], sel_val, m2o_val; - if (typeof(value) === 'string') { - vals = value.split(','); + if (typeof(this.value) === 'string') { + vals = this.value.split(','); } sel_val = vals[0] || false; m2o_val = vals[1] ? parseInt(vals[1], 10) : false; - this.selection.set_value(sel_val); + if (!this.get("effective_readonly")) { + this.selection.set_value(sel_val); + } this.m2o.field.relation = sel_val; this.m2o.set_value(m2o_val); this.m2o.$element.toggle(sel_val !== false); @@ -3243,7 +3265,7 @@ openerp.web.form.FieldReference = openerp.web.form.AbstractField.extend({ return false; } } -}); +})); openerp.web.form.FieldBinary = openerp.web.form.AbstractField.extend({ init: function(view, node) { diff --git a/addons/web/static/src/js/view_page.js b/addons/web/static/src/js/view_page.js index 4a7264ab1c8..419d616e135 100644 --- a/addons/web/static/src/js/view_page.js +++ b/addons/web/static/src/js/view_page.js @@ -67,31 +67,6 @@ openerp.web.page = function (openerp) { /** @namespace */ openerp.web.page = {}; - - openerp.web.page.FieldReferenceReadonly = openerp.web.form.FieldMany2One.extend({ - set_value: function (value) { - if (!value) { - return this._super(null); - } - var reference = value.split(','); - this.field.relation = reference[0]; - var id = parseInt(reference[1], 10); - return this._super(id); - }, - get_value: function () { - if (!this.value) { - return null; - } - var id; - if (typeof this.value === 'number') { - // name_get has not run yet - id = this.value; - } else { - id = this.value[0]; - } - return _.str.sprintf('%s,%d', this.field.relation, id); - } - }); openerp.web.page.FieldBinaryImageReaonly = openerp.web.form.FieldBinaryImage.extend({ update_dom: function() { @@ -121,7 +96,6 @@ openerp.web.page = function (openerp) { } }); openerp.web.page.readonly = openerp.web.form.widgets.extend({ - '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 a7c8d427440..5d8aa5c704b 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -1057,7 +1057,7 @@ - +
    @@ -1074,14 +1074,19 @@
- - - - - -
- -
+ + + + + + +
+ +
+
+ +
+