src/JsRender/Gtk.vala
[app.Builder.js] / src / JsRender / Gtk.vala
1 /**
2  * 
3  *  this is the code represents a File when using the Gtk view..
4  *   
5  *  It ues NodeToGtk
6  * 
7  * 
8  */
9
10 namespace JsRender {
11
12
13  
14     int gid = 1;
15
16   
17     public  class Gtk : JsRender
18     {
19        
20
21         public Gtk(Project.Project project, string path) {
22         
23             base( project, path);
24             this.xtype = "Gtk";
25             this.language = "vala";
26             
27             
28             //this.items = false;
29             //if (cfg.json) {
30             //    var jstr =  JSON.parse(cfg.json);
31             //    this.items = [ jstr ];
32             //    //console.log(cfg.items.length);
33             //    delete cfg.json; // not needed!
34             // }
35              
36             
37             
38             // super?!?!
39             this.id = "file-gtk-%d".printf(gid++);
40             //console.dump(this);
41             // various loader methods..
42
43             // Class = list of arguments ... and which property to use as a value.
44        
45
46             
47             
48         }
49           
50
51         /*
52         setNSID : function(id)
53         {
54             
55             this.items[0]['*class'] = id;
56             
57             
58         },
59         getType: function() {
60             return 'Gtk';
61         },
62         */
63
64         public   override void   removeFiles() {
65                 var js = GLib.Path.get_dirname(this.path) +"/" +  name + ".js";
66                 if (FileUtils.test(js, FileTest.EXISTS)) {
67                         GLib.FileUtils.remove(js);
68                 }
69                 var vala = GLib.Path.get_dirname(this.path) +"/" + name + ".vala";
70                 if (FileUtils.test(vala, FileTest.EXISTS)) {
71                         GLib.FileUtils.remove(vala);
72                 }
73         }
74         
75          public   override void  loadItems() throws GLib.Error // : function(cb, sync) == original was async.
76         {
77           
78             print("load Items!");
79             if (this.tree != null) {
80                 return;
81             }
82             
83             print("load: " + this.path);
84
85
86             var pa = new Json.Parser();
87             pa.load_from_file(this.path);
88             var node = pa.get_root();
89             
90             if (node.get_node_type () != Json.NodeType.OBJECT) {
91                         throw new Error.INVALID_FORMAT ("Unexpected element type %s", node.type_name ());
92                 }
93             var obj = node.get_object ();
94             //this.modOrder = obj.get_string_member("modOrder");
95             this.name = obj.get_string_member("name");
96             this.parent = obj.get_string_member("parent");
97             //this.permname = obj.get_string_member("permname");
98             this.title = obj.get_string_member("title");
99             //this.modOrder = obj.get_string_member("modOrder");
100              
101             // load items[0] ??? into tree...
102             var bjs_version_str = this.jsonHasOrEmpty(obj, "bjs-version");
103             bjs_version_str = bjs_version_str == "" ? "1" : bjs_version_str;
104
105             if (obj.has_member("items") 
106                         && 
107                         obj.get_member("items").get_node_type() == Json.NodeType.ARRAY
108                         &&
109                         obj.get_array_member("items").get_length() > 0
110                 ) {
111                     var ar = obj.get_array_member("items");
112                     var tree_base = ar.get_object_element(0);
113                     this.tree = new Node();
114                     this.tree.loadFromJson(tree_base, int.parse(bjs_version_str));
115
116             }
117             
118             
119         }
120          
121          // convert xtype for munged output..
122          
123          /*
124         mungeXtype : function(xtype, els)
125         {
126             els.push('xtype: '+ xtype);
127         },
128         */
129                 
130         public override string toSourcePreview()
131         {
132                         return "";
133                 }
134       
135         public override string toSource()
136         {
137         
138             
139             if (this.tree == null) {
140                 return "";
141             }
142             
143             // var data = JSON.parse(JSON.stringify(this.items[0]));
144             // we should base this on the objects in the tree really..
145             string[]  inc = { "Gtk", "Gdk", "Pango", "GLib", "Gio", "GObject", 
146                 "GtkSource", "WebKit", "Vte" }; //, "GtkClutter" , "Gdl"];
147             var src = "";
148                          
149             for (var i=0; i< inc.length; i++) {
150                                 var e = inc[i];
151                 src += e+" = imports.gi." + e +";\n";
152             }
153             
154             src += "console = imports.console;\n"; // path?!!?
155             src += "XObject = imports.XObject.XObject;\n"; // path?!!?
156             
157             
158             src += this.name + "=new XObject("+ this.mungeToString("    ") + ");\n";
159             src += this.name + ".init();\n";
160             // register it in the cache
161             src += "XObject.cache['/" + this.name + "'] = " + this.name + ";\n";
162             
163             
164             return src;
165             
166             
167         }
168                 
169         public override void save() {
170             this.saveBJS();
171             // this.saveJS(); - disabled at present.. project settings will probably enable this later..
172                 
173             this.saveVala();
174         }
175             // ignore these calls.
176         public override void saveHTML ( string html ) {}
177             
178                     
179         /** 
180          *  saveJS
181          * 
182          * save as a javascript file.
183          * why is this not save...???
184          * 
185          */ 
186           
187         void saveJS()
188         {
189              
190             var fn = GLib.Path.get_dirname(this.path) + "/" + this.name + ".js";
191             print("WRITE :%s\n " , fn);
192             this.writeFile(fn, this.toSource());
193             
194         }
195         
196        void  saveVala()
197         {
198                 if (this.tree == null) {
199                         return;
200                 }
201                 var fn = GLib.Path.get_dirname(this.path) + "/" + this.name + ".vala";
202                 print("WRITE :%s\n " , fn);
203                 this.writeFile(fn,  NodeToVala.mungeFile(this));
204             
205             
206         }
207                 /*
208         valaCompileCmd : function()
209         {
210             
211             var fn = '/tmp/' + this.name + '.vala';
212             print("WRITE : " + fn);
213             File.write(fn, this.toVala(true));
214             
215             
216             
217             return ["valac",
218                    "--pkg",  "gio-2.0",
219                    "--pkg" , "posix" ,
220                    "--pkg" , "gtk+-3.0",
221                    "--pkg",  "libnotify",
222                    "--pkg",  "gtksourceview-3.0",
223                    "--pkg", "libwnck-3.0",
224                    fn ,   "-o", "/tmp/" + this.name];
225             
226            
227              
228             
229         },
230         */
231         
232    
233         string getHelpUrl(string cls)
234         {
235             return "http://devel.akbkhome.com/seed/" + cls + ".html";
236         }
237         public override void  findTransStrings(Node? node )
238                 {
239                         // not yet..
240                 }
241         
242         
243           
244
245                 
246
247         }
248 }
249
250
251