[IMP]include board and column tag.
[odoo/odoo.git] / addons / web / static / src / js / view_editor.js
index fbf30f6..d1ed9cb 100644 (file)
@@ -74,10 +74,6 @@ openerp.web.ViewEditor =   openerp.web.Widget.extend({
             return (node.getAttribute('name'))?
                 _.sprintf( "<%s name='%s'>",node.tagName.toLowerCase(), node.getAttribute('name')):
                 _.sprintf( "<%s>",node.tagName.toLowerCase());
-        }else if(node.tagName.toLowerCase() == "group"){
-            return (node.getAttribute('string'))?
-                _.sprintf( "<%s>",node.getAttribute('string')):
-                _.sprintf( "<%s>",node.tagName.toLowerCase());
         }else{
             return (node.getAttribute('string'))?
                 _.sprintf( "<%s string='%s'>",node.tagName.toLowerCase(), node.getAttribute('string')):
@@ -338,6 +334,21 @@ openerp.web.ViewEditor =   openerp.web.Widget.extend({
             }
             switch (this.id) {
                 case "side-add":
+                    var tr = $(side).find('a').text();
+                    var parent_tr = ($(side).prevAll("tr[level="+String(clicked_tr_level - 1)+"]"))[0];
+                    parent_tr = $(parent_tr).find('a').text();
+                    self.rpc("/web/searchview/fields_get", {model:self.model}, function(result) {
+                                var fields = _.keys(result.fields);
+                                fields.push(" "),fields.sort();
+                                var property_to_check = [];
+                                _.each([tr,parent_tr],function(element){
+                                    property_to_check.push(
+                                        _.detect(_.keys(_CHILDREN),function(res){
+                                                return _.includes(element, res);
+                                            }));
+                                    });
+                                self.on_add_node(property_to_check, fields);
+                            });
                     break;
                 case "side-remove":
                     break;
@@ -475,7 +486,11 @@ openerp.web.ViewEditor =   openerp.web.Widget.extend({
                     child_list.splice(index-1, 0, re_insert_obj[0]);
                 } else if (move_direct == "update_node") {
                     _.each(update_values, function(val){
-                        $(arch1).attr(val[0],val[1]);
+                        if(val[0] == "required"){
+                                $(arch1).attr("required", "true");
+                        }else{
+                            $(arch1).attr(val[0],val[1]);
+                        }
                     });
                     var new_obj = self.create_View_Node(arch1);
                     new_obj.id = obj.id,new_obj.child_id = obj.child_id;
@@ -549,7 +564,7 @@ openerp.web.ViewEditor =   openerp.web.Widget.extend({
         this.edit_node_dialog.$element.append('<table id="rec_table"  style="width:400px" class="oe_forms"></table>');
         this.edit_widget = [];
         _.each(properties, function(record) {
-            var id = record,
+            var id = record, 
             type_widget;
             self.ready  = $.when(self.on_groups(id)).then(function () {
                 if (_.include(widget,id)){
@@ -563,7 +578,7 @@ openerp.web.ViewEditor =   openerp.web.Widget.extend({
                 if (id == 'groups') type_widget.selection = self.groups;
                 self.edit_node_dialog.$element.find('table[id=rec_table]').append('<tr><td align="right">'+id+':</td><td>'+type_widget.render()+'</td></tr>');
                 type_widget.start();
-                type_widget.set_value(value)
+                type_widget.set_value(value);
                 self.edit_widget.push(type_widget);
             });
         });
@@ -600,6 +615,60 @@ openerp.web.ViewEditor =   openerp.web.Widget.extend({
                 });
             })
         return def.promise();
+    },
+    on_add_node: function(properties,fields){
+        var self = this;
+        var  positions = ['After','Before','Inside'];
+        var  render_list = [];
+        render_list.push(["node_type",(_.keys(_CHILDREN)).sort()]);
+        render_list.push(["position",positions]);
+        render_list.push(["Fields",fields]);
+        this.edit_widget = [];
+        this.add_node_dialog = new openerp.web.Dialog(this,{
+            modal: true,
+            title: 'Properties',
+            width: 500,
+            height: 300,
+            buttons: {
+                    "Update": function(){
+                        var node_type,position,fields;
+                        var check_add_node = true;
+                        _.each(self.edit_widget, function(widget) {
+                            (widget.name == "node_type")?node_type = widget.get_value()[1]:false;
+                            (widget.name == "position")?position = widget.get_value()[1]:false;
+                            (widget.name == "Fields")?fields = widget.get_value()[1]:false;
+                        });
+                       (position == "Inside")?
+                        check_add_node =(_.include(_CHILDREN[properties[0]],node_type))?true:false:
+                        check_add_node =(_.include(_CHILDREN[properties[1]],node_type))?true:false;
+                        if(node_type == "field" &&  check_add_node )
+                            {check_add_node = (fields != " ")?true:false;
+                        }
+                        if(check_add_node){
+                            var tag = _.sprintf("<%s></%s>",node_type,node_type);
+                        }else{alert("Can't Update View");}
+                    },
+                    "Cancel": function(){
+                        self.add_node_dialog.close();
+                    }
+           }
+        }).start().open();
+        this.add_node_dialog.$element.
+        append('<table id="rec_table"  style="width:400px" class="oe_forms"></table>');
+        var table_selector = self.add_node_dialog.$element.find('table[id=rec_table]');
+        _.each(render_list,function(node){
+            type_widget = new openerp.web.ViewEditor.FieldSelect (self.add_node_dialog, node[0]);
+            type_widget.selection = node[1];
+            if(node[0]=="Fields"){ node[0] = "";}
+            table_selector.append('<tr><td align="right">'+node[0]+'</td><td>'+type_widget.render()+'</td></tr>');
+            type_widget.start();
+            self.edit_widget.push(type_widget);
+        });
+        table_selector.append('<tr><td align="right"> <button id="new_field">New Field</button></td></tr>');
+        self.add_node_dialog.$element.find("select[id=node_type] option[value=field]").attr("selected",1);
+        self.add_node_dialog.$element.find('#new_field').click(function() {
+            //to do
+        });
     }
 });
 openerp.web.ViewEditor.Field = openerp.web.Class.extend({
@@ -655,6 +724,11 @@ openerp.web.ViewEditor.FieldSelect = openerp.web.ViewEditor.Field.extend({
         var self = this;
         this.$element.find("select[id=" + this.name + "]").css('width', '100%').change(function() {
             self.on_ui_change();
+            add_node = self.get_value();
+            if(add_node[0] == "node_type"){
+                if(add_node[1] == "field"){self.$element.find("select[id=Fields]").show();}
+                else{self.$element.find("select[id=Fields]").hide();}
+            }
         });
     },
     set_value: function(value) {
@@ -756,6 +830,23 @@ var _PROPERTIES = {
     'graph' : ['string', 'type'],
     'calendar' : ['string', 'date_start', 'date_stop', 'date_delay', 'day_length', 'color', 'mode'],
 };
+_CHILDREN = {
+    'form': ['notebook', 'group', 'field', 'label', 'button','board', 'newline', 'separator'],
+    'tree': ['field'],
+    'graph': ['field'],
+    'calendar': ['field'],
+    'notebook': ['page'],
+    'page': ['notebook', 'group', 'field', 'label', 'button', 'newline', 'separator'],
+    'group': ['field', 'label', 'button', 'separator', 'newline'],
+    'board': ['column'],
+    'child2': ['action'],
+    'action': [],
+    'field': ['form', 'tree', 'graph'],
+    'label': [],
+    'button' : [],
+    'newline': [],
+    'separator': [],
+};
 var icons = ['','STOCK_ABOUT', 'STOCK_ADD', 'STOCK_APPLY', 'STOCK_BOLD',
             'STOCK_CANCEL', 'STOCK_CDROM', 'STOCK_CLEAR', 'STOCK_CLOSE', 'STOCK_COLOR_PICKER',
             'STOCK_CONNECT', 'STOCK_CONVERT', 'STOCK_COPY', 'STOCK_CUT', 'STOCK_DELETE',