[imp] changes in readonly for fields: now is a property
bzr revid: nicolas.vanhoren@openerp.com-20120315164326-5uzq176owgn8x8gg
This commit is contained in:
parent
99f956a533
commit
cc48043fd2
|
@ -52,6 +52,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
|
||||||
this.mutating_mutex = new $.Mutex();
|
this.mutating_mutex = new $.Mutex();
|
||||||
this.on_change_mutex = new $.Mutex();
|
this.on_change_mutex = new $.Mutex();
|
||||||
this.reload_mutex = new $.Mutex();
|
this.reload_mutex = new $.Mutex();
|
||||||
|
this.set({"force_readonly": false});
|
||||||
},
|
},
|
||||||
start: function() {
|
start: function() {
|
||||||
this._super();
|
this._super();
|
||||||
|
@ -1201,17 +1202,36 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface implemented by the form view or any other object
|
||||||
|
* able to provide the features necessary for the fields to work.
|
||||||
|
*
|
||||||
|
* Properties:
|
||||||
|
* - force_readonly: boolean, When it is true, all the fields should always appear
|
||||||
|
* in read only mode, no matter what the value of their "readonly" property can be.
|
||||||
|
*/
|
||||||
|
|
||||||
|
openerp.web.form.FieldManagerInterface = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface to be implemented by fields.
|
* Interface to be implemented by fields.
|
||||||
*
|
*
|
||||||
* Novajs Attributes:
|
* Properties:
|
||||||
* - ...
|
* - readonly: boolean. If set to true the field should appear in readonly mode.
|
||||||
*
|
*
|
||||||
* Novajs Events:
|
* Events:
|
||||||
* - ...
|
* - ...
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
openerp.web.form.FieldInterface = {
|
openerp.web.form.FieldInterface = {
|
||||||
|
/**
|
||||||
|
* Constructor takes 2 arguments:
|
||||||
|
* - field_manager: Implements FieldManagerInterface
|
||||||
|
* - node: the "<field>" node in json form
|
||||||
|
*/
|
||||||
|
init: function(field_manager, node) {},
|
||||||
/**
|
/**
|
||||||
* Called by the form view to indicate the value of the field.
|
* Called by the form view to indicate the value of the field.
|
||||||
*
|
*
|
||||||
|
@ -1252,26 +1272,43 @@ openerp.web.form.FieldInterface = {
|
||||||
/**
|
/**
|
||||||
* Abstract class for classes implementing FieldInterface. Should be renamed to AbstractField some
|
* Abstract class for classes implementing FieldInterface. Should be renamed to AbstractField some
|
||||||
* day.
|
* day.
|
||||||
|
*
|
||||||
|
* Properties:
|
||||||
|
* - effective_readonly: when it is true, the widget is displayed as readonly. Vary depending
|
||||||
|
* the values of the "readonly" property and the "force_readonly" property on the field manager.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
openerp.web.form.Field = openerp.web.form.Widget.extend(/** @lends openerp.web.form.Field# */{
|
openerp.web.form.Field = openerp.web.form.Widget.extend(/** @lends openerp.web.form.Field# */{
|
||||||
/**
|
/**
|
||||||
* @constructs openerp.web.form.Field
|
* @constructs openerp.web.form.Field
|
||||||
* @extends openerp.web.form.Widget
|
* @extends openerp.web.form.Widget
|
||||||
*
|
*
|
||||||
* @param view
|
* @param field_manager
|
||||||
* @param node
|
* @param node
|
||||||
*/
|
*/
|
||||||
init: function(view, node) {
|
init: function(field_manager, node) {
|
||||||
this._super(view, node);
|
this._super(field_manager, node);
|
||||||
this.name = this.node.attrs.name;
|
this.name = this.node.attrs.name;
|
||||||
this.value = undefined;
|
this.value = undefined;
|
||||||
view.fields[this.name] = this;
|
this.view.fields[this.name] = this;
|
||||||
view.fields_order.push(this.name);
|
this.view.fields_order.push(this.name);
|
||||||
this.type = this.node.attrs.widget;
|
this.type = this.node.attrs.widget;
|
||||||
this.field = view.fields_view.fields[this.name] || {};
|
this.field = this.view.fields_view.fields[this.name] || {};
|
||||||
this.readonly = this.modifiers['readonly'] === true;
|
|
||||||
this.required = this.modifiers['required'] === true;
|
this.required = this.modifiers['required'] === true;
|
||||||
this.invalid = this.dirty = false;
|
this.invalid = this.dirty = false;
|
||||||
|
|
||||||
|
// because I'm lazy to refactor right now
|
||||||
|
this.on("change:readonly", this, function() {this.readonly = this.get("readonly");});
|
||||||
|
|
||||||
|
// some events to make the property "effective_readonly" sync automatically with "readonly" and
|
||||||
|
// "force_readonly"
|
||||||
|
this.set({"readonly": this.modifiers['readonly'] === true});
|
||||||
|
var test_effective_readonly = function() {
|
||||||
|
this.set({"effective_readonly": this.get("readonly") || this.view.get("force_readonly")});
|
||||||
|
};
|
||||||
|
this.view.on("change:readonly", this, test_effective_readonly);
|
||||||
|
this.view.on("change:force_readonly", this, test_effective_readonly);
|
||||||
|
_.bind(test_effective_readonly, this)();
|
||||||
},
|
},
|
||||||
start: function() {
|
start: function() {
|
||||||
this._super.apply(this, arguments);
|
this._super.apply(this, arguments);
|
||||||
|
@ -1322,6 +1359,8 @@ openerp.web.form.Field = openerp.web.form.Widget.extend(/** @lends openerp.web.f
|
||||||
this.$element.toggleClass('invalid', !this.is_valid());
|
this.$element.toggleClass('invalid', !this.is_valid());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// one more shit code to avoid refactoring this.readonly right now
|
||||||
|
this.set({"readonly": this.readonly});
|
||||||
},
|
},
|
||||||
on_ui_change: function() {
|
on_ui_change: function() {
|
||||||
this.dirty = true;
|
this.dirty = true;
|
||||||
|
@ -1795,15 +1834,16 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({
|
||||||
template: 'EmptyComponent',
|
template: 'EmptyComponent',
|
||||||
init: function(view, node) {
|
init: function(view, node) {
|
||||||
this._super(view, node);
|
this._super(view, node);
|
||||||
this.previous_readonly = this.is_readonly();
|
|
||||||
this.limit = 7;
|
this.limit = 7;
|
||||||
this.value = null;
|
this.value = null;
|
||||||
this.cm_id = _.uniqueId('m2o_cm_');
|
this.cm_id = _.uniqueId('m2o_cm_');
|
||||||
this.last_search = [];
|
this.last_search = [];
|
||||||
this.tmp_value = undefined;
|
this.tmp_value = undefined;
|
||||||
},
|
this.on("change:effective_readonly", this, function(origin, event) {
|
||||||
is_readonly: function() {
|
if (event.oldValue !== event.newValue) {
|
||||||
return this.readonly || this.force_readonly;
|
this.render_content();
|
||||||
|
}
|
||||||
|
});
|
||||||
},
|
},
|
||||||
start: function() {
|
start: function() {
|
||||||
this._super();
|
this._super();
|
||||||
|
@ -1811,7 +1851,7 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({
|
||||||
},
|
},
|
||||||
render_content: function() {
|
render_content: function() {
|
||||||
this.$element.html("");
|
this.$element.html("");
|
||||||
if (!this.is_readonly())
|
if (!this.get("effective_readonly"))
|
||||||
this.render_editable();
|
this.render_editable();
|
||||||
else
|
else
|
||||||
this.render_readonly();
|
this.render_readonly();
|
||||||
|
@ -1836,12 +1876,12 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({
|
||||||
$cmenu.append(QWeb.render("FieldMany2One.context_menu", {widget: self}));
|
$cmenu.append(QWeb.render("FieldMany2One.context_menu", {widget: self}));
|
||||||
var bindings = {};
|
var bindings = {};
|
||||||
bindings[self.cm_id + "_search"] = function() {
|
bindings[self.cm_id + "_search"] = function() {
|
||||||
if (self.is_readonly())
|
if (self.get("effective_readonly"))
|
||||||
return;
|
return;
|
||||||
self._search_create_popup("search");
|
self._search_create_popup("search");
|
||||||
};
|
};
|
||||||
bindings[self.cm_id + "_create"] = function() {
|
bindings[self.cm_id + "_create"] = function() {
|
||||||
if (self.is_readonly())
|
if (self.get("effective_readonly"))
|
||||||
return;
|
return;
|
||||||
self._search_create_popup("form");
|
self._search_create_popup("form");
|
||||||
};
|
};
|
||||||
|
@ -1875,7 +1915,7 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({
|
||||||
} else {
|
} else {
|
||||||
$("#" + self.cm_id + " .oe_m2o_menu_item_mandatory").addClass("oe-m2o-disabled-cm");
|
$("#" + self.cm_id + " .oe_m2o_menu_item_mandatory").addClass("oe-m2o-disabled-cm");
|
||||||
}
|
}
|
||||||
if (!self.is_readonly()) {
|
if (!self.get("effective_readonly")) {
|
||||||
$("#" + self.cm_id + " .oe_m2o_menu_item_noreadonly").removeClass("oe-m2o-disabled-cm");
|
$("#" + self.cm_id + " .oe_m2o_menu_item_noreadonly").removeClass("oe-m2o-disabled-cm");
|
||||||
} else {
|
} else {
|
||||||
$("#" + self.cm_id + " .oe_m2o_menu_item_noreadonly").addClass("oe-m2o-disabled-cm");
|
$("#" + self.cm_id + " .oe_m2o_menu_item_noreadonly").addClass("oe-m2o-disabled-cm");
|
||||||
|
@ -1898,7 +1938,7 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.$drop_down.click(function() {
|
this.$drop_down.click(function() {
|
||||||
if (self.is_readonly())
|
if (self.get("effective_readonly"))
|
||||||
return;
|
return;
|
||||||
if (self.$input.autocomplete("widget").is(":visible")) {
|
if (self.$input.autocomplete("widget").is(":visible")) {
|
||||||
self.$input.autocomplete("close");
|
self.$input.autocomplete("close");
|
||||||
|
@ -2060,7 +2100,7 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({
|
||||||
},
|
},
|
||||||
render_value: function() {
|
render_value: function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
if (!this.is_readonly()) {
|
if (!this.get("effective_readonly")) {
|
||||||
this.$input.val(this.value ? this.value[1] : "");
|
this.$input.val(this.value ? this.value[1] : "");
|
||||||
} else {
|
} else {
|
||||||
self.$element.find('a')
|
self.$element.find('a')
|
||||||
|
@ -2156,9 +2196,6 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({
|
||||||
},
|
},
|
||||||
update_dom: function() {
|
update_dom: function() {
|
||||||
this._super.apply(this, arguments);
|
this._super.apply(this, arguments);
|
||||||
if (this.previous_readonly != this.is_readonly()) {
|
|
||||||
this.render_content();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
openerp.web.check_interface(openerp.web.form.FieldMany2One, openerp.web.form.FieldInterface);
|
openerp.web.check_interface(openerp.web.form.FieldMany2One, openerp.web.form.FieldInterface);
|
||||||
|
|
|
@ -9,6 +9,7 @@ openerp.web.page = function (openerp) {
|
||||||
init: function () {
|
init: function () {
|
||||||
this._super.apply(this, arguments);
|
this._super.apply(this, arguments);
|
||||||
this.registry = openerp.web.page.readonly;
|
this.registry = openerp.web.page.readonly;
|
||||||
|
this.set({"force_readonly": true});
|
||||||
},
|
},
|
||||||
reload: function () {
|
reload: function () {
|
||||||
if (this.dataset.index == null) {
|
if (this.dataset.index == null) {
|
||||||
|
@ -142,10 +143,7 @@ openerp.web.page = function (openerp) {
|
||||||
this.$element.find('div').text(option ? option[1] : this.values[0][1]);
|
this.$element.find('div').text(option ? option[1] : this.values[0][1]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
openerp.web.page.FieldMany2OneReadonly = openerp.web.form.FieldMany2One.extend({
|
openerp.web.page.FieldReferenceReadonly = openerp.web.form.FieldMany2One.extend({
|
||||||
force_readonly: true,
|
|
||||||
});
|
|
||||||
openerp.web.page.FieldReferenceReadonly = openerp.web.page.FieldMany2OneReadonly.extend({
|
|
||||||
set_value: function (value) {
|
set_value: function (value) {
|
||||||
if (!value) {
|
if (!value) {
|
||||||
return this._super(null);
|
return this._super(null);
|
||||||
|
@ -213,7 +211,6 @@ openerp.web.page = function (openerp) {
|
||||||
'date': 'openerp.web.page.FieldCharReadonly',
|
'date': 'openerp.web.page.FieldCharReadonly',
|
||||||
'datetime': 'openerp.web.page.FieldCharReadonly',
|
'datetime': 'openerp.web.page.FieldCharReadonly',
|
||||||
'selection' : 'openerp.web.page.FieldSelectionReadonly',
|
'selection' : 'openerp.web.page.FieldSelectionReadonly',
|
||||||
'many2one': 'openerp.web.page.FieldMany2OneReadonly',
|
|
||||||
'many2many' : 'openerp.web.page.FieldMany2ManyReadonly',
|
'many2many' : 'openerp.web.page.FieldMany2ManyReadonly',
|
||||||
'one2many' : 'openerp.web.page.FieldOne2ManyReadonly',
|
'one2many' : 'openerp.web.page.FieldOne2ManyReadonly',
|
||||||
'one2many_list' : 'openerp.web.page.FieldOne2ManyReadonly',
|
'one2many_list' : 'openerp.web.page.FieldOne2ManyReadonly',
|
||||||
|
|
Loading…
Reference in New Issue