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