[IMP] use Registry in forms

bzr revid: xmo@openerp.com-20110331105751-aib329cpnpigbpu3
This commit is contained in:
Xavier Morel 2011-03-31 12:57:51 +02:00
parent 878df7ff9d
commit 359e2443d4
1 changed files with 34 additions and 25 deletions

View File

@ -94,6 +94,7 @@ openerp.base.FormView = openerp.base.Controller.extend({
}
});
/** @namespace */
openerp.base.form = {};
openerp.base.form.Widget = openerp.base.Controller.extend({
@ -239,15 +240,20 @@ openerp.base.form.WidgetFrame = openerp.base.form.Widget.extend({
handle_node: function(n) {
var type = this.view.fields_view.fields[n.attrs.name] || {};
var widget_type = n.attrs.widget || type.type || n.tag;
if (openerp.base.widgets[widget_type]) {
var widget = new openerp.base.widgets[widget_type](this.view, n);
try {
var widget = new (openerp.base.form.widgets.get_object(widget_type))
(this.view, n);
if (n.tag == 'field' && n.attrs.nolabel != '1') {
var label = new openerp.base.widgets['label'](this.view, n);
var label = new (openerp.base.form.widgets.get_object('label'))
(this.view, n);
label["for"] = widget;
this.add_widget(label);
}
this.add_widget(widget);
} else {
} catch (e) {
if (!e instanceof openerp.base.KeyNotFound) {
throw e;
}
this.log("Unhandled widget type : " + widget_type, n);
}
},
@ -514,27 +520,30 @@ openerp.base.form.FieldReference = openerp.base.form.Field.extend({
}
});
openerp.base.widgets = {
'group' : openerp.base.form.WidgetFrame,
'notebook' : openerp.base.form.WidgetNotebook,
'separator' : openerp.base.form.WidgetSeparator,
'label' : openerp.base.form.WidgetLabel,
'button' : openerp.base.form.WidgetButton,
'char' : openerp.base.form.FieldChar,
'email' : openerp.base.form.FieldEmail,
'url' : openerp.base.form.FieldUrl,
'text' : openerp.base.form.FieldText,
'date' : openerp.base.form.FieldDate,
'datetime' : openerp.base.form.FieldDatetime,
'selection' : openerp.base.form.FieldSelection,
'many2one' : openerp.base.form.FieldMany2One,
'many2many' : openerp.base.form.FieldMany2Many,
'one2many' : openerp.base.form.FieldOne2Many,
'one2many_list' : openerp.base.form.FieldOne2Many,
'reference' : openerp.base.form.FieldReference,
'boolean' : openerp.base.form.FieldBoolean,
'float' : openerp.base.form.FieldFloat
};
/**
* Registry of form widgets, called by :js:`openerp.base.FormView`
*/
openerp.base.form.widgets = new openerp.base.Registry({
'group' : 'openerp.base.form.WidgetFrame',
'notebook' : 'openerp.base.form.WidgetNotebook',
'separator' : 'openerp.base.form.WidgetSeparator',
'label' : 'openerp.base.form.WidgetLabel',
'button' : 'openerp.base.form.WidgetButton',
'char' : 'openerp.base.form.FieldChar',
'email' : 'openerp.base.form.FieldEmail',
'url' : 'openerp.base.form.FieldUrl',
'text' : 'openerp.base.form.FieldText',
'date' : 'openerp.base.form.FieldDate',
'datetime' : 'openerp.base.form.FieldDatetime',
'selection' : 'openerp.base.form.FieldSelection',
'many2one' : 'openerp.base.form.FieldMany2One',
'many2many' : 'openerp.base.form.FieldMany2Many',
'one2many' : 'openerp.base.form.FieldOne2Many',
'one2many_list' : 'openerp.base.form.FieldOne2Many',
'reference' : 'openerp.base.form.FieldReference',
'boolean' : 'openerp.base.form.FieldBoolean',
'float' : 'openerp.base.form.FieldFloat'
});
};