Builder/Provider/File/Gtk.js
[app.Builder.js] / Builder / Provider / File / Gtk.js
1 //<Script type="text/javascript">
2  
3 Gio = imports.gi.Gio;
4 console = imports.console;
5 XObject = imports.XObject.XObject;
6
7   
8 //----------------------- our roo verison
9 Base = imports.Builder.Provider.File.Base.Base;
10
11 var gid = 1;
12
13 Gtk = XObject.define( 
14     function(cfg) {
15         
16         // id ,
17         //"name":"Edit Module Details",
18         // items : 
19         //"btype":"FORM", // was to be components...
20         //"app":"Builder",
21         //"module":"Pman.Tab.BuilderTop2"
22         //console.dump(cfg);
23         cfg.parent = cfg.parent || '';
24         if (!cfg.name || !cfg.fullname ) {
25             cfg.name = cfg.path.split('/').pop().replace(/\.js$/, '');
26             cfg.fullname = (cfg.parent.length ? (cfg.parent + '.') : '' ) + cfg.name;
27         }
28         
29         
30         this.items = [];
31         if (cfg.json) {
32             var jstr =  JSON.parse(cfg.json);
33             this.items = [ jstr ];
34             //console.log(cfg.items.length);
35             delete cfg.json; // not needed!
36         }
37         this.cn = [];
38          /*
39         var p = cfg.items && cfg.items.length && cfg.items[0].parent ? cfg.items[0].parent : false;
40         
41         // ensure real data is set...
42         Roo.apply(this, {
43             name : cfg.module,
44             parent : p,
45             title : cfg.name,
46             project : cfg.app
47             
48         });
49         
50         this.cn = [];
51         */
52         Gtk.superclass.constructor.call(this, cfg);
53
54         
55         // super?!?!
56         this.id = 'file-gtk-' + gid++;
57         // various loader methods..
58        
59     },
60     Base,   
61     {
62         xtype : 'Gtk',
63         setNSID : function(id)
64         {
65             
66             this.items[0]['*class'] = id;
67             
68             
69         },
70         getType: function() {
71             return 'Gtk';
72         },
73         
74         loadItems : function(cb)
75         {
76             if (!cb) {
77                 throw "no callback for loadItems";
78             }
79             console.log("load Items!");
80             if (this.items.length) {
81                 return false;
82             }
83             Seed.print("load: " + this.path);
84             
85             
86             var file = Gio.file_new_for_path(this.path);
87             
88             var _this = this;                        
89             file.read_async(0, null, function(source,result) {
90                 var stream = source.read_finish(result)
91                 var dstream = new Gio.DataInputStream.c_new(stream);
92                 
93                 var src = dstream.read_until("");
94                 var cfg = JSON.parse(src);
95                 print("loaded data");
96                 console.dump(cfg);
97                 
98                 _this.name = cfg.name;
99                 _this.parent =  cfg.parent;
100                 _this.title =  cfg.title;
101                 _this.items = cfg.items || []; 
102                 cb();
103                 
104                 // update to new JSDOC api!?
105                 /*
106                 var tstream =  new JSDOC.TextStream(src);
107                 var tr = new  JSDOC.TokenReader( {
108                     keepWhite : true,
109                     keepComments : true
110                 });
111                 var toks = tr.tokenize(tstream);
112                 //console.dump(toks);
113                 //Seed.quit();
114                 var ts = new JSDOC.Collapse(toks);
115                 //console.dump(ts.tokens);
116                 var rd = new JSDOC.GtkFile(ts.tokens);
117                 try {
118                     rd.parse();
119                 } catch (e) {
120                     console.log(e);
121                     _this.items = [ src ];
122                     cb();
123                     return;
124                 }
125                  
126                 console.dump(rd.cfg);
127                 //!!??? have we got engouth!
128                 // try parsing self..
129                 _this.items = [ rd.cfg ];
130                 _this.imports = rd.imports;
131                 _this.giImports = rd.giImports ;
132                 
133                 cb();
134                 
135                 */
136             });
137             
138             
139             
140         },
141         /** 
142          * fixme - update to new style
143          * 
144          * 
145          * 
146          */
147         
148         toSourceStdClass: function()
149         {
150             var cfg = this.items[0]
151             var fcfg = XObject.extend({ },  this.items[0]);
152             delete fcfg['*class'];
153             delete fcfg['*extends'];
154             delete fcfg['*static'];
155             delete fcfg['|constructor'];
156             
157             var hasExtends = (typeof(cfg['*extends']) != 'undefined') && cfg['*extends'].length;
158             var hasConstructor = (typeof(cfg['|constructor']) != 'undefined');
159             var isStatic = (typeof(cfg['*static']) == '*static');
160             
161             var newline = '';
162             var endline = '';
163             if (hasExtends) {
164                 newline =  hasConstructor ? 
165                 
166                  
167                     cfg['//constructor'] + "\n" + 
168                     cfg['*class'] + " = " + cfg['|constructor'] + "\n\n"+ 
169                     "Roo.extend(" + cfg['*class'] + ":, " + cfg['*extends'] + ", " :
170                     
171                     cfg['//*class'] + "\n" + 
172                     cfg['*class'] + " = new " + cfg['*extends'] + "(" ;
173                 
174                 endline = ');';
175             } else {
176                 
177                 
178                 
179                 newline  = hasConstructor ? 
180                 
181                     cfg['//constructor'] + "\n" + 
182                     cfg['*class'] + " = " + cfg['|constructor'] + "\n\n"+ 
183                     'Roo.apply( ' +  cfg['*class'] + ".prototype , " :
184                     
185                     cfg['//*class'] + "\n" + 
186                     cfg['*class'] + " = ";
187                 
188                     
189                 endline = hasConstructor ? ');' : ';';
190             }
191                   
192             return this.outputHeader() + 
193                     newline + 
194                     this.objectToJsString(fcfg,1) +
195                     endline;
196             
197             
198             
199          
200         },
201         
202         
203         toSource: function()
204         {
205             // dump the file tree back out to a string.
206             
207             if (typeof(this.items[0]['*class']) != 'undefined') {
208                 return this.toSourceStdClass();
209             }
210             
211             
212             // technically there will be different versions of this.
213             var o = this.mungePropObj(this.items[0]);
214             //console.dump(o);
215             //Seed.quit();
216             
217             return this.outputHeader() + 
218                 [
219                     "function create()",
220                     "{",
221                     "    return "
222                 ].join("\n") +
223                 this.objectToJsString(o,2) +
224                 [
225                     ";", // end return value..
226                     "}"
227                 ].join("\n");
228             
229             
230             
231                 
232                     
233                 
234                     
235                    
236             
237         },
238        
239         outputHeader : function()
240         {
241             var ret = '//<script type="text/javascript">' + "\n";
242             ret += "\n\n// gi imports\n";
243             Roo.each(this.giImports, function(i) {
244                 ret += i + " =  imports.gi." + i + ";\n";
245             });
246             ret += "\n\n// file imports\n";
247             for(var k in this.imports) {
248                 ret += k + " =  imports[" + JSON.stringify(this.imports[k]) + "];\n";
249             }
250             
251             return ret + "\n\n";
252         }
253         
254         /*
255         getTree : function( o ) {
256             
257             
258             
259         }
260         */
261         
262     });