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                 
95                 
96                 // update to new JSDOC api!?
97                 
98                 var tstream =  new JSDOC.TextStream(src);
99                 var tr = new  JSDOC.TokenReader( {
100                     keepWhite : true,
101                     keepComments : true
102                 });
103                 var toks = tr.tokenize(tstream);
104                 //console.dump(toks);
105                 //Seed.quit();
106                 var ts = new JSDOC.Collapse(toks);
107                 //console.dump(ts.tokens);
108                 var rd = new JSDOC.GtkFile(ts.tokens);
109                 try {
110                     rd.parse();
111                 } catch (e) {
112                     console.log(e);
113                     _this.items = [ src ];
114                     cb();
115                     return;
116                 }
117                  
118                 console.dump(rd.cfg);
119                 //!!??? have we got engouth!
120                 // try parsing self..
121                 _this.items = [ rd.cfg ];
122                 _this.imports = rd.imports;
123                 _this.giImports = rd.giImports ;
124                 
125                 cb();
126                 
127                 
128             });
129             
130             
131             
132         },
133         /** 
134          * fixme - update to new style
135          * 
136          * 
137          * 
138          */
139         
140         toSourceStdClass: function()
141         {
142             var cfg = this.items[0]
143             var fcfg = XObject.extend({ },  this.items[0]);
144             delete fcfg['*class'];
145             delete fcfg['*extends'];
146             delete fcfg['*static'];
147             delete fcfg['|constructor'];
148             
149             var hasExtends = (typeof(cfg['*extends']) != 'undefined') && cfg['*extends'].length;
150             var hasConstructor = (typeof(cfg['|constructor']) != 'undefined');
151             var isStatic = (typeof(cfg['*static']) == '*static');
152             
153             var newline = '';
154             var endline = '';
155             if (hasExtends) {
156                 newline =  hasConstructor ? 
157                 
158                  
159                     cfg['//constructor'] + "\n" + 
160                     cfg['*class'] + " = " + cfg['|constructor'] + "\n\n"+ 
161                     "Roo.extend(" + cfg['*class'] + ":, " + cfg['*extends'] + ", " :
162                     
163                     cfg['//*class'] + "\n" + 
164                     cfg['*class'] + " = new " + cfg['*extends'] + "(" ;
165                 
166                 endline = ');';
167             } else {
168                 
169                 
170                 
171                 newline  = hasConstructor ? 
172                 
173                     cfg['//constructor'] + "\n" + 
174                     cfg['*class'] + " = " + cfg['|constructor'] + "\n\n"+ 
175                     'Roo.apply( ' +  cfg['*class'] + ".prototype , " :
176                     
177                     cfg['//*class'] + "\n" + 
178                     cfg['*class'] + " = ";
179                 
180                     
181                 endline = hasConstructor ? ');' : ';';
182             }
183                   
184             return this.outputHeader() + 
185                     newline + 
186                     this.objectToJsString(fcfg,1) +
187                     endline;
188             
189             
190             
191          
192         },
193         
194         
195         toSource: function()
196         {
197             // dump the file tree back out to a string.
198             
199             if (typeof(this.items[0]['*class']) != 'undefined') {
200                 return this.toSourceStdClass();
201             }
202             
203             
204             // technically there will be different versions of this.
205             var o = this.mungePropObj(this.items[0]);
206             //console.dump(o);
207             //Seed.quit();
208             
209             return this.outputHeader() + 
210                 [
211                     "function create()",
212                     "{",
213                     "    return "
214                 ].join("\n") +
215                 this.objectToJsString(o,2) +
216                 [
217                     ";", // end return value..
218                     "}"
219                 ].join("\n");
220             
221             
222             
223                 
224                     
225                 
226                     
227                    
228             
229         },
230        
231         outputHeader : function()
232         {
233             var ret = '//<script type="text/javascript">' + "\n";
234             ret += "\n\n// gi imports\n";
235             Roo.each(this.giImports, function(i) {
236                 ret += i + " =  imports.gi." + i + ";\n";
237             });
238             ret += "\n\n// file imports\n";
239             for(var k in this.imports) {
240                 ret += k + " =  imports[" + JSON.stringify(this.imports[k]) + "];\n";
241             }
242             
243             return ret + "\n\n";
244         }
245         
246         /*
247         getTree : function( o ) {
248             
249             
250             
251         }
252         */
253         
254     });