diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index c7fa9e2143a..c327aaf95c5 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -242,17 +242,17 @@ def load_actions_from_ir_values(req, key, key2, models, meta, context): Values = req.session.model('ir.values') actions = Values.get(key, key2, models, meta, context) - return [(id, name, clean_action(action, req.session)) + return [(id, name, clean_action(action, req.session, context=context)) for id, name, action in actions] -def clean_action(action, session): +def clean_action(action, session, context=None): if action['type'] != 'ir.actions.act_window': return action # values come from the server, we can just eval them if isinstance(action.get('context', None), basestring): action['context'] = eval( action['context'], - session.evaluation_context()) or {} + session.evaluation_context(context=context)) or {} if isinstance(action.get('domain', None), basestring): action['domain'] = eval( @@ -823,3 +823,9 @@ class TreeView(View): @openerpweb.jsonrequest def load(self, req, model, view_id, toolbar=False): return self.fields_view_get(req, model, view_id, 'tree', toolbar=toolbar) + + @openerpweb.jsonrequest + def action(self, req, model, id): + return load_actions_from_ir_values( + req,'action', 'tree_but_open',[(model, id)], + False, req.session.eval_context(req.context)) diff --git a/addons/base/static/src/js/tree.js b/addons/base/static/src/js/tree.js index 774dfbcc92b..980dee7d7ad 100644 --- a/addons/base/static/src/js/tree.js +++ b/addons/base/static/src/js/tree.js @@ -27,9 +27,6 @@ openerp.base.TreeView = openerp.base.View.extend({ this.view_manager.flags.search_view = this.view_manager.action.flags.search_view = false; this.view_manager.flags.sidebar = this.view_manager.action.flags.sidebar = false; - - this.actionmanager = new openerp.base.ActionManager(this.session, this.element_id); - this.actionmanager.start(); }, start: function () { @@ -108,6 +105,11 @@ openerp.base.TreeView = openerp.base.View.extend({ */ hook_row_click: function () { var self = this; + this.$element.delegate('.treeview-td span, .treeview-tr span', 'click', function (e) { + e.stopImmediatePropagation(); + self.activate($(this).closest('tr').data('id')); + }); + this.$element.delegate('.treeview-tr', 'click', function () { var is_loaded = 0, $this = $(this), @@ -157,48 +159,28 @@ openerp.base.TreeView = openerp.base.View.extend({ } else { self.$element.find('tbody').html(children_rows); } - - self.$element.find('tr[id ^= treerow_] td > :last-child').click( function(e) { - var row_id = $(this).parent().parent().attr('id'); - var record_id = row_id.split('_')[1]; - self.showrecord(record_id, self.model); - e.stopImmediatePropagation(); - }); }); }, // Get details in listview - showrecord: function(id, model){ - var self = this; - self.dataset.model = 'product.product'; - self.dataset.domain = [['categ_id', 'child_of', parseInt(id, 10)]]; - var modes = !!modes ? modes.split(",") : ["tree", "form"]; - var views = []; - _.each(modes, function(mode) { - var view = [false, mode == "tree" ? "list" : mode]; - if (self.fields.views && self.fields.views[mode]) { - view.push(self.fields.views[mode]); - } - views.push(view); + activate: function(id) { + var action_manager = new openerp.base.ActionManager( + this.session, this.element_id); + action_manager.start(); + this.rpc('/base/treeview/action', { + id: id, + model: this.dataset.model, + context: new openerp.base.CompoundContext( + this.dataset.get_context(), { + active_model: this.dataset.model, + active_id: id, + active_ids: [id]}) + }, function (actions) { + if (!actions.length) { return; } + var action = actions[0][2]; + action.flags.new_window = true; + action_manager.do_action(action); }); - this.actionmanager.do_action({ - "res_model" : self.dataset.model, - "domain" : self.dataset.domain, - "views" : views, - "type" : "ir.actions.act_window", - "auto_search" : true, - "view_mode" : "list", - "flags": { - search_view: true, - sidebar : true, - views_switcher : true, - action_buttons : true, - pager: true, - new_window : true - } - }); - - self.dataset.model = model; }, // show & hide the contents diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index 6e4a14dc8a2..13b3b09d380 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -257,7 +257,7 @@