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 id = 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-' + id++;
57         // various loader methods..
58        
59     },
60     Base,   
61     {
62         
63         setNSID : function(id)
64         {
65             
66             this.items[0]['*class'] = id;
67             
68             
69         },
70         loadItems : function(cb)
71         {
72             if (!cb) {
73                 throw "no callback for loadItems";
74             }
75             console.log("load Items!");
76             if (this.items.length) {
77                 return false;
78             }
79             Seed.print("load: " + this.path);
80             
81             
82             var file = Gio.file_new_for_path(this.path);
83             
84             var _this = this;                        
85             file.read_async(0, null, function(source,result) {
86                 var stream = source.read_finish(result)
87                 var dstream = new Gio.DataInputStream.c_new(stream);
88                 
89                 var src = dstream.read_until("");
90                 
91                 
92                 // update to new JSDOC api!?
93                 
94                 var tstream =  new JSDOC.TextStream(src);
95                 var tr = new  JSDOC.TokenReader( {
96                     keepWhite : true,
97                     keepComments : true
98                 });
99                 var toks = tr.tokenize(tstream);
100                 //console.dump(toks);
101                 //Seed.quit();
102                 var ts = new JSDOC.Collapse(toks);
103                 //console.dump(ts.tokens);
104                 var rd = new JSDOC.GtkFile(ts.tokens);
105                 try {
106                     rd.parse();
107                 } catch (e) {
108                     console.log(e);
109                     _this.items = [ src ];
110                     cb();
111                     return;
112                 }
113                  
114                 console.dump(rd.cfg);
115                 //!!??? have we got engouth!
116                 // try parsing self..
117                 _this.items = [ rd.cfg ];
118                 _this.imports = rd.imports;
119                 _this.giImports = rd.giImports ;
120                 
121                 cb();
122                 
123                 
124             });
125             
126             
127             
128         },
129         
130         toSourceStdClass: function()
131         {
132             var cfg = this.items[0]
133             var fcfg = Roo.apply({ },  this.items[0]);
134             delete fcfg['*class'];
135             delete fcfg['*extends'];
136             delete fcfg['*static'];
137             delete fcfg['|constructor'];
138             
139             var hasExtends = (typeof(cfg['*extends']) != 'undefined') && cfg['*extends'].length;
140             var hasConstructor = (typeof(cfg['|constructor']) != 'undefined');
141             var isStatic = (typeof(cfg['*static']) == '*static');
142             
143             var newline = '';
144             var endline = '';
145             if (hasExtends) {
146                 newline =  hasConstructor ? 
147                 
148                  
149                     cfg['//constructor'] + "\n" + 
150                     cfg['*class'] + " = " + cfg['|constructor'] + "\n\n"+ 
151                     "Roo.extend(" + cfg['*class'] + ":, " + cfg['*extends'] + ", " :
152                     
153                     cfg['//*class'] + "\n" + 
154                     cfg['*class'] + " = new " + cfg['*extends'] + "(" ;
155                 
156                 endline = ');';
157             } else {
158                 
159                 
160                 
161                 newline  = hasConstructor ? 
162                 
163                     cfg['//constructor'] + "\n" + 
164                     cfg['*class'] + " = " + cfg['|constructor'] + "\n\n"+ 
165                     'Roo.apply( ' +  cfg['*class'] + ".prototype , " :
166                     
167                     cfg['//*class'] + "\n" + 
168                     cfg['*class'] + " = ";
169                 
170                     
171                 endline = hasConstructor ? ');' : ';';
172             }
173                   
174             return this.outputHeader() + 
175                     newline + 
176                     this.objectToJsString(fcfg,1) +
177                     endline;
178             
179             
180             
181          
182         },
183         
184         
185         toSource: function()
186         {
187             // dump the file tree back out to a string.
188             
189             if (typeof(this.items[0]['*class']) != 'undefined') {
190                 return this.toSourceStdClass();
191             }
192             
193             
194             // technically there will be different versions of this.
195             var o = this.mungePropObj(this.items[0]);
196             //console.dump(o);
197             //Seed.quit();
198             
199             return this.outputHeader() + 
200                 [
201                     "function create()",
202                     "{",
203                     "    return "
204                 ].join("\n") +
205                 this.objectToJsString(o,2) +
206                 [
207                     ";", // end return value..
208                     "}"
209                 ].join("\n");
210             
211             
212             
213                 
214                     
215                 
216                     
217                    
218             
219         },
220        
221         outputHeader : function()
222         {
223             var ret = '//<script type="text/javascript">' + "\n";
224             ret += "\n\n// gi imports\n";
225             Roo.each(this.giImports, function(i) {
226                 ret += i + " =  imports.gi." + i + ";\n";
227             });
228             ret += "\n\n// file imports\n";
229             for(var k in this.imports) {
230                 ret += k + " =  imports[" + JSON.stringify(this.imports[k]) + "];\n";
231             }
232             
233             return ret + "\n\n";
234         }
235         
236         /*
237         getTree : function( o ) {
238             
239             
240             
241         }
242         */
243         
244     });