Builder/Provider/File/Roo.js
[app.Builder.js] / Builder / Provider / File / Roo.js
old mode 100755 (executable)
new mode 100644 (file)
index 3827d36..db0d28d
@@ -9,9 +9,9 @@ XObject = imports.XObject.XObject;
 //----------------------- our roo verison
 Base = imports.Builder.Provider.File.Base.Base;
 Gio = imports.gi.Gio;
+File = imports.File.File;
 
-JSDOC =  imports['JSDOC.js'];
+//JSDOC =  imports['JSDOC.js'];
 //----------------------- our roo verison
 
 var rid = 0;
@@ -28,8 +28,9 @@ Roo = XObject.define(
         //console.dump(cfg);
         
         if (!cfg.name || !cfg.fullname ) {
-            cfg.name = cfg.path.split('/').pop().replace(/\.js$/, '');
-            cfg.fullname = (cfg.parent && cfg.parent.length ? (cfg.parent + '.') : '' ) + cfg.name;
+            cfg.name = cfg.path.split('/').pop().replace(/\.bjs$/, '');
+            //cfg.fullname = (cfg.parent && cfg.parent.length ? (cfg.parent + '.') : '' ) + cfg.name;
+            cfg.fullname = cfg.name;
         }
         
         
@@ -64,7 +65,22 @@ Roo = XObject.define(
     },
     Base,
     {
-            
+        doubleStringProps : [ 
+            'title',
+            'legend',
+            'loadingText',
+            'emptyText',
+            'qtip',
+            'value',
+            'text'
+        ],
+        modOrder : '001', /// sequence id that this uses.
+        region : 'center',
+        parent : '',
+        title : '', // the title on displayed when loading.
+        disable : '', // use a function to that returns false to disable this..
+        permname: '', /// permission name
+        
         setNSID : function(id)
         {
             
@@ -97,9 +113,10 @@ Roo = XObject.define(
                 var cfg = JSON.parse(src);
                 print("loaded data");
                 console.dump(cfg);
-                
-                _this.name = cfg.name;
+                _this.modOrder = cfg.modOrder || '001';
+                _this.name = cfg.name.replace(/\.bjs/, ''); // BC!
                 _this.parent =  cfg.parent;
+                _this.permname =  cfg.permname || '';
                 _this.title =  cfg.title;
                 _this.items = cfg.items || []; 
                 
@@ -150,49 +167,119 @@ Roo = XObject.define(
             if (fixthis) {
                 // fix xtype.
                 var fn = this.guessName(node);
+                //print("guessname got " + fn);
                 if (fn) {
                     var bits = fn.split('.');
                     node.xtype = bits.pop();
                     node['|xns'] = bits.join('.');
+                    
                 }
                 // fix array???
-                
-                
-                
+                 
                 
             }
             if (!node.items || !node.items.length) {
                 return;
             }
             var _this = this;
-            node.forEach(node.items, function(i) {
+            var aitems = [];
+            var nitems = [];
+            node.items.forEach(function(i) {
+                
+                
+                
                 _this.fixItems(i, true);
+                if (i.xtype == 'Array') {
+                    aitems.push(i);
+                    return;
+                }    
+                nitems.push(i);
             });
+            node.items = nitems; 
+            
+            if (!aitems.length) {
+                return;
+            }
+            
+            aitems.forEach(function(i) {
+                
+                if (!i.items || !i.items.length) {
+                    return;
+                }
+                var prop = i['*prop'] + '[]';
+                // colModel to cm?
+                i.items.forEach(function(c) {
+                    c['*prop']  = prop;
+                    node.items.push(c);
+                    
+                });
+                
+                
+            });
+            
+            
+            // array handling.. 
+            
+            
             
             
             
         },
         
+        save : function()
+        {
+            Base.prototype.save.call(this);
+            // now write the js file..
+            var js = this.path.replace(/\.bjs$/, '.js');
+            var d = new Date();
+            var js_src = this.toSource();
+            print("TO SOURCE in " + ((new Date()) - d) + "ms");
+            File.write(js, js_src);
+            
+            
+            
+        },
+         /**
+         * convert xtype for munged output..
+         * 
+         */
+        mungeXtype : function(xtype, els)
+        {
+            var bits = xtype.split('.');
+            // assume it has lenght!
+            
+            els.push("xtype: '"+ bits.pop()+"'");
+            els.push('xns: '+ bits.join('.'));
+        },
+        
+        /**
+         * This needs to use some options on the project
+         * to determine how the file is output..
+         * 
+         * At present we are hard coding it..
+         * 
+         * 
+         */
         toSource: function()
         {
             // dump the file tree back out to a string.
             
-            if (typeof(this.items[0]['|module']) != 'undefined') {
-                return this.toSourceStdClass();
+            // we have 2 types = dialogs and components
+            // 
+            var top = this.guessName(this.items[0]);
+            if (!top) {
+                return false;
             }
-            
-            if (this.items[0].region) {
-                return this.toSourceLayout();
+            if (top.match(/Dialog/)) {
+                return this.toSourceDialog();
             }
-            return this.toSourceDialog();
-            
-            
-                
-                    
-                
-                    
-                   
+            return this.toSourceLayout();
             
+            /*
+            eventually support 'classes??'
+             return this.toSourceStdClass();
+            */
+              
         },
        
         outputHeader : function()
@@ -200,20 +287,21 @@ Roo = XObject.define(
             return [
                 "//<script type=\"text/javascript\">",
                 "",
-                "// Auto generated file - created by Builder Module - do not edit directly",
+                "// Auto generated file - created by app.Builder.js- do not edit directly (at present!)",
                 ""
             ].join("\n");
             
        
         },
         // a standard dialog module.
+        // fixme - this could be alot neater..
         toSourceDialog : function() 
         {
-            var b = this.items[0]; 
-            var o = this.mungePropObj(this.items[0]);
+            var items = JSON.parse(JSON.stringify(this.items[0]));
+            var o = this.mungeToString(items, false, '            ');   
             return [
                 this.outputHeader(),
-                b['|module'] + " = {",
+                this.name + " = {",
                 "",
                 "    dialog : false,",
                 "    callback:  false,",
@@ -226,7 +314,7 @@ Roo = XObject.define(
                 "",
                 "        this.callback = cb;",
                 "        this.data = data;",
-                "        this.dialog.show();",
+                "        this.dialog.show(this.data._el);",
                 "        if (this.form) {",
                 "           this.form.reset();",
                 "           this.form.setValues(data);",
@@ -238,7 +326,7 @@ Roo = XObject.define(
                 "    create : function()",
                 "    {",
                 "        var _this = this;",
-                "        this.dialog = Roo.factory(" + this.objectToJsString(o,3) +  ");",
+                "        this.dialog = Roo.factory(" + o +  ");",
                 "    }",
                 "};",
                 ""
@@ -251,55 +339,88 @@ Roo = XObject.define(
         // a layout compoent 
         toSourceLayout : function() 
         {
-            var b = this.items[0]; 
-            var o = this.mungePropObj(this.items[0]);
+            var items = JSON.parse(JSON.stringify(this.items[0]));
+            var o = this.mungeToString(items, false, '            ');   
+             
+            var modkey = this.modOrder + '-' + this.name.replace('/[^A-Z]+/ig', '-');
             
-            var disabled = typeof(b['|disabled']) == 'undefined' ? (b.disabled || false) : b['disabled'];
             
+            if (this.name.match(/^Pman/)) {
+                    
+                
+                // old BC way we did things..
+                return [
+                    this.outputHeader(),
+                    "",
+                    "",
+                    "// register the module first",
+                    "Pman.on('beforeload', function()",
+                    "{",
+                    "    Pman.register({",
+                    "        modKey : '" +modkey+"',",
+                    "        module : " + this.name + ",",
+                    "        moduleName : '" + this.name + "',",
+                    "        region : '" + this.region   +"',",
+                    "        parent : " + (this.parent ||  'false') + ",",
+                    "        name : " + JSON.stringify(this.title  || "unnamed module") + ",",
+                    "        disabled : " + (this.disabled || 'false') +", ",
+                    "        permname: '" + (this.permname|| '') +"' ",
+                    "    });",
+                    "});",
+                    "",
+                    
+                    this.name  +  " = new Roo.util.Observable({",
+                    "",
+                    "    panel : false,",
+                    "    disabled : false,",
+                    "    parentLayout:  false,",
+                    "",
+                    "    add : function(parentLayout, region)",
+                    "    {",
+                    "",
+                    "        var _this = this;", // standard avaialbe..
+                    "        this.parentLayout = parentLayout;",
+                    "",
+                    "        this.panel = parentLayout.addxtype(" + o +  ");",
+                    "        this.layout = this.panel.layout;",
+                    "",
+                    "    }",
+                    "});",
+                    ""
+                     
+                    
+                 ].join("\n");
+            }
+            
+        
             return [
                 this.outputHeader(),
-                "",
-                "",
-                "// register the module first",
-                "Pman.on('beforeload', function()",
-                "{",
-                "    Pman.register({",
-                "        modKey : '" + (b.modkey  || "000-unnumbered module") +"',",
-                "        module : " + b['|module']  + ",",
-                "        region : '" + (b.region  || '') +"',",
-                "        parent : " + (b.parent  || false) + ",",
-                "        name : \"" + (b.name  || "unnamed module") + "\"",
-                "        disabled : " + disabled +" ",
-                "    });",
-                "});",
-                "",
                 
-                b['|module']  +  " = new Roo.util.Observable({",
-                "",
-                "    panel : false,",
-                "    disabled : false,",
-                "    parentLayout:  false,",
-                "",
-                "    add : function(parentLayout, region)",
+                this.name  +  " = new Roo.XComponent({",
+                "    order    : '" +modkey+"',",
+                "    region   : '" + this.region   +"',",
+                "    parent   : "+ (this.parent ?  "'" + this.parent + "'" :  'false') + ",",
+                "    name     : " + JSON.stringify(this.title  || "unnamed module") + ",",
+                "    disabled : " + (this.disabled || 'false') +", ",
+                "    tree : function()",
                 "    {",
-                "",
-                "        var _this = this;", // standard avaialbe..
-                "        this.parentLayout = parentLayout;",
-                "",
-                "        this.panel = parentLayout.addxtype(" + this.objectToJsString(o,3) +  ");",
-                "        this.layout = this.panel.layout;",
-                "",
+                "        var _this = this;", // bc
+                "        var MODULE = this;", /// this looks like a better name.
+                "        return " + o + ';',
                 "    }",
                 "});",
                 ""
                  
-                
              ].join("\n");
+            
         },
             
         guessName : function(ar) // turns the object into full name.
         {
              // eg. xns: Roo, xtype: XXX -> Roo.xxx
+            if (!ar) {
+                return false;
+            }
             var ret = [];
             ret.push(typeof( ar['|xns'] ) == 'undefined' ? 'Roo' : ar['|xns'] );
             
@@ -309,7 +430,7 @@ Roo = XObject.define(
                 return false;
             }
             var xtype = ar['xtype'] + '';
-            if (xtype == '*') { // prefixes????
+            if (xtype[0] == '*') { // prefixes????
                 xtype  = xtype.substring(1);
             }
             if (xtype.match(/^Roo/)) {
@@ -317,7 +438,12 @@ Roo = XObject.define(
                 ret = [];
             }
             ret.push(xtype);
-            return ret.join('.');
+            var str =  ret.join('.');
+            
+            
+            
+            var pm = imports.Builder.Provider.ProjectManager.ProjectManager;
+            return pm.getPalete('Roo').guessName(ret.join('.'));