this.webclient = parent;
this.dialog = null;
this.dialog_widget = null;
- this.view_managers = [];
+ this.widgets = [];
this.on('history_back', this, this.proxy('history_back'));
},
dialog_stop: function (reason) {
this.dialog = null;
},
/**
- * Add a new item to the breadcrumb
+ * Add a new widget to the action manager
*
- * If the title of an item is an array, the multiple title mode is in use.
- * (eg: a widget with multiple views might need to display a title for each view)
- * In multiple title mode, the show() callback can check the index it receives
- * in order to detect which of its titles has been clicked on by the user.
- *
- * @param {Object} item breadcrumb item
- * @param {Object} item.widget widget containing the view(s) to be added to the breadcrumb added
- * @param {Function} [item.show] triggered whenever the widget should be shown back
- * @param {Function} [item.hide] triggered whenever the widget should be shown hidden
- * @param {Function} [item.destroy] triggered whenever the widget should be destroyed
- * @param {String|Array} [item.title] title(s) of the view(s) to be displayed in the breadcrumb
- * @param {Function} [item.get_title] should return the title(s) of the view(s) to be displayed in the breadcrumb
+ * widget: typically, widgets added are instance.web.ViewManager. The action manager
+ * uses this list of widget to handle the breadcrumbs.
+ * action: new action
+ * clear_breadcrumbs: boolean, if true, current widgets are destroyed
*/
- push_view_manager: function(widget, action, clear_breadcrumbs) {
+ push_widget: function(widget, action, clear_breadcrumbs) {
var self = this,
old_widget = this.inner_widget;
if (clear_breadcrumbs) {
- var to_destroy = this.view_managers;
- this.view_managers = [];
+ var to_destroy = this.widgets;
+ this.widgets = [];
}
if (widget instanceof instance.web.ViewManager) {
- this.view_managers.push(widget);
+ this.widgets.push(widget);
} else {
- this.view_managers.push({
+ this.widgets.push({
view_stack: [{
controller: {get: function () {return action.display_name || action.name; }},
}],
(action.target !== 'inline') && (!action.flags.headless) && widget.$header && widget.$header.show();
old_widget && old_widget.$el.hide();
if (clear_breadcrumbs) {
- self.clear_view_managers(to_destroy)
+ self.clear_widgets(to_destroy)
}
});
},
get_breadcrumbs: function () {
- return _.flatten(_.map(this.view_managers, function (vm) {
+ return _.flatten(_.map(this.widgets, function (vm) {
return vm.view_stack.map(function (view, index) {
return {
title: view.controller.get('title') || vm.title,
}), true);
},
history_back: function() {
- var view_manager = _.last(this.view_managers),
- nbr_views = view_manager.view_stack.length;
+ var widget = _.last(this.widgets),
+ nbr_views = widget.view_stack.length;
if (nbr_views > 1) {
- this.select_view_manager(view_manager, nbr_views - 2);
- } else if (this.view_managers.length > 1) {
- view_manager = this.view_managers[this.view_managers.length -2];
- nbr_views = view_manager.view_stack.length;
- this.select_view(view_managers, nbr_views - 2)
+ this.select_widget(widget, nbr_views - 2);
+ } else if (this.widgets.length > 1) {
+ widget = this.widgets[this.widgets.length -2];
+ nbr_views = widget.view_stack.length;
+ this.select_view(widgets, nbr_views - 2)
}
},
- select_view_manager: function(view_manager, index) {
+ select_widget: function(widget, index) {
var self = this;
if (this.webclient.has_uncommitted_changes()) {
return false;
}
- var vm_index = this.view_managers.indexOf(view_manager);
- if (view_manager.select_view) {
- view_manager.select_view(index).done(function () {
- _.each(self.view_managers.splice(vm_index + 1), function (vm) {
+ var vm_index = this.widgets.indexOf(widget);
+ if (widget.select_view) {
+ widget.select_view(index).done(function () {
+ _.each(self.widgets.splice(vm_index + 1), function (vm) {
vm.destroy();
});
- self.inner_widget = _.last(self.view_managers);
+ self.inner_widget = _.last(self.widgets);
self.inner_widget.display_breadcrumbs();
self.inner_widget.$el.show();
});
}
},
- clear_view_managers: function(vms) {
- _.each(vms || this.view_managers, function (vm) {
+ clear_widgets: function(vms) {
+ _.each(vms || this.widgets, function (vm) {
vm.destroy();
});
if (!vms) {
- this.view_managers = [];
+ this.widgets = [];
this.inner_widget = null;
}
},
},
null_action: function() {
this.dialog_stop();
- this.clear_view_managers();
+ this.clear_widgets();
},
/**
*
}
widget = executor.widget();
this.dialog_stop(executor.action);
- return this.push_view_manager(widget, executor.action, options.clear_breadcrumbs);
+ return this.push_widget(widget, executor.action, options.clear_breadcrumbs);
},
ir_actions_act_window: function (action, options) {
var self = this;
var $breadcrumbs = _.map(_.initial(breadcrumbs), function (bc) {
var $link = $('<a>').text(bc.title);
$link.click(function () {
- self.action_manager.select_view_manager(bc.view_manager, bc.index);
+ self.action_manager.select_widget(bc.view_manager, bc.index);
});
return $('<li>').append($link);
});