[IMP] Added populate sidebar.

bzr revid: nicolas.vanhoren@openerp.com-20110404134705-rmzbxlobntfoblub
This commit is contained in:
niv-openerp 2011-04-04 15:47:05 +02:00
parent 63bf45372b
commit 19a8432167
7 changed files with 120 additions and 29 deletions

View File

@ -170,6 +170,24 @@ class Session(openerpweb.Controller):
'domain': domain,
'group_by': group_by_sequence
}
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)
for _, _, action in actions:
# values come from the server, we can just eval them
if isinstance(action['context'], basestring):
action['context'] = eval(
action['context'],
req.session.evaluation_context()) or {}
if isinstance(action['domain'], basestring):
action['domain'] = eval(
action['domain'],
req.session.evaluation_context(
action['context'])) or []
return actions
class Menu(openerpweb.Controller):
_cp_path = "/base/menu"
@ -214,21 +232,8 @@ class Menu(openerpweb.Controller):
@openerpweb.jsonrequest
def action(self, req, menu_id):
Values = req.session.model('ir.values')
actions = Values.get('action', 'tree_but_open', [('ir.ui.menu', menu_id)], False, {})
for _, _, action in actions:
# values come from the server, we can just eval them
if isinstance(action['context'], basestring):
action['context'] = eval(
action['context'],
req.session.evaluation_context()) or {}
if isinstance(action['domain'], basestring):
action['domain'] = eval(
action['domain'],
req.session.evaluation_context(
action['context'])) or []
actions = load_actions_from_ir_values(req,'action', 'tree_but_open',
[('ir.ui.menu', menu_id)], False, {})
return {"action": actions}
@ -438,6 +443,15 @@ class SearchView(View):
def load(self, req, model, view_id):
fields_view = self.fields_view_get(req.session, model, view_id, 'search')
return {'fields_view': fields_view}
class SideBar(View):
_cp_path = "/base/sidebar"
@openerpweb.jsonrequest
def get_actions(self, request, model, object_id=0):
result = load_actions_from_ir_values(request, "action", "client_action_multi",
[[model, object_id]], False, {})
return result
class Action(openerpweb.Controller):

View File

@ -431,3 +431,26 @@ body.openerp {
.openerp .ui-widget {
font-size: 1em;
}
/* Sidebar */
.openerp .view-manager-main-sidebar {
vertical-align: top;
}
.openerp .view-manager-main-sidebar .sidebar-main-div {
border: solid 1px #1F1F1F;
border-bottom-width: 0;
}
.openerp .view-manager-main-sidebar ul {
list-style-type: none;
margin: 0;
padding: 0;
width: 120px;
border-bottom: solid 1px #1F1F1F;
}
.openerp .view-manager-main-sidebar li {
padding: 3px;
}

View File

@ -2,8 +2,9 @@
openerp.base.form = function (openerp) {
openerp.base.FormView = openerp.base.Controller.extend({
init: function(session, element_id, dataset, view_id) {
init: function(view_manager, session, element_id, dataset, view_id) {
this._super(session, element_id);
this.view_manager;
this.dataset = dataset;
this.model = dataset.model;
this.view_id = view_id;

View File

@ -2,8 +2,9 @@
openerp.base.list = function (openerp) {
openerp.base.ListView = openerp.base.Controller.extend({
init: function(session, element_id, dataset, view_id) {
init: function(view_manager, session, element_id, dataset, view_id) {
this._super(session, element_id);
this.view_manager = view_manager;
this.dataset = dataset;
this.model = dataset.model;
this.view_id = view_id;
@ -62,6 +63,14 @@ openerp.base.ListView = openerp.base.Controller.extend({
self.$table.setGridWidth(self.$element.width());
self.$element.children().show();
}).trigger('resize');
// sidebar stuff
this.rpc("/base/sidebar/get_actions",
{"model": this.model}, function(result) {
self.view_manager.sidebar.sections.push({elements:
_.map(result, function(x) {return {text:x[2].name, action:x}; })});
self.view_manager.sidebar.refresh();
});
},
do_fill_table: function(records) {
this.log("do_fill_table");

View File

@ -1,8 +1,9 @@
openerp.base.search = function(openerp) {
openerp.base.SearchView = openerp.base.Controller.extend({
init: function(session, element_id, dataset, view_id, defaults) {
init: function(view_manager, session, element_id, dataset, view_id, defaults) {
this._super(session, element_id);
this.view_manager = view_manager;
this.dataset = dataset;
this.model = dataset.model;
this.view_id = view_id;
@ -382,8 +383,10 @@ openerp.base.search.ExtendedSearch = openerp.base.BaseWidget.extend({
var _this = this;
openerp.base.search.add_expand_listener(this.$element);
this.add_group();
this.$element.find('.searchview_extended_add_group').click(function () {
this.$element.find('.searchview_extended_add_group').click(function (e) {
_this.add_group();
e.stopPropagation();
e.preventDefault();
});
},
get_context: function() {
@ -415,12 +418,16 @@ openerp.base.search.ExtendedSearchGroup = openerp.base.BaseWidget.extend({
this._super();
var _this = this;
this.add_prop();
this.$element.find('.searchview_extended_add_proposition').click(function () {
this.$element.find('.searchview_extended_add_proposition').click(function (e) {
_this.add_prop();
e.stopPropagation();
e.preventDefault();
});
var delete_btn = this.$element.find('.searchview_extended_delete_group');
delete_btn.click(function (e) {
_this.stop();
e.stopPropagation();
e.preventDefault();
});
},
get_domain: function() {
@ -460,8 +467,10 @@ openerp.base.search.ExtendedSearchProposition = openerp.base.BaseWidget.extend({
_this.changed();
});
var delete_btn = this.$element.find('.searchview_extended_delete_prop');
delete_btn.click(function () {
delete_btn.click(function (e) {
_this.stop();
e.stopPropagation();
e.preventDefault();
});
},
changed: function() {
@ -582,9 +591,11 @@ openerp.base.search.Filter = openerp.base.search.Input.extend({
start: function () {
this._super();
var self = this;
this.$element.click(function () {
this.$element.click(function (e) {
$(this).toggleClass('enabled');
self.view.do_toggle_filter(self);
e.stopPropagation();
e.preventDefault();
});
},
/**

View File

@ -83,7 +83,7 @@ openerp.base.ViewManager = openerp.base.Controller.extend({
if(this.search_visible && action.search_view_id) {
this.searchview_id = action.search_view_id[0];
var searchview = this.searchview = new openerp.base.SearchView(
this.session, this.element_id + "_search",
this, this.session, this.element_id + "_search",
this.dataset, this.searchview_id,
this.search_defaults());
searchview.on_search.add(this.do_search);
@ -98,14 +98,14 @@ openerp.base.ViewManager = openerp.base.Controller.extend({
var view_id, controller;
view_id = action.views[i][0];
if(action.views[i][1] == "tree") {
controller = new openerp.base.ListView(this.session, this.element_id + "_view_tree", this.dataset, view_id);
controller = new openerp.base.ListView(this, this.session, this.element_id + "_view_tree", this.dataset, view_id);
controller.start();
this.views.tree = { view_id: view_id, controller: controller };
this.$element.find(prefix_id + "_button_tree").bind('click',function(){
self.on_mode_switch("tree");
});
} else if(action.views[i][1] == "form") {
controller = new openerp.base.FormView(this.session, this.element_id + "_view_form", this.dataset, view_id);
controller = new openerp.base.FormView(this, this.session, this.element_id + "_view_form", this.dataset, view_id);
controller.start();
this.views.form = { view_id: view_id, controller: controller };
this.$element.find(prefix_id + "_button_form").bind('click',function(){
@ -238,8 +238,28 @@ openerp.base.BaseWidget = openerp.base.Controller.extend({
});
openerp.base.Sidebar = openerp.base.BaseWidget.extend({
template: "ViewManager.sidebar"
template: "ViewManager.sidebar",
init: function(parent) {
this._super(parent);
this.sections = [];
},
refresh: function() {
this.$element.html(QWeb.render("ViewManager.sidebar.internal", this));
var self = this;
this.$element.find("a").click(function(e) {
$this = jQuery(this);
var i = $this.attr("data-i");
var j = $this.attr("data-i");
var action = self.sections[i].elements[j];
// TODO: do something with the action
e.stopPropagation();
e.preventDefault();
});
},
start: function() {
this._super();
this.refresh();
}
});
openerp.base.CalendarView = openerp.base.Controller.extend({

View File

@ -417,8 +417,21 @@
<input t-att-id="element_id"/>
</t>
<t t-name="ViewManager.sidebar">
<div t-att-id="element_id">
<div t-att-id="element_id" class="sidebar-main-div">
</div>
</t>
<t t-name="ViewManager.sidebar.internal">
<t t-set="i" t-value="0"/>
<t t-foreach="sections" t-as="section">
<ul>
<t t-set="j" t-value="0"/>
<t t-foreach="section.elements" t-as="element">
<li><a t-att-data-i="i" t-att-data-j="j" href="#"><t t-esc="element.text"/></a></li>
<t t-set="j+1" t-value="0"/>
</t>
</ul>
<t t-set="i" t-value="i+1"/>
</t>
</t>
</templates>