diff --git a/addons/base/static/openerp/js/base_views.js b/addons/base/static/openerp/js/base_views.js
index c03b08018fc..3c649d4af6f 100644
--- a/addons/base/static/openerp/js/base_views.js
+++ b/addons/base/static/openerp/js/base_views.js
@@ -3,6 +3,86 @@
*---------------------------------------------------------*/
openerp.base$views = function(openerp) {
+
+openerp.base.Action = openerp.base.Controller.extend({
+ init: function(session, element_id) {
+ this._super(session, element_id);
+ this.action = null;
+ this.dataset = null;
+ this.searchview_id = false;
+ this.searchview = null;
+ this.listview_id = false;
+ this.listview = null;
+ this.formview_id = false;
+ this.formview = null;
+ },
+ start: function() {
+ this.$element.html(QWeb.render("Action", {"prefix":this.element_id}));
+ this.$element.find("#mode_list").bind('click',this.on_mode_list);
+ this.$element.find("#mode_form").bind('click',this.on_mode_form);
+ this.on_mode_list();
+ },
+ on_mode_list: function() {
+ $("#oe_action_form").hide();
+ $("#oe_action_search").show();
+ $("#oe_action_list").show();
+ },
+ on_mode_form: function() {
+ $("#oe_action_form").show();
+ $("#oe_action_search").hide();
+ $("#oe_action_list").hide();
+ },
+ do_action: function(action) {
+ // instantiate the right controllers by understanding the action
+ this.action = action;
+ this.log(action);
+// debugger;
+ //this.log(action);
+ if(action.type == "ir.actions.act_window") {
+ this.do_action_window(action);
+ }
+ },
+ do_action_window: function(action) {
+ this.formview_id = false;
+ this.dataset = new openerp.base.DataSet(this.session, "oe_action_dataset", action.res_model);
+ this.dataset.start();
+
+ // Locate first tree view
+ this.listview_id = false;
+ for(var i = 0; i < action.views.length; i++) {
+ if(action.views[i][1] == "tree") {
+ this.listview_id = action.views[i][0];
+ break;
+ }
+ }
+ this.listview = new openerp.base.ListView(this.session, "oe_action_list", this.dataset, this.listview_id);
+ this.listview.start();
+
+ // Locate first form view
+ this.listview_id = false;
+ for(var j = 0; j < action.views.length; j++) {
+ if(action.views[j][1] == "form") {
+ this.formview_id = action.views[j][0];
+ break;
+ }
+ }
+ this.formview = new openerp.base.FormView(this.session, "oe_action_form", this.dataset, this.formview_id);
+ this.formview.start();
+
+ // Take the only possible search view. Is that consistent ?
+ this.searchview_id = false;
+ if(this.listview && action.search_view_id) {
+ this.searchview_id = action.search_view_id[0];
+ }
+ this.searchview = new openerp.base.SearchView(this.session, "oe_action_search", this.dataset, this.searchview_id);
+ this.searchview.start();
+ }
+});
+
+openerp.base.View = openerp.base.Controller.extend({
+// to replace Action
+});
+
openerp.base.DataSet = openerp.base.Controller.extend({
init: function(session, element_id, model) {
this._super(session, element_id);
@@ -42,15 +122,18 @@ openerp.base.DataSet = openerp.base.Controller.extend({
});
openerp.base.DataRecord = openerp.base.Controller.extend({
- init: function(session, element_id, model, id) {
- this._super(session, element_id);
+ init: function(session, model, fields) {
+ this._super(session, null);
this.model = model;
this.id = id;
- this.value = {};
+ this.fields = fields;
+ this.values = {};
},
- start: function() {
+ load: function(id) {
+ // READ
},
- on_ready: function() {
+ on_loaded: function() {
+ // set t this.values = data.rea },
},
on_change: function() {
},
@@ -58,6 +141,204 @@ openerp.base.DataRecord = openerp.base.Controller.extend({
}
});
+openerp.base.SearchView = openerp.base.Controller.extend({
+ init: function(session, element_id, dataset, view_id) {
+ this._super(session, element_id);
+ this.dataset = dataset;
+ this.model = dataset.model;
+ this.view_id = view_id;
+ this.input_index = 0;
+ this.input_ids = {};
+ this.domain = [];
+ },
+ start: function() {
+ //this.log('Starting SearchView '+this.model+this.view_id)
+ this.rpc("/base/searchview/load", {"model": this.model, "view_id":this.view_id}, this.on_loaded);
+ },
+ on_loaded: function(data) {
+ this.fields_view = data.fields_view;
+ this.log(this.fields_view);
+ this.input_ids = {};
+ this.$element.html(QWeb.render("SearchView", {"fields_view": this.fields_view}));
+ this.$element.find("#search").bind('click',this.on_search);
+ // TODO bind click event on all button
+ // TODO we don't do many2one yet, but in the future bind a many2one controller on them
+ this.log(this.$element.find("#search"));
+ },
+ register_input: function(node) {
+ // self should be passed in the qweb dict to do:
+ //
+
+ // generate id
+ var id = this.element_id + "_" + this.input_index++;
+ // TODO construct a nice object
+ // save it in our registry
+ this.input_ids[id] = {
+ node: node,
+ type: "filter",
+ domain: "",
+ context: "",
+ disabled: false
+ };
+
+ return id;
+ },
+ on_click: function() {
+ // event catched on a button
+ // flip the disabled flag
+ // adjust the css class
+ },
+ on_search: function() {
+ this.log("on_search");
+ // collect all non disabled domains definitions, AND them
+ // evaluate as python expression
+ // save the result in this.domain
+ this.dataset.do_load();
+ },
+ on_clear: function() {
+ }
+});
+
+openerp.base.SearchViewInput = openerp.base.Controller.extend({
+// TODO not sure should we create a controller for every input ?
+
+// of we just keep a simple dict for each input in
+// openerp.base.SearchView#input_ids
+// and use if when we get an event depending on the type
+// i think it's less bloated to avoid useless controllers
+
+// but i think for many2one a controller would be nice
+// so simple dict for simple inputs
+// an controller for many2one ?
+
+});
+
+openerp.base.FormView = openerp.base.Controller.extend({
+ init: function(session, element_id, dataset, view_id) {
+ this._super(session, element_id);
+ this.dataset = dataset;
+ this.dataset_index = 0;
+ this.model = dataset.model;
+ this.view_id = view_id;
+ this.fields_views = {};
+ this.widgets = {};
+ this.fields = {};
+ this.datarecord = {};
+ },
+ start: function() {
+ //this.log('Starting FormView '+this.model+this.view_id)
+ this.rpc("/base/formview/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded);
+ },
+ on_loaded: function(data) {
+ this.fields_view = data.fields_view;
+ //this.log(this.fields_view);
+
+ var frame = new openerp.base.WidgetFrame(this.session, null, this, this.fields_view.arch);
+
+ this.$element.html(QWeb.render("FormView", { "frame": frame, "view": this }));
+ for (var i in this.widgets) {
+ this.widgets[i].register();
+ }
+ // bind to all wdigets that have onchange ??
+
+ // When the dataset is loaded load the first record (like gtk)
+ this.dataset.on_loaded.add_last(this.do_load_record);
+
+ // When a datarecord is loaded display the values in the inputs
+ this.datarecord = new openerp.base.DataRecord(this.session, this.model,{});
+ this.datarecord.on_loaded.add(this.on_record_loaded);
+
+ },
+ do_load_record: function() {
+ // if dataset is empty display the empty datarecord
+ if(this.dataset.ids.length == 0) {
+ this.on_record_loaded();
+ }
+ this.datarecord.load(this.dataset.ids[this.dataset_index]);
+ },
+ on_record_loaded: function() {
+ //for i in this.fields: f.update_from_datarecord()
+ },
+});
+
+openerp.base.ListView = openerp.base.Controller.extend({
+ init: function(session, element_id, dataset, view_id) {
+ this._super(session, element_id);
+ this.dataset = dataset;
+ this.model = dataset.model;
+ this.view_id = view_id;
+ this.name = "";
+
+ this.cols = [];
+
+ this.$table = null;
+ this.colnames = [];
+ this.colmodel = [];
+
+ this.event_loading = false; // TODO in the future prevent abusive click by masking
+ },
+ start: function() {
+ //this.log('Starting ListView '+this.model+this.view_id)
+ this.rpc("/base/listview/load", {"model": this.model, "view_id":this.view_id}, this.on_loaded);
+ },
+ on_loaded: function(data) {
+ this.fields_view = data.fields_view;
+ //this.log(this.fields_view);
+ this.name = "" + this.fields_view.arch.attrs.string;
+ this.$element.html(QWeb.render("ListView", {"fields_view": this.fields_view}));
+ this.$table = this.$element.find("table");
+ this.cols = [];
+ this.colnames = [];
+ this.colmodel = [];
+ // TODO uss a object for each col, fill it with view and fallback to dataset.model_field
+ var tree = this.fields_view.arch.children;
+ for(var i = 0; i < tree.length; i++) {
+ var col = tree[i];
+ if(col.tag == "field") {
+ this.cols.push(col.attrs.name);
+ this.colnames.push(col.attrs.name);
+ this.colmodel.push({ name: col.attrs.name, index: col.attrs.name });
+ }
+ }
+ //this.log(this.cols);
+ this.dataset.fields = this.cols;
+ this.dataset.on_loaded.add_last(this.do_fill_table);
+ },
+ do_fill_table: function() {
+ //this.log("do_fill_table");
+
+ var self = this;
+ //this.log(this.dataset.data);
+ var rows = [];
+ var ids = this.dataset.ids;
+ for(var i = 0; i < ids.length; i++) {
+ // TODO very strange is sometimes non existing ? even as admin ? example ir.ui.menu
+ var row = this.dataset.values[ids[i]];
+ if(row)
+ rows.push(row);
+// else
+// debugger;
+ }
+ //this.log(rows);
+ this.$table.jqGrid({
+ data: rows,
+ datatype: "local",
+ height: "100%",
+ rowNum: 100,
+ //rowList: [10,20,30],
+ colNames: this.colnames,
+ colModel: this.colmodel,
+ //pager: "#plist47",
+ viewrecords: true,
+ caption: this.name
+ }).setGridWidth(this.$element.width());
+ $(window).bind('resize', function() { self.$table.setGridWidth(self.$element.width()); }).trigger('resize');
+ }
+});
+
+openerp.base.TreeView = openerp.base.Controller.extend({
+});
+
openerp.base.Widget = openerp.base.Controller.extend({
// TODO Change this to init: function(view, node) { and use view.session and a new element_id for the super
// it means that widgets are special controllers
@@ -211,6 +492,7 @@ openerp.base.WidgetButton = openerp.base.Widget.extend({
openerp.base.Field = openerp.base.Widget.extend({
init: function(session, element_id, view, node) {
this._super(session, element_id, view, node);
+ // this.datarecord = this.view.datarecord ??
}
});
@@ -218,7 +500,18 @@ openerp.base.FieldChar = openerp.base.Field.extend({
init: function(session, element_id, view, node) {
this._super(session, element_id, view, node);
this.template = "FormView.field.char";
- }
+
+ },
+ start: function() {
+ // this.$element.bind('leaving_focus',)
+ },
+ set_value: function() {
+ // this.$element.val(this.view.datarecord.values[this.name])
+ },
+ on_change: function() {
+ //this.view.update_field(this.name,value);
+
+ },
});
openerp.base.FieldEmail = openerp.base.Field.extend({
@@ -321,112 +614,6 @@ openerp.base.widgets = {
'button' : openerp.base.WidgetButton
}
-openerp.base.FormView = openerp.base.Controller.extend({
- init: function(session, element_id, dataset, view_id) {
- this._super(session, element_id);
- this.dataset = dataset;
- this.model = dataset.model;
- this.view_id = view_id;
- this.widgets = {};
- this.fields = {};
- },
- start: function() {
- //this.log('Starting FormView '+this.model+this.view_id)
- this.rpc("/base/formview/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded);
- },
- on_loaded: function(data) {
- this.fields_view = data.fields_view;
- //this.log(this.fields_view);
- var frame = new openerp.base.WidgetFrame(this.session, null, this, this.fields_view.arch);
- this.$element.html(QWeb.render("FormView", { "frame": frame, "view": this }));
- for (var i in this.widgets) {
- this.widgets[i].register();
- }
- },
- on_button: function() {
- },
- on_write: function() {
- }
-});
-
-openerp.base.ListView = openerp.base.Controller.extend({
- init: function(session, element_id, dataset, view_id) {
- this._super(session, element_id);
- this.dataset = dataset;
- this.model = dataset.model;
- this.view_id = view_id;
- this.name = "";
-
- this.cols = [];
-
- this.$table = null;
- this.colnames = [];
- this.colmodel = [];
-
- this.event_loading = false; // TODO in the future prevent abusive click by masking
- },
- start: function() {
- //this.log('Starting ListView '+this.model+this.view_id)
- this.rpc("/base/listview/load", {"model": this.model, "view_id":this.view_id}, this.on_loaded);
- },
- on_loaded: function(data) {
- this.fields_view = data.fields_view;
- //this.log(this.fields_view);
- this.name = "" + this.fields_view.arch.attrs.string;
- this.$element.html(QWeb.render("ListView", {"fields_view": this.fields_view}));
- this.$table = this.$element.find("table");
- this.cols = [];
- this.colnames = [];
- this.colmodel = [];
- // TODO uss a object for each col, fill it with view and fallback to dataset.model_field
- var tree = this.fields_view.arch.children;
- for(var i = 0; i < tree.length; i++) {
- var col = tree[i];
- if(col.tag == "field") {
- this.cols.push(col.attrs.name);
- this.colnames.push(col.attrs.name);
- this.colmodel.push({ name: col.attrs.name, index: col.attrs.name });
- }
- }
- //this.log(this.cols);
- this.dataset.fields = this.cols;
- this.dataset.on_loaded.add_last(this.do_fill_table);
- },
- do_fill_table: function() {
- //this.log("do_fill_table");
-
- var self = this;
- //this.log(this.dataset.data);
- var rows = [];
- var ids = this.dataset.ids;
- for(var i = 0; i < ids.length; i++) {
- // TODO very strange is sometimes non existing ? even as admin ? example ir.ui.menu
- var row = this.dataset.values[ids[i]];
- if(row)
- rows.push(row);
-// else
-// debugger;
- }
- //this.log(rows);
- this.$table.jqGrid({
- data: rows,
- datatype: "local",
- height: "100%",
- rowNum: 100,
- //rowList: [10,20,30],
- colNames: this.colnames,
- colModel: this.colmodel,
- //pager: "#plist47",
- viewrecords: true,
- caption: this.name
- }).setGridWidth(this.$element.width());
- $(window).bind('resize', function() { self.$table.setGridWidth(self.$element.width()); }).trigger('resize');
- }
-});
-
-openerp.base.TreeView = openerp.base.Controller.extend({
-});
-
openerp.base.CalendarView = openerp.base.Controller.extend({
// Dhtmlx scheduler ?
});
@@ -442,165 +629,12 @@ openerp.base.DiagramView = openerp.base.Controller.extend({
openerp.base.GraphView = openerp.base.Controller.extend({
});
-openerp.base.SearchViewInput = openerp.base.Controller.extend({
-// TODO not sure should we create a controller for every input ?
-
-// of we just keep a simple dict for each input in
-// openerp.base.SearchView#input_ids
-// and use if when we get an event depending on the type
-// i think it's less bloated to avoid useless controllers
-
-// but i think for many2one a controller would be nice
-// so simple dict for simple inputs
-// an controller for many2one ?
-
-});
-
-openerp.base.SearchView = openerp.base.Controller.extend({
- init: function(session, element_id, dataset, view_id) {
- this._super(session, element_id);
- this.dataset = dataset;
- this.model = dataset.model;
- this.view_id = view_id;
- this.input_index = 0;
- this.input_ids = {};
- this.domain = [];
- },
- start: function() {
- //this.log('Starting SearchView '+this.model+this.view_id)
- this.rpc("/base/searchview/load", {"model": this.model, "view_id":this.view_id}, this.on_loaded);
- },
- on_loaded: function(data) {
- this.fields_view = data.fields_view;
- this.log(this.fields_view);
- this.input_ids = {};
- this.$element.html(QWeb.render("SearchView", {"fields_view": this.fields_view}));
- this.$element.find("#search").bind('click',this.on_search);
- // TODO bind click event on all button
- // TODO we don't do many2one yet, but in the future bind a many2one controller on them
- this.log(this.$element.find("#search"));
- },
- register_input: function(node) {
- // self should be passed in the qweb dict to do:
- //
-
- // generate id
- var id = this.element_id + "_" + this.input_index++;
- // TODO construct a nice object
- // save it in our registry
- this.input_ids[id] = {
- node: node,
- type: "filter",
- domain: "",
- context: "",
- disabled: false
- };
-
- return id;
- },
- on_click: function() {
- // event catched on a button
- // flip the disabled flag
- // adjust the css class
- },
- on_search: function() {
- this.log("on_search");
- // collect all non disabled domains definitions, AND them
- // evaluate as python expression
- // save the result in this.domain
- },
- on_clear: function() {
- }
-});
-
openerp.base.ProcessView = openerp.base.Controller.extend({
});
openerp.base.HelpView = openerp.base.Controller.extend({
});
-openerp.base.View = openerp.base.Controller.extend({
-// to replace Action
-});
-
-openerp.base.Action = openerp.base.Controller.extend({
- init: function(session, element_id) {
- this._super(session, element_id);
- this.action = null;
- this.dataset = null;
- this.searchview_id = false;
- this.searchview = null;
- this.listview_id = false;
- this.listview = null;
- this.formview_id = false;
- this.formview = null;
- },
- start: function() {
- this.$element.html(QWeb.render("Action", {"prefix":this.element_id}));
- this.$element.find("#mode_list").bind('click',this.on_mode_list);
- this.$element.find("#mode_form").bind('click',this.on_mode_form);
- this.on_mode_list();
- },
- on_mode_list: function() {
- $("#oe_action_form").hide();
- $("#oe_action_search").show();
- $("#oe_action_list").show();
- },
- on_mode_form: function() {
- $("#oe_action_form").show();
- $("#oe_action_search").hide();
- $("#oe_action_list").hide();
- },
- do_action: function(action) {
- // instantiate the right controllers by understanding the action
- this.action = action;
- this.log(action);
-// debugger;
- //this.log(action);
- if(action.type == "ir.actions.act_window") {
- this.do_action_window(action);
- }
- },
- do_action_window: function(action) {
- this.formview_id = false;
- this.dataset = new openerp.base.DataSet(this.session, "oe_action_dataset", action.res_model);
- this.dataset.start();
-
- // Locate first tree view
- this.listview_id = false;
- for(var i = 0; i < action.views.length; i++) {
- if(action.views[i][1] == "tree") {
- this.listview_id = action.views[i][0];
- break;
- }
- }
- this.listview = new openerp.base.ListView(this.session, "oe_action_list", this.dataset, this.listview_id);
- this.listview.start();
-
- // Locate first form view
- this.listview_id = false;
- for(var j = 0; j < action.views.length; j++) {
- if(action.views[j][1] == "form") {
- this.formview_id = action.views[j][0];
- break;
- }
- }
- this.formview = new openerp.base.FormView(this.session, "oe_action_form", this.dataset, this.formview_id);
- this.formview.start();
-
- // Take the only possible search view. Is that consistent ?
- this.searchview_id = false;
- if(this.listview && action.search_view_id) {
- this.searchview_id = action.search_view_id[0];
- }
- this.searchview = new openerp.base.SearchView(this.session, "oe_action_search", this.dataset, this.searchview_id);
- this.searchview.start();
-
- // Connect the the dataset load event with the search button of search view
- // THIS IS COOL
- this.searchview.on_search.add_last(this.dataset.do_load);
- }
-});
};
// DEBUG_RPC:rpc.request:('execute', 'addons-dsh-l10n_us', 1, '*', ('ir.filters', 'get_filters', u'res.partner'))