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!\n");
79                         if (this.tree != null) {
80                                 this.loaded = true;
81                                 
82                                 return;
83                         }
84                         
85                         print("load: %s\n" , this.path);
86                         if (!GLib.FileUtils.test(this.path, GLib.FileTest.EXISTS)) {
87                                 // new file?!?
88                                 this.tree = null;
89                                 this.loaded = true;
90                                 return;
91                         }
92
93                         var pa = new Json.Parser();
94                         pa.load_from_file(this.path);
95                         var node = pa.get_root();
96                         
97                         if (node.get_node_type () != Json.NodeType.OBJECT) {
98                             throw new Error.INVALID_FORMAT ("Unexpected element type %s", node.type_name ());
99                         }
100                         var obj = node.get_object ();
101                         
102                         this.name = obj.get_string_member("name");
103                         this.parent = obj.get_string_member("parent");
104                         this.title = obj.get_string_member("title");
105                         
106                         if (obj.has_member("build_module")) { // should check type really..
107                                 this.build_module = obj.get_string_member("build_module");
108                         }
109                          
110                         // load items[0] ??? into tree...
111                         var bjs_version_str = this.jsonHasOrEmpty(obj, "bjs-version");
112                         bjs_version_str = bjs_version_str == "" ? "1" : bjs_version_str;
113
114                         if (obj.has_member("items") 
115                                 && 
116                                 obj.get_member("items").get_node_type() == Json.NodeType.ARRAY
117                                 &&
118                                 obj.get_array_member("items").get_length() > 0
119                         ) {
120                                 var ar = obj.get_array_member("items");
121                                 var tree_base = ar.get_object_element(0);
122                                 this.tree = new Node();
123                                 this.tree.loadFromJson(tree_base, int.parse(bjs_version_str));
124
125                         }
126                         NodeToVala.mungeFile(this); // force line numbering..
127                         this.loaded = true;
128                         
129                 }
130          
131         
132                 
133         public override string toSourcePreview()
134         {
135                         return "";
136                 }
137         public override void setSource(string str) {}
138         
139         public override string toSource()
140         {
141         
142             
143             if (this.tree == null) {
144                 return "";
145             }
146             
147             // var data = JSON.parse(JSON.stringify(this.items[0]));
148             // we should base this on the objects in the tree really..
149             string[]  inc = { "Gtk", "Gdk", "Pango", "GLib", "Gio", "GObject", 
150                 "GtkSource", "WebKit", "Vte" }; //, "GtkClutter" , "Gdl"];
151             var src = "";
152                          
153             for (var i=0; i< inc.length; i++) {
154                                 var e = inc[i];
155                 src += e+" = imports.gi." + e +";\n";
156             }
157             
158             src += "console = imports.console;\n"; // path?!!?
159             src += "XObject = imports.XObject.XObject;\n"; // path?!!?
160             
161             
162             src += this.name + "=new XObject("+ this.mungeToString("    ") + ");\n";
163             src += this.name + ".init();\n";
164             // register it in the cache
165             src += "XObject.cache['/" + this.name + "'] = " + this.name + ";\n";
166             
167             
168             return src;
169             
170             
171         }
172                 
173         public override void save() {
174             this.saveBJS();
175             // this.saveJS(); - disabled at present.. project settings will probably enable this later..
176                 
177             this.saveVala();
178         }
179             // ignore these calls.
180         public override void saveHTML ( string html ) {}
181             
182                     
183         /** 
184          *  saveJS
185          * 
186          * save as a javascript file.
187          * why is this not save...???
188          * 
189          */ 
190           
191         void saveJS()
192         {
193              
194             var fn = GLib.Path.get_dirname(this.path) + "/" + this.name + ".js";
195             print("WRITE :%s\n " , fn);
196             this.writeFile(fn, this.toSource());
197             
198         }
199         
200        void  saveVala()
201         {
202                 if (this.tree == null) {
203                         return;
204                 }
205                 var fn = GLib.Path.get_dirname(this.path) + "/" + this.name + ".vala";
206                 print("WRITE :%s\n " , fn);
207                         this.writeFile(fn,  NodeToVala.mungeFile(this));
208             
209             
210         }
211                 /*
212         valaCompileCmd : function()
213         {
214             
215             var fn = '/tmp/' + this.name + '.vala';
216             print("WRITE : " + fn);
217             File.write(fn, this.toVala(true));
218             
219             
220             
221             return ["valac",
222                    "--pkg",  "gio-2.0",
223                    "--pkg" , "posix" ,
224                    "--pkg" , "gtk+-3.0",
225                    "--pkg",  "libnotify",
226                    "--pkg",  "gtksourceview-3.0",
227                    "--pkg", "libwnck-3.0",
228                    fn ,   "-o", "/tmp/" + this.name];
229             
230            
231              
232             
233         },
234         */
235         
236    
237         string getHelpUrl(string cls)
238         {
239             return "http://devel.akbkhome.com/seed/" + cls + ".html";
240         }
241         public override void  findTransStrings(Node? node )
242                 {
243                         // not yet..
244                 }
245         
246         
247           
248
249                 
250
251         }
252 }
253
254
255