[IMP] switching to form view selecting the correct record while in edition mode with a record being edited

bzr revid: xmo@openerp.com-20110607105557-izu1cm5udiqkktsg
This commit is contained in:
Xavier Morel 2011-06-07 12:55:57 +02:00
parent 8a7a64bcd1
commit 08f6d5d9ee
2 changed files with 37 additions and 7 deletions

View File

@ -8,10 +8,35 @@ openerp.base.list.editable = function (openerp) {
// editability status of list rows // editability status of list rows
openerp.base.ListView.prototype.defaults.editable = null; openerp.base.ListView.prototype.defaults.editable = null;
var old_actual_search = openerp.base.ListView.prototype.do_actual_search; var old_init = openerp.base.ListView.prototype.init,
var old_add_record = openerp.base.ListView.prototype.do_add_record; old_actual_search = openerp.base.ListView.prototype.do_actual_search,
var old_on_loaded = openerp.base.ListView.prototype.on_loaded; old_add_record = openerp.base.ListView.prototype.do_add_record,
_.extend(openerp.base.ListView.prototype, { old_on_loaded = openerp.base.ListView.prototype.on_loaded;
// TODO: not sure second @lends on existing item is correct, to check
_.extend(openerp.base.ListView.prototype, /** @lends openerp.base.ListView# */{
init: function () {
var self = this;
old_init.apply(this, arguments);
$(this.groups).bind({
'edit': function (e, id, dataset) {
self.do_edit(dataset.index, id, dataset);
}
})
},
/**
* Handles the activation of a record in editable mode (making a record
* editable), called *after* the record has become editable.
*
* The default behavior is to setup the listview's dataset to match
* whatever dataset was provided by the editing List
*
* @param {Number} index index of the record in the dataset
* @param {Object} id identifier of the record being edited
* @param {openerp.base.DataSet} dataset dataset in which the record is available
*/
do_edit: function (index, id, dataset) {
_.extend(this.dataset, dataset);
},
/** /**
* Sets editability status for the list, based on defaults, view * Sets editability status for the list, based on defaults, view
* architecture and the provided flag, if any. * architecture and the provided flag, if any.
@ -52,7 +77,8 @@ openerp.base.list.editable = function (openerp) {
} }
}); });
_.extend(openerp.base.ListView.Groups.prototype, { _.extend(openerp.base.ListView.Groups.prototype, /** @lends openerp.base.ListView.Groups# */{
passtrough_events: openerp.base.ListView.Groups.prototype.passtrough_events + " edit",
new_record: function () { new_record: function () {
// TODO: handle multiple children // TODO: handle multiple children
this.children[null].new_record(); this.children[null].new_record();
@ -60,7 +86,7 @@ openerp.base.list.editable = function (openerp) {
}); });
var old_list_row_clicked = openerp.base.ListView.List.prototype.row_clicked; var old_list_row_clicked = openerp.base.ListView.List.prototype.row_clicked;
_.extend(openerp.base.ListView.List.prototype, { _.extend(openerp.base.ListView.List.prototype, /** @lends openerp.base.ListView.List */{
row_clicked: function (event) { row_clicked: function (event) {
if (!this.options.editable) { if (!this.options.editable) {
return old_list_row_clicked.call(this, event); return old_list_row_clicked.call(this, event);
@ -169,6 +195,7 @@ openerp.base.list.editable = function (openerp) {
return; return;
} }
self.dataset.next(); self.dataset.next();
self.edit_record();
}); });
}, this.options.editable === 'top'); }, this.options.editable === 'top');
}, },
@ -186,6 +213,9 @@ openerp.base.list.editable = function (openerp) {
this.$current.children( this.$current.children(
_.sprintf('[data-index=%d]', _.sprintf('[data-index=%d]',
this.dataset.index))); this.dataset.index)));
$(this).trigger(
'edit',
[this.rows[this.dataset.index].data.id.value, this.dataset]);
}, },
new_record: function () { new_record: function () {
this.dataset.index = null; this.dataset.index = null;

View File

@ -392,7 +392,7 @@ openerp.base.ListView = openerp.base.View.extend( /** @lends openerp.base.ListVi
* *
* @param {Number} index index of the record in the dataset * @param {Number} index index of the record in the dataset
* @param {Object} id identifier of the activated record * @param {Object} id identifier of the activated record
* @param {openobject.base.DataSet} dataset dataset in which the record is available (may not be the listview's dataset in case of nested groups) * @param {openerp.base.DataSet} dataset dataset in which the record is available (may not be the listview's dataset in case of nested groups)
*/ */
do_activate_record: function (index, id, dataset) { do_activate_record: function (index, id, dataset) {
var self = this; var self = this;