bzr revid: nicolas.vanhoren@openerp.com-20110617084133-44dmezoisiyb0er8
This commit is contained in:
niv-openerp 2011-06-17 10:41:33 +02:00
commit 4205717d3a
9 changed files with 220 additions and 74 deletions

View File

@ -199,6 +199,8 @@ background: linear-gradient(top, #bd5e54 0%,#90322a 60%); /* W3C */
line-height: 20px; line-height: 20px;
font-weight: bold; font-weight: bold;
font-size: 85%; font-size: 85%;
white-space: nowrap;
} }
.openerp .menu a:hover, .openerp .menu a:hover,
.openerp .menu a:focus, .openerp .menu a:focus,
@ -696,6 +698,9 @@ background: linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,
.openerp td.oe_form_frame_cell { .openerp td.oe_form_frame_cell {
padding: 2px; padding: 2px;
} }
.openerp td.oe_form_frame_cell.oe_form_group {
padding: 0px;
}
.openerp .required.error { .openerp .required.error {
border: 1px solid #900; border: 1px solid #900;
} }
@ -712,7 +717,7 @@ background: linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,
.openerp label.oe_form_label, .openerp label.oe_form_label_help { .openerp label.oe_form_label, .openerp label.oe_form_label_help {
display: block; display: block;
text-align: right; text-align: right;
margin-top: 3px; margin: 3px 0 0 10px;
} }
.openerp label.oe_form_label_help span { .openerp label.oe_form_label_help span {
font-size: 80%; font-size: 80%;
@ -788,7 +793,8 @@ background: linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,
.openerp .separator.horizontal { .openerp .separator.horizontal {
font-weight: bold; font-weight: bold;
border-bottom-width: 1px; border-bottom-width: 1px;
margin: 6px 4px 6px 1px; margin: 3px 4px 3px 1px;
height: 15px;
} }
.openerp td.required input, .openerp td.required select { .openerp td.required input, .openerp td.required select {
background-color: #D2D2FF; background-color: #D2D2FF;

View File

@ -144,6 +144,9 @@ openerp.base = function(instance) {
if (openerp.base.form) { if (openerp.base.form) {
openerp.base.form(instance); openerp.base.form(instance);
} }
if (openerp.base.list && openerp.base.list.editable) {
openerp.base.list.editable(instance);
}
}; };
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: // vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:

View File

@ -737,6 +737,66 @@ openerp.base.BaseWidget = openerp.base.Controller.extend({
} }
}); });
openerp.base.Dialog = openerp.base.BaseWidget.extend({
dialog_title: "",
identifier_prefix: 'dialog',
init: function (session, options) {
this._super(null, session);
options = _.extend({
modal: true,
title: this.dialog_title,
width: '700px',
min_width: 0,
max_width: '100%',
height: '500px',
min_height: 0,
max_height: '100%',
buttons: {}
}, options);
options.width = this.get_width(options.width);
options.min_width = this.get_width(options.min_width);
options.max_width = this.get_width(options.max_width);
options.height = this.get_height(options.height);
options.min_height = this.get_height(options.min_height);
options.max_height = this.get_height(options.max_height);
if (options.width > options.max_width) options.width = options.max_width;
if (options.width < options.min_width) options.width = options.min_width;
if (options.height > options.max_height) options.height = options.max_height;
if (options.height < options.min_height) options.height = options.min_height;
for (var f in this) {
if (f.substr(0, 10) == 'on_button_') {
options.buttons[f.substr(10)] = this[f];
}
}
this.options = options;
},
get_width: function(val) {
return this.get_size(val.toString(), $(window.top).width());
},
get_height: function(val) {
return this.get_size(val.toString(), $(window.top).height());
},
get_size: function(val, available_size) {
if (val == 'auto') {
return val;
} else if (val.slice(-1) == "%") {
return Math.round(available_size / 100 * parseInt(val.slice(0, -1), 10));
} else {
return parseInt(val, 10);
}
},
start: function () {
this.$dialog = $('<div id="' + this.element_id + '"></div>').dialog(this.options);
this._super();
},
stop: function () {
this.$dialog("destroy").remove();
}
});
openerp.base.CrashManager = openerp.base.Controller.extend({ openerp.base.CrashManager = openerp.base.Controller.extend({
init: function(session, element_id) { init: function(session, element_id) {
this._super(session, element_id); this._super(session, element_id);

View File

@ -322,7 +322,7 @@ openerp.base.DataSet = openerp.base.Controller.extend( /** @lends openerp.base.
}, },
/** /**
* Arguments: * Arguments:
* name='', args=None, operator='ilike', context=None, limit=100 * name='', args=[], operator='ilike', context=None, limit=100
*/ */
name_search: function (args, callback, error_callback) { name_search: function (args, callback, error_callback) {
return this.call('name_search', return this.call('name_search',

View File

@ -32,7 +32,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
this.ready = false; this.ready = false;
this.show_invalid = true; this.show_invalid = true;
this.touched = false; this.touched = false;
this.flags = this.view_manager.action.flags || {}; this.flags = this.view_manager.flags || {};
this.registry = openerp.base.form.widgets; this.registry = openerp.base.form.widgets;
}, },
start: function() { start: function() {
@ -176,7 +176,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
return this.rpc(ajax, { return this.rpc(ajax, {
model: this.dataset.model, model: this.dataset.model,
method: method, method: method,
args: [].concat([(this.datarecord.id == null ? [] : [this.datarecord.id])], args) args: [(this.datarecord.id == null ? [] : [this.datarecord.id])].concat(args)
}, function(response) { }, function(response) {
self.on_processed_onchange(response, processed); self.on_processed_onchange(response, processed);
}); });
@ -1137,7 +1137,7 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
var dataset = new openerp.base.DataSetStatic(this.session, this.field.relation, []); var dataset = new openerp.base.DataSetStatic(this.session, this.field.relation, []);
dataset.name_search([search_val, self.field.domain || false, 'ilike', dataset.name_search([search_val, self.field.domain || [], 'ilike',
build_relation_context(self), this.limit + 1], function(data) { build_relation_context(self), this.limit + 1], function(data) {
self.last_search = data.result; self.last_search = data.result;
// possible selections for the m2o // possible selections for the m2o
@ -1149,7 +1149,7 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
if (values.length > self.limit) { if (values.length > self.limit) {
values = values.slice(0, self.limit); values = values.slice(0, self.limit);
values.push({label: "<em>   Search More...</em>", action: function() { values.push({label: "<em>   Search More...</em>", action: function() {
dataset.name_search([search_val, self.field.domain || false, 'ilike', dataset.name_search([search_val, self.field.domain || [], 'ilike',
build_relation_context(self), false], function(data) { build_relation_context(self), false], function(data) {
self._change_int_value(null); self._change_int_value(null);
self._search_create_popup("search", data.result); self._search_create_popup("search", data.result);
@ -1189,10 +1189,14 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
_search_create_popup: function(view, ids) { _search_create_popup: function(view, ids) {
var dataset = new openerp.base.DataSetStatic(this.session, this.field.relation, []); var dataset = new openerp.base.DataSetStatic(this.session, this.field.relation, []);
var self = this; var self = this;
var pop = new openerp.base.form.Many2XSelectPopup(null, self.view.session); var pop = new openerp.base.form.SelectCreatePopup(null, self.view.session);
pop.select_element(self.field.relation, ids ? _.map(ids, function(x) {return x[0]}) : undefined, view); pop.select_element(self.field.relation,{
pop.on_select_element.add(function(element_id) { initial_ids: ids ? _.map(ids, function(x) {return x[0]}) : undefined,
dataset.call("name_get", [element_id], function(data) { initial_view: view,
disable_multiple_selection: true
});
pop.on_select_elements.add(function(element_ids) {
dataset.call("name_get", [element_ids[0]], function(data) {
self._change_int_ext_value(data.result[0]); self._change_int_ext_value(data.result[0]);
pop.stop(); pop.stop();
}); });
@ -1243,29 +1247,38 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
this.dataset = new openerp.base.DataSetStatic(this.session, this.field.relation); this.dataset = new openerp.base.DataSetStatic(this.session, this.field.relation);
this.dataset.on_unlink.add_last(function(ids) { this.dataset.on_unlink.add_last(function(ids) {
// TODO niv check form view self.dataset.set_ids(_.without.apply(_, [self.dataset.ids].concat(ids)));
var view = self.viewmanager.views[self.viewmanager.active_view].controller;
view.reload_content();
// TODO niv make real suppression (list or direct)
self.on_ui_change(); self.on_ui_change();
self.reload_current_view();
}); });
var modes = this.node.attrs.mode; var modes = this.node.attrs.mode;
modes = !!modes ? modes.split(",") : ["tree", "form"]; modes = !!modes ? modes.split(",") : ["tree", "form"];
var views = []; var views = [];
_.each(modes, function(mode) { _.each(modes, function(mode) {
var view = [false, mode == "tree" ? "list" : mode]; var view = {view_id: false, view_type: mode == "tree" ? "list" : mode};
if (self.field.views && self.field.views[mode]) { if (self.field.views && self.field.views[mode]) {
view.push(self.field.views[mode]); view.embedded_view = self.field.views[mode];
}
if(view.view_type === "list") {
view.options = {
};
} }
views.push(view); views.push(view);
}); });
this.views = views;
this.viewmanager = new openerp.base.ViewManager(this.view.session, this.viewmanager = new openerp.base.ViewManager(this.view.session,
this.element_id, this.dataset, views); this.element_id, this.dataset, views);
var reg = new openerp.base.Registry();
reg.add("form", openerp.base.views.map["form"]);
reg.add("graph", openerp.base.views.map["graph"]);
reg.add("list", "openerp.base.form.One2ManyListView");
this.viewmanager.registry = reg;
this.viewmanager.on_controller_inited.add_last(function(view_type, controller) { this.viewmanager.on_controller_inited.add_last(function(view_type, controller) {
if (view_type == "list") { if (view_type == "list") {
// TODO niv controller.o2m = self;
} else if (view_type == "form") { } else if (view_type == "form") {
// TODO niv // TODO niv
} }
@ -1281,6 +1294,15 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
// TODO niv: handle other types of views // TODO niv: handle other types of views
}); });
}, },
reload_current_view: function() {
var self = this;
var view = self.viewmanager.views[self.viewmanager.active_view].controller;
if(self.viewmanager.active_view === "list") {
view.reload_content();
} else if (self.viewmanager.active_view === "form") {
// TODO niv: but fme did not implemented delete in form view anyway
}
},
set_value: function(value) { set_value: function(value) {
if(value != false) { if(value != false) {
this.dataset.set_ids(value); this.dataset.set_ids(value);
@ -1293,6 +1315,24 @@ openerp.base.form.FieldOne2Many = openerp.base.form.Field.extend({
} }
}); });
openerp.base.form.One2ManyListView = openerp.base.ListView.extend({
do_add_record: function () {
var self = this;
var pop = new openerp.base.form.SelectCreatePopup(null, self.o2m.view.session);
pop.select_element(self.o2m.field.relation,{
initial_view: "form",
alternative_form_view: self.o2m.field.views ? self.o2m.field.views["form"] : undefined
});
pop.on_select_elements.add(function(element_ids) {
var ids = self.o2m.dataset.ids;
_.each(element_ids, function(x) {if (!_.include(ids, x)) ids.push(x);});
self.o2m.dataset.set_ids(ids);
self.o2m.on_ui_change();
self.o2m.reload_current_view();
});
}
});
openerp.base.form.FieldMany2Many = openerp.base.form.Field.extend({ openerp.base.form.FieldMany2Many = openerp.base.form.Field.extend({
init: function(view, node) { init: function(view, node) {
this._super(view, node); this._super(view, node);
@ -1316,14 +1356,13 @@ openerp.base.form.FieldMany2Many = openerp.base.form.Field.extend({
this.list_view = new openerp.base.form.Many2ManyListView( this.list_view = new openerp.base.form.Many2ManyListView(
null, this.view.session, this.list_id, this.dataset, false, { null, this.view.session, this.list_id, this.dataset, false, {
'selectable': false,
'addable': 'Add' 'addable': 'Add'
}); });
this.list_view.m2m_field = this; this.list_view.m2m_field = this;
this.list_view.start();
this.list_view.on_loaded.add_last(function() { this.list_view.on_loaded.add_last(function() {
self.is_started.resolve(); self.is_started.resolve();
}); });
this.list_view.start();
$.when(this.is_started, this.is_setted).then(function() { $.when(this.is_started, this.is_setted).then(function() {
self.list_view.reload_content(); self.list_view.reload_content();
}); });
@ -1341,15 +1380,17 @@ openerp.base.form.FieldMany2Many = openerp.base.form.Field.extend({
openerp.base.form.Many2ManyListView = openerp.base.ListView.extend({ openerp.base.form.Many2ManyListView = openerp.base.ListView.extend({
do_add_record: function () { do_add_record: function () {
var pop = new openerp.base.form.Many2XSelectPopup( var pop = new openerp.base.form.SelectCreatePopup(
null, this.m2m_field.view.session); null, this.m2m_field.view.session);
pop.select_element(this.model); pop.select_element(this.model);
var self = this; var self = this;
pop.on_select_element.add(function(element_id) { pop.on_select_elements.add(function(element_ids) {
if(! _.detect(self.dataset.ids, function(x) {return x == element_id;})) { _.each(element_ids, function(element_id) {
self.dataset.set_ids([].concat(self.dataset.ids, [element_id])); if(! _.detect(self.dataset.ids, function(x) {return x == element_id;})) {
self.reload_content(); self.dataset.set_ids([].concat(self.dataset.ids, [element_id]));
} self.reload_content();
}
});
pop.stop(); pop.stop();
}); });
}, },
@ -1366,15 +1407,22 @@ openerp.base.form.Many2ManyListView = openerp.base.ListView.extend({
} }
}); });
openerp.base.form.Many2XSelectPopup = openerp.base.BaseWidget.extend({ openerp.base.form.SelectCreatePopup = openerp.base.BaseWidget.extend({
identifier_prefix: "many2xselectpopup", identifier_prefix: "selectcreatepopup",
template: "Many2XSelectPopup", template: "SelectCreatePopup",
select_element: function(model, initial_ids, initial_view, domain, context) { /**
* options:
* - initial_ids
* - initial_view: form or search (default search)
* - disable_multiple_selection
* - alternative_form_view
*/
select_element: function(model, options, domain, context) {
this.model = model; this.model = model;
this.initial_ids = initial_ids;
this.initial_view = initial_view || "search";
this.domain = domain; this.domain = domain;
this.context = context; this.context = context;
this.options = options || {};
this.initial_ids = this.options.initial_ids;
jQuery(this.render()).dialog({title: '', jQuery(this.render()).dialog({title: '',
modal: true, modal: true,
minWidth: 800}); minWidth: 800});
@ -1383,7 +1431,7 @@ openerp.base.form.Many2XSelectPopup = openerp.base.BaseWidget.extend({
start: function() { start: function() {
this._super(); this._super();
this.dataset = new openerp.base.DataSetSearch(this.session, this.model); this.dataset = new openerp.base.DataSetSearch(this.session, this.model);
if (this.initial_view == "search") { if ((this.options.initial_view || "search") == "search") {
this.setup_search_view(); this.setup_search_view();
} else { // "form" } else { // "form"
this.new_object(); this.new_object();
@ -1395,10 +1443,14 @@ openerp.base.form.Many2XSelectPopup = openerp.base.BaseWidget.extend({
this.searchview.stop(); this.searchview.stop();
} }
this.searchview = new openerp.base.SearchView(null, this.session, this.searchview = new openerp.base.SearchView(null, this.session,
this.element_id + "_search", this.dataset, false, {}); this.element_id + "_search", this.dataset, false, {
"selectable": !this.options.disable_multiple_selection,
"deletable": false
});
this.searchview.on_search.add(function(domains, contexts, groupbys) { this.searchview.on_search.add(function(domains, contexts, groupbys) {
if (self.initial_ids) { if (self.initial_ids) {
self.view_list.do_search.call(self, [[["id", "in", self.initial_ids]]], contexts, groupbys); self.view_list.do_search.call(self, [[["id", "in",
self.initial_ids]]], contexts, groupbys);
self.initial_ids = undefined; self.initial_ids = undefined;
} else { } else {
self.view_list.do_search.call(self, domains, contexts, groupbys); self.view_list.do_search.call(self, domains, contexts, groupbys);
@ -1406,15 +1458,18 @@ openerp.base.form.Many2XSelectPopup = openerp.base.BaseWidget.extend({
}); });
this.searchview.on_loaded.add_last(function () { this.searchview.on_loaded.add_last(function () {
var $buttons = self.searchview.$element.find(".oe_search-view-buttons"); var $buttons = self.searchview.$element.find(".oe_search-view-buttons");
$buttons.append(QWeb.render("Many2XSelectPopup.search.buttons")); $buttons.append(QWeb.render("SelectCreatePopup.search.buttons"));
var $nbutton = $buttons.find(".oe_many2xselectpopup-search-new"); var $cbutton = $buttons.find(".oe_selectcreatepopup-search-close");
$nbutton.click(function() {
self.new_object();
});
var $cbutton = $buttons.find(".oe_many2xselectpopup-search-close");
$cbutton.click(function() { $cbutton.click(function() {
self.stop(); self.stop();
}); });
var $sbutton = $buttons.find(".oe_selectcreatepopup-search-select");
if(self.options.disable_multiple_selection) {
$sbutton.hide();
}
$sbutton.click(function() {
self.on_select_elements(self.selected_ids);
});
self.view_list = new openerp.base.form.Many2XPopupListView( null, self.session, self.view_list = new openerp.base.form.Many2XPopupListView( null, self.session,
self.element_id + "_view_list", self.dataset, false, self.element_id + "_view_list", self.dataset, false,
{'deletable': false}); {'deletable': false});
@ -1426,7 +1481,15 @@ openerp.base.form.Many2XSelectPopup = openerp.base.BaseWidget.extend({
}); });
this.searchview.start(); this.searchview.start();
}, },
on_select_element: function(element_id) { on_select_elements: function(element_ids) {
},
on_click_element: function(ids) {
this.selected_ids = ids || [];
if(this.selected_ids.length > 0) {
this.$element.find(".oe_selectcreatepopup-search-select").removeAttr('disabled');
} else {
this.$element.find(".oe_selectcreatepopup-search-select").attr('disabled', "disabled");
}
}, },
new_object: function() { new_object: function() {
var self = this; var self = this;
@ -1439,15 +1502,19 @@ openerp.base.form.Many2XSelectPopup = openerp.base.BaseWidget.extend({
this.dataset.index = null; this.dataset.index = null;
this.view_form = new openerp.base.FormView(null, this.session, this.view_form = new openerp.base.FormView(null, this.session,
this.element_id + "_view_form", this.dataset, false); this.element_id + "_view_form", this.dataset, false);
if (this.options.alternative_form_view) {
debugger;
this.view_form.set_embedded_view(this.options.alternative_form_view);
}
this.view_form.start(); this.view_form.start();
this.view_form.on_loaded.add_last(function() { this.view_form.on_loaded.add_last(function() {
var $buttons = self.view_form.$element.find(".oe_form_buttons"); var $buttons = self.view_form.$element.find(".oe_form_buttons");
$buttons.html(QWeb.render("Many2XSelectPopup.form.buttons")); $buttons.html(QWeb.render("SelectCreatePopup.form.buttons"));
var $nbutton = $buttons.find(".oe_many2xselectpopup-form-save"); var $nbutton = $buttons.find(".oe_selectcreatepopup-form-save");
$nbutton.click(function() { $nbutton.click(function() {
self.view_form.do_save(); self.view_form.do_save();
}); });
var $cbutton = $buttons.find(".oe_many2xselectpopup-form-close"); var $cbutton = $buttons.find(".oe_selectcreatepopup-form-close");
$cbutton.click(function() { $cbutton.click(function() {
self.stop(); self.stop();
}); });
@ -1455,7 +1522,7 @@ openerp.base.form.Many2XSelectPopup = openerp.base.BaseWidget.extend({
this.view_form.on_created.add_last(function(r, success) { this.view_form.on_created.add_last(function(r, success) {
if (r.result) { if (r.result) {
var id = arguments[0].result; var id = arguments[0].result;
self.on_select_element(id); self.on_select_elements([id]);
} }
}); });
this.view_form.do_show(); this.view_form.do_show();
@ -1463,8 +1530,15 @@ openerp.base.form.Many2XSelectPopup = openerp.base.BaseWidget.extend({
}); });
openerp.base.form.Many2XPopupListView = openerp.base.ListView.extend({ openerp.base.form.Many2XPopupListView = openerp.base.ListView.extend({
do_add_record: function () {
this.popup.new_object();
},
select_record: function(index) { select_record: function(index) {
this.popup.on_select_element(this.dataset.ids[index]); this.popup.on_select_elements([this.dataset.ids[index]]);
},
do_select: function(ids, records) {
this._super(ids, records);
this.popup.on_click_element(ids);
} }
}); });

View File

@ -78,10 +78,12 @@ openerp.base.ViewManager = openerp.base.Controller.extend({
this.dataset = dataset; this.dataset = dataset;
this.searchview = null; this.searchview = null;
this.active_view = null; this.active_view = null;
this.views_src = views; this.views_src = _.map(views, function(x)
{return x instanceof Array? {view_id: x[0], view_type: x[1]} : x;});
this.views = {}; this.views = {};
this.flags = this.flags || {}; this.flags = this.flags || {};
this.sidebar = new openerp.base.NullSidebar(); this.sidebar = new openerp.base.NullSidebar();
this.registry = openerp.base.views;
}, },
/** /**
* @returns {jQuery.Deferred} initial view loading promise * @returns {jQuery.Deferred} initial view loading promise
@ -94,14 +96,13 @@ openerp.base.ViewManager = openerp.base.Controller.extend({
self.on_mode_switch($(this).data('view-type')); self.on_mode_switch($(this).data('view-type'));
}); });
_.each(this.views_src, function(view) { _.each(this.views_src, function(view) {
self.views[view[1]] = { view_id: view[0], controller: null, self.views[view.view_type] = $.extend({}, view, {controller: null});
embedded_view: view[2]};
}); });
if (this.flags.views_switcher === false) { if (this.flags.views_switcher === false) {
this.$element.find('.oe_vm_switch').hide(); this.$element.find('.oe_vm_switch').hide();
} }
// switch to the first one in sequence // switch to the first one in sequence
return this.on_mode_switch(this.views_src[0][1]); return this.on_mode_switch(this.views_src[0].view_type);
}, },
stop: function() { stop: function() {
}, },
@ -117,8 +118,9 @@ openerp.base.ViewManager = openerp.base.Controller.extend({
var view = this.views[view_type]; var view = this.views[view_type];
if (!view.controller) { if (!view.controller) {
// Lazy loading of views // Lazy loading of views
var controllerclass = openerp.base.views.get_object(view_type); var controllerclass = this.registry.get_object(view_type);
var controller = new controllerclass( this, this.session, this.element_id + "_view_" + view_type, this.dataset, view.view_id); var controller = new controllerclass( this, this.session, this.element_id + "_view_" + view_type,
this.dataset, view.view_id, view.options);
if (view.embedded_view) { if (view.embedded_view) {
controller.set_embedded_view(view.embedded_view); controller.set_embedded_view(view.embedded_view);
} }

View File

@ -232,14 +232,14 @@
<!-- TODO prefix id with the element_id of the controller t-attf-id="#{prefix}_localid" --> <!-- TODO prefix id with the element_id of the controller t-attf-id="#{prefix}_localid" -->
<div class="oe_vm_switch"> <div class="oe_vm_switch">
<t t-if="views.length != 1" t-foreach="views" t-as="view"> <t t-if="views.length != 1" t-foreach="views" t-as="view">
<button type="button" t-att-data-view-type="view[1]"> <button type="button" t-att-data-view-type="view.view_type">
<t t-esc="view[1]"/> <t t-esc="view.view_type"/>
</button> </button>
</t> </t>
</div> </div>
<div t-attf-id="#{prefix}_search" t-opentag="true"/> <div t-attf-id="#{prefix}_search" t-opentag="true"/>
<t t-foreach="views" t-as="view"> <t t-foreach="views" t-as="view">
<div t-attf-id="#{prefix}_view_#{view[1]}"/> <div t-attf-id="#{prefix}_view_#{view.view_type}"/>
</t> </t>
</td> </td>
<td class="view-manager-main-sidebar" height="100%"> <td class="view-manager-main-sidebar" height="100%">
@ -877,20 +877,20 @@
</p> </p>
</div> </div>
</t> </t>
<t t-name="Many2XSelectPopup"> <t t-name="SelectCreatePopup">
<div t-att-id="element_id"> <div t-att-id="element_id">
<div t-att-id="element_id + '_search'"></div> <div t-att-id="element_id + '_search'"></div>
<div t-att-id="element_id + '_view_list'"></div> <div t-att-id="element_id + '_view_list'"></div>
<div t-att-id="element_id + '_view_form'"></div> <div t-att-id="element_id + '_view_form'"></div>
</div> </div>
</t> </t>
<t t-name="Many2XSelectPopup.search.buttons"> <t t-name="SelectCreatePopup.search.buttons">
<button type="button" class="oe_many2xselectpopup-search-new">New</button> <button type="button" class="oe_selectcreatepopup-search-select" disabled="disabled">Select</button>
<button type="button" class="oe_many2xselectpopup-search-close">Close</button> <button type="button" class="oe_selectcreatepopup-search-close">Close</button>
</t> </t>
<t t-name="Many2XSelectPopup.form.buttons"> <t t-name="SelectCreatePopup.form.buttons">
<button type="button" class="oe_many2xselectpopup-form-save">Save</button> <button type="button" class="oe_selectcreatepopup-form-save">Save</button>
<button type="button" class="oe_many2xselectpopup-form-close">Close</button> <button type="button" class="oe_selectcreatepopup-form-close">Close</button>
</t> </t>
<t t-name="ListView.row.frame" t-extend="WidgetFrame"> <t t-name="ListView.row.frame" t-extend="WidgetFrame">

View File

@ -1,13 +1,12 @@
.openerp table.oe-dashboard {
width: 100%;
}
.openerp .oe-dashboard-links { .openerp .oe-dashboard-links {
text-align: right; text-align: right;
margin: -2em 1em 1em 0; margin: -2em 0.4em 1em 0;
}
.openerp .oe-dashboard-column {
float: left;
padding-bottom: 100px;
} }
.openerp .oe-dashboard-action { .openerp .oe-dashboard-action {
margin: 0 1em 1em 0; margin: 0 0.5em 0.5em 0;
} }
.openerp .oe-dashboard-action .oe-dashboard-action-header { .openerp .oe-dashboard-action .oe-dashboard-action-header {
margin: 0.3em; margin: 0.3em;
@ -58,7 +57,7 @@
} }
/* Layouts */ /* Layouts */
.openerp .oe-dashboard-layout_1 .oe-dashboard-column { .openerp .oe-dashboard-layout_1 .oe-dashboard-column.index_0 {
width: 100%; width: 100%;
} }
.openerp .oe-dashboard-layout_1 .oe-dashboard-column.index_1, .openerp .oe-dashboard-layout_1 .oe-dashboard-column.index_1,

View File

@ -18,13 +18,15 @@
<span>Change layout</span> <span>Change layout</span>
</button> </button>
</div> </div>
<div t-att-data-layout="node.attrs.style" t-attf-class="oe-dashboard oe-dashboard-layout_#{node.attrs.style}"> <table t-att-data-layout="node.attrs.style" t-attf-class="oe-dashboard oe-dashboard-layout_#{node.attrs.style}" cellspacing="0" cellpadding="0" border="0">
<div t-foreach="node.children" t-as="column" t-if="column.tag == 'column'" <tr>
<td t-foreach="node.children" t-as="column" t-if="column.tag == 'column'"
t-att-id="view.element_id + '_column_' + column_index" t-attf-class="oe-dashboard-column index_#{column_index}"> t-att-id="view.element_id + '_column_' + column_index" t-attf-class="oe-dashboard-column index_#{column_index}">
<t t-foreach="column.children" t-as="action" t-if="action.tag == 'action'" t-call="DashBoard.action"/> <t t-foreach="column.children" t-as="action" t-if="action.tag == 'action'" t-call="DashBoard.action"/>
</div> </td>
</div> </tr>
</table>
</t> </t>
<t t-name="DashBoard.action"> <t t-name="DashBoard.action">
<div t-att-data-id="action.attrs.name" class="oe-dashboard-action ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"> <div t-att-data-id="action.attrs.name" class="oe-dashboard-action ui-widget ui-widget-content ui-helper-clearfix ui-corner-all">