[imp] disable buttons in form views during the execution of its action
bzr revid: nicolas.vanhoren@openerp.com-20110930161506-bbffc4gjdt43pbvn
This commit is contained in:
parent
c3d08fa5dd
commit
ea79880c3c
|
@ -862,6 +862,7 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({
|
|||
template: 'WidgetButton',
|
||||
init: function(view, node) {
|
||||
this._super(view, node);
|
||||
this.force_disabled = false;
|
||||
if (this.string) {
|
||||
// We don't have button key bindings in the webclient
|
||||
this.string = this.string.replace(/_/g, '');
|
||||
|
@ -876,43 +877,60 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({
|
|||
this.$element.find("button").click(this.on_click);
|
||||
},
|
||||
on_click: function() {
|
||||
var self = this;
|
||||
this.force_disabled = true;
|
||||
this.check_disable();
|
||||
this.execute_action().always(function() {
|
||||
self.force_disabled = false;
|
||||
self.check_disable();
|
||||
});
|
||||
},
|
||||
execute_action: function() {
|
||||
var self = this;
|
||||
var exec_action = function() {
|
||||
if (self.node.attrs.confirm) {
|
||||
var def = $.Deferred();
|
||||
var dialog = $('<div>' + self.node.attrs.confirm + '</div>').dialog({
|
||||
title: 'Confirm',
|
||||
modal: true,
|
||||
buttons: {
|
||||
Ok: function() {
|
||||
self.on_confirmed();
|
||||
self.on_confirmed().then(function() {
|
||||
def.resolve();
|
||||
});
|
||||
$(self).dialog("close");
|
||||
},
|
||||
Cancel: function() {
|
||||
def.resolve();
|
||||
$(self).dialog("close");
|
||||
}
|
||||
}
|
||||
});
|
||||
return def.promise();
|
||||
} else {
|
||||
self.on_confirmed();
|
||||
return self.on_confirmed();
|
||||
}
|
||||
};
|
||||
if ((!this.node.attrs.special && this.view.dirty_for_user) || !this.view.datarecord.id) {
|
||||
this.view.recursive_save().then(exec_action);
|
||||
return this.view.recursive_save().pipe(exec_action);
|
||||
} else {
|
||||
exec_action();
|
||||
return exec_action();
|
||||
}
|
||||
},
|
||||
on_confirmed: function() {
|
||||
var self = this;
|
||||
|
||||
this.view.do_execute_action(
|
||||
return this.view.do_execute_action(
|
||||
this.node.attrs, this.view.dataset, this.view.datarecord.id, function () {
|
||||
self.view.reload();
|
||||
});
|
||||
},
|
||||
update_dom: function() {
|
||||
this._super();
|
||||
if (!this.view.is_interactible_record()) {
|
||||
this.check_disable();
|
||||
},
|
||||
check_disable: function() {
|
||||
if (this.force_disabled || !this.view.is_interactible_record()) {
|
||||
this.$element.find("button").attr("disabled", "disabled");
|
||||
this.$element.find("button").css("color", "grey");
|
||||
} else {
|
||||
|
|
|
@ -86,7 +86,7 @@ db.web.ActionManager = db.web.Widget.extend({
|
|||
console.log("Action manager can't handle action of type " + action.type, action);
|
||||
return;
|
||||
}
|
||||
this[type](action, on_close);
|
||||
return this[type](action, on_close);
|
||||
},
|
||||
ir_actions_act_window: function (action, on_close) {
|
||||
if (action.target === 'new') {
|
||||
|
@ -470,7 +470,7 @@ db.web.ViewManagerAction = db.web.ViewManager.extend(/** @lends oepnerp.web.View
|
|||
* Intercept do_action resolution from children views
|
||||
*/
|
||||
on_action_executed: function () {
|
||||
new db.web.DataSet(this, 'res.log')
|
||||
return new db.web.DataSet(this, 'res.log')
|
||||
.call('get', [], this.do_display_log);
|
||||
},
|
||||
/**
|
||||
|
@ -770,31 +770,31 @@ db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{
|
|||
var self = this;
|
||||
var result_handler = function () {
|
||||
if (on_closed) { on_closed.apply(null, arguments); }
|
||||
self.widget_parent.on_action_executed.apply(null, arguments);
|
||||
return self.widget_parent.on_action_executed.apply(null, arguments);
|
||||
};
|
||||
var handler = function (r) {
|
||||
var action = r.result;
|
||||
if (action && action.constructor == Object) {
|
||||
self.rpc('/web/session/eval_domain_and_context', {
|
||||
return self.rpc('/web/session/eval_domain_and_context', {
|
||||
contexts: [dataset.get_context(), action.context || {}, {
|
||||
active_id: record_id || false,
|
||||
active_ids: [record_id || false],
|
||||
active_model: dataset.model
|
||||
}],
|
||||
domains: []
|
||||
}, function (results) {
|
||||
}).pipe(function (results) {
|
||||
action.context = results.context
|
||||
self.do_action(action, result_handler);
|
||||
return self.do_action(action, result_handler);
|
||||
});
|
||||
} else {
|
||||
result_handler();
|
||||
return result_handler();
|
||||
}
|
||||
};
|
||||
|
||||
var context = new db.web.CompoundContext(dataset.get_context(), action_data.context || {});
|
||||
|
||||
if (action_data.special) {
|
||||
handler({result: {"type":"ir.actions.act_window_close"}});
|
||||
return handler({result: {"type":"ir.actions.act_window_close"}});
|
||||
} else if (action_data.type=="object") {
|
||||
return dataset.call_button(action_data.name, [[record_id], context], handler);
|
||||
} else if (action_data.type=="action") {
|
||||
|
|
Loading…
Reference in New Issue