From f6af0f04d226f172b0e980cca89d10765904f5f9 Mon Sep 17 00:00:00 2001 From: niv-openerp Date: Fri, 28 Sep 2012 12:08:44 +0200 Subject: [PATCH] [IMP] added custom widgets in form view bzr revid: nicolas.vanhoren@openerp.com-20120928100844-5zp4umhclg5klzdx --- addons/web/static/src/js/view_form.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 2265fc27bf7..92e01843a19 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -91,6 +91,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM this.default_focus_button = null; this.fields_registry = instance.web.form.widgets; this.tags_registry = instance.web.form.tags; + this.widgets_registry = instance.web.form.custom_widgets; this.has_been_loaded = $.Deferred(); this.translatable_fields = []; _.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_tags_registry(this.tags_registry); + this.rendering_engine.set_widgets_registry(this.widgets_registry); if (!this.extract_qweb_template(data)) { this.rendering_engine.set_fields_view(data); 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) { this.fields_registry = fields_registry; }, + set_widgets_registry: function(widgets_registry) { + this.widgets_registry = widgets_registry; + }, // Backward compatibility tools, current default version: v6.1 process_version: function() { if (this.version < 7.0) { @@ -1175,6 +1180,7 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt this.fields_to_init = []; this.tags_to_init = []; + this.widgets_to_init = []; this.labels = {}; 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])); 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 }, render_element: function(template /* dictionaries */) { @@ -1246,6 +1258,10 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt return $tag; } }, + process_widget: function($widget) { + this.widgets_to_init.push($widget); + return $widget; + }, process_sheet: function($sheet) { var $new_sheet = this.render_element('FormRenderingSheet', $sheet.getAttributes()); this.handle_common_properties($new_sheet, $sheet); @@ -1956,7 +1972,7 @@ instance.web.form.FieldInterface = { /** * 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', }); +instance.web.form.custom_widgets = new instance.web.Registry({ +}); + }; // vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: