[IMP] added custom widgets in form view

bzr revid: nicolas.vanhoren@openerp.com-20120928100844-5zp4umhclg5klzdx
This commit is contained in:
niv-openerp 2012-09-28 12:08:44 +02:00
parent 03bee0d41f
commit f6af0f04d2
1 changed files with 20 additions and 1 deletions

View File

@ -91,6 +91,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
this.default_focus_button = null; this.default_focus_button = null;
this.fields_registry = instance.web.form.widgets; this.fields_registry = instance.web.form.widgets;
this.tags_registry = instance.web.form.tags; this.tags_registry = instance.web.form.tags;
this.widgets_registry = instance.web.form.custom_widgets;
this.has_been_loaded = $.Deferred(); this.has_been_loaded = $.Deferred();
this.translatable_fields = []; this.translatable_fields = [];
_.defaults(this.options, { _.defaults(this.options, {
@ -142,6 +143,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
this.rendering_engine.set_fields_registry(this.fields_registry); this.rendering_engine.set_fields_registry(this.fields_registry);
this.rendering_engine.set_tags_registry(this.tags_registry); this.rendering_engine.set_tags_registry(this.tags_registry);
this.rendering_engine.set_widgets_registry(this.widgets_registry);
if (!this.extract_qweb_template(data)) { if (!this.extract_qweb_template(data)) {
this.rendering_engine.set_fields_view(data); this.rendering_engine.set_fields_view(data);
var $dest = this.$el.hasClass("oe_form_container") ? this.$el : this.$el.find('.oe_form_container'); var $dest = this.$el.hasClass("oe_form_container") ? this.$el : this.$el.find('.oe_form_container');
@ -1151,6 +1153,9 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt
set_fields_registry: function(fields_registry) { set_fields_registry: function(fields_registry) {
this.fields_registry = fields_registry; this.fields_registry = fields_registry;
}, },
set_widgets_registry: function(widgets_registry) {
this.widgets_registry = widgets_registry;
},
// Backward compatibility tools, current default version: v6.1 // Backward compatibility tools, current default version: v6.1
process_version: function() { process_version: function() {
if (this.version < 7.0) { if (this.version < 7.0) {
@ -1175,6 +1180,7 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt
this.fields_to_init = []; this.fields_to_init = [];
this.tags_to_init = []; this.tags_to_init = [];
this.widgets_to_init = [];
this.labels = {}; this.labels = {};
this.process(this.$form); this.process(this.$form);
@ -1204,6 +1210,12 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt
var w = new (obj)(self.view, instance.web.xml_to_json($elem[0])); var w = new (obj)(self.view, instance.web.xml_to_json($elem[0]));
w.replace($elem); w.replace($elem);
}); });
_.each(this.widgets_to_init, function($elem) {
var widget_type = $elem.attr("type");
var obj = self.widgets_registry.get_object(widget_type);
var w = new (obj)(self.view, instance.web.xml_to_json($elem[0]));
w.replace($elem);
});
// TODO: return a deferred // TODO: return a deferred
}, },
render_element: function(template /* dictionaries */) { render_element: function(template /* dictionaries */) {
@ -1246,6 +1258,10 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt
return $tag; return $tag;
} }
}, },
process_widget: function($widget) {
this.widgets_to_init.push($widget);
return $widget;
},
process_sheet: function($sheet) { process_sheet: function($sheet) {
var $new_sheet = this.render_element('FormRenderingSheet', $sheet.getAttributes()); var $new_sheet = this.render_element('FormRenderingSheet', $sheet.getAttributes());
this.handle_common_properties($new_sheet, $sheet); this.handle_common_properties($new_sheet, $sheet);
@ -1956,7 +1972,7 @@ instance.web.form.FieldInterface = {
/** /**
* Called when the translate button is clicked. * Called when the translate button is clicked.
*/ */
on_translate: function() {}, on_translate: function() {},
}; };
/** /**
@ -4954,6 +4970,9 @@ instance.web.form.tags = new instance.web.Registry({
'button' : 'instance.web.form.WidgetButton', 'button' : 'instance.web.form.WidgetButton',
}); });
instance.web.form.custom_widgets = new instance.web.Registry({
});
}; };
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: // vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: