From 17b09849fb6c4d54796bc7e953264315d8f16acf Mon Sep 17 00:00:00 2001 From: Fabien Meghazi Date: Thu, 5 Jul 2012 16:22:46 +0200 Subject: [PATCH 1/1] [WIP] Breakpoint commit. Gonna refactor everything bzr revid: fme@openerp.com-20120705142246-yelkx5eqxxzyf45i --- addons/web/static/src/js/views.js | 108 ++++++++++++++++++------------------ addons/web/static/src/xml/base.xml | 2 +- 2 files changed, 54 insertions(+), 56 deletions(-) diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index f4ec3d4..73dd900 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -166,34 +166,7 @@ instance.web.ActionManager = instance.web.Widget.extend({ var inner_viewmanager = this.inner_viewmanager = new instance.web.ViewManagerAction(this, action); this.inner_viewmanager.appendTo(this.$element); this.inner_viewmanager.$element.addClass("oe_view_manager_" + action.target); - - this.breadcrumb.push({ - widget: inner_viewmanager, - show: function() { - inner_viewmanager.$element.show(); - inner_viewmanager.on_mode_switch(action.view_mode.split(',')[0]); - }, - action: action, - title: action.name - }); - inner_viewmanager.on_mode_switch.add_first(function(mode) { - if (mode === 'form' && !inner_viewmanager.views[mode].controller) { - self.breadcrumb.push({ - widget: inner_viewmanager, - show: function() { - inner_viewmanager.$element.show(); - inner_viewmanager.on_mode_switch('form'); - }, - action: action, - get_title: function() { - var form = inner_viewmanager.views['form'].controller; - if (form) { - return form.get('title'); - } - } - }); - } - }); + this.breadcrumb.push_actionmanager(inner_viewmanager); } }, ir_actions_act_window_close: function (action, on_closed) { @@ -219,7 +192,6 @@ instance.web.ActionManager = instance.web.Widget.extend({ (this.client_widget = new ClientWidget(this, action.params)).appendTo(this.$element); this.breadcrumb.push({ widget: this.client_widget, - action: action, title: action.name }); }, @@ -269,34 +241,62 @@ instance.web.BreadCrumb = instance.web.CallbackEnabled.extend({ } if (!item.hide) { item.hide = function() { - return item.widget.$element.hide(); + item.widget.$element.hide(); }; } if (!item.destroy) { item.destroy = function() { - return item.widget.destroy(); + item.widget.destroy(); }; } if (!item.get_title) { item.get_title = function() { - return item.title || item.action.name; + return item.title || item.widget.get('title'); }; } this.items.push(item); - console.log("BreadCrumb: add ", item); + }, + push_actionmanager: function(am) { + var self = this; + var bookmarked_view = am.active_view; + this.push({ + widget: am, + show: function() { + am.$element.show(); + am.on_mode_switch(current_view); + } + }); + am.on_mode_switch.add_first(function(mode) { + if (mode === 'form' && !am.views[mode].controller) { + self.push({ + widget: am, + show: function() { + am.$element.show(); + inner_viewmanager.on_mode_switch('form'); + }, + action: action, + get_title: function() { + var form = inner_viewmanager.views['form'].controller; + if (form) { + return form.get('title'); + } + } + }); + } + }); }, pop: function() { this.remove_item(this.items.length - 1); this.select_item(this.items.length - 1); }, + get_title: function() { + return QWeb.render('BreadCrumb', { widget: this }); + }, hide_items: function() { _.each(this.items, function(i) { i.hide(); }); }, - get_title: function() { - return QWeb.render('BreadCrumb', { widget: this }); - }, on_item_clicked: function(ev) { var $e = $(ev.target); var index = $e.data('index'); @@ -380,6 +380,14 @@ instance.web.ViewManager = instance.web.Widget.extend({ if (this.flags.views_switcher === false) { this.$element.find('.oe_view_manager_switch').hide(); } + this.on('change:title', this, function() { + var breadcrumb = self.getParent().breadcrumb; + if (breadcrumb) { + self.$element.find('.oe_view_title_text:first').html(breadcrumb.get_title()); + } else { + self.$element.find('.oe_view_title_text:first').text(self.get('title')); + } + }); // If no default view defined, switch to the first one in sequence var default_view = this.flags.default_view || this.views_src[0].view_type; return this.on_mode_switch(default_view); @@ -416,10 +424,16 @@ instance.web.ViewManager = instance.web.Widget.extend({ } } var controller = new controllerclass(this, this.dataset, view.view_id, options); + controller.on("change:title", this, function() { + if (self.active_view === view_type) { + self.set({ 'title' : controller.get('title') }); + } + }); if (view.embedded_view) { controller.set_embedded_view(view.embedded_view); } controller.do_switch_view.add_last(_.bind(this.switch_view, this)); + controller.do_prev_view.add_last(this.on_prev_view); var container = this.$element.find(".oe_view_manager_view_" + view_type); view_promise = controller.appendTo(container); @@ -463,9 +477,6 @@ instance.web.ViewManager = instance.web.Widget.extend({ } } }); - - self.$element.find('.oe_view_title_text:first').html( - self.display_title()); }); return view_promise; }, @@ -561,14 +572,6 @@ instance.web.ViewManager = instance.web.Widget.extend({ */ on_action_executed: function () { }, - display_title: function () { - var view = this.views[this.active_view]; - if (view) { - // ick - return view.controller.fields_view.arch.attrs.string; - } - return ''; - } }); instance.web.ViewManagerAction = instance.web.ViewManager.extend({ @@ -613,7 +616,7 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ if (this.session.hidden_menutips) { return; } - this.session.hidden_menutips = {} + this.session.hidden_menutips = {}; }, /** * Initializes the ViewManagerAction: sets up the searchview (if the @@ -816,13 +819,8 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ self.views[self.active_view].controller.do_load_state(state, warm); }); }, - display_title: function () { - var am = this.getParent(); - if (am) { - return am.breadcrumb.get_title(); - } else { - return _.escape(this.action.name); - } + set_title: function (title) { + this.getParent().breadcrumb.update(); } }); diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index b5b4c70..c81b00d 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -417,7 +417,7 @@

- +

-- 1.7.10.4