src/Builder4/ValaCompileErrors.bjs
[app.Builder.js] / src / Builder4 / ValaCompileErrors.vala
1 static Xcls_ValaCompileErrors  _ValaCompileErrors;
2
3 public class Xcls_ValaCompileErrors : Object 
4 {
5     public Gtk.Popover el;
6     private Xcls_ValaCompileErrors  _this;
7
8     public static Xcls_ValaCompileErrors singleton()
9     {
10         if (_ValaCompileErrors == null) {
11             _ValaCompileErrors= new Xcls_ValaCompileErrors();
12         }
13         return _ValaCompileErrors;
14     }
15     public Xcls_compile_view compile_view;
16     public Xcls_save_btn save_btn;
17     public Xcls_hpane hpane;
18     public Xcls_compile_tree compile_tree;
19     public Xcls_compile_result_store compile_result_store;
20     public Xcls_renderer renderer;
21     public Xcls_sourceview sourceview;
22
23         // my vars (def)
24     public Xcls_MainWindow window;
25     public bool active;
26     public JsRender.JsRender? file;
27     public Json.Object notices;
28
29     // ctor 
30     public Xcls_ValaCompileErrors()
31     {
32         _this = this;
33         this.el = new Gtk.Popover( null );
34
35         // my vars (dec)
36         this.active = false;
37
38         // set gobject values
39         this.el.width_request = 900;
40         this.el.height_request = 800;
41         this.el.modal = false;
42         this.el.position = Gtk.PositionType.TOP;
43         var child_0 = new Xcls_compile_view( _this );
44         child_0.ref();
45         this.el.add (  child_0.el  );
46
47         // listeners 
48         this.el.closed.connect( () => {
49             if (this.active) {
50                 this.el.show();
51                 return;
52             }
53            
54         });
55     }
56
57     // user defined functions 
58     public void show (Json.Object tree, Gtk.Widget onbtn) {
59     
60             
61             this.file = null;
62             this.notices = tree;
63             this.active = true;
64              //print("looking for %s\n", id);
65             // loop through parent childnre
66               
67             
68             var store = this.compile_result_store.el;    
69             
70             store.clear();
71          
72             
73             tree.foreach_member((obj, file, node) => {
74                 // id line "display text", file
75                 
76                 var title = GLib.Path.get_basename(GLib.Path.get_dirname( file)) + "/" +  GLib.Path.get_basename( file) ;
77                 Gtk.TreeIter iter;
78                 print("Add file %s", title);
79                 store.append(out iter, null);
80                 var lines = tree.get_object_member(file);
81                 title += " (" + lines.get_size().to_string() + ")";
82                 store.set(iter, 0, file, 1, 0, 2, title, 3, file,-1);
83                 
84                 lines.foreach_member((obja, line, nodea) => {
85                     var msg  = "";
86                     var ar = lines.get_array_member(line);
87                     for (var i = 0 ; i < ar.get_length(); i++) {
88                             msg += (msg.length > 0) ? "\n" : "";
89                             msg += ar.get_string_element(i);
90                 }
91                     Gtk.TreeIter citer;  
92                     print("Add line %s", line);
93                     store.append(out citer, iter);
94                     store.set(citer, 
95                         0, file + ":" + line, 
96                         1, int.parse(line), 
97                         2, GLib.Markup.escape_text(line + ": " + msg), 
98                         3, file,-1);
99                 
100                 });
101                 
102                 
103             
104             });
105             
106         int w,h;
107         this.window.el.get_size(out w, out h);
108         
109         // left tree = 250, editor area = 500?
110         
111         var new_w = int.min(750, w-100);
112         if (new_w > (w-100)) {
113             new_w = w-100;
114         }
115         this.el.set_size_request( int.max(100, new_w), int.max(100, h-120));
116     
117         
118         this.hpane.el.set_position(250);
119        if (this.el.relative_to == null) {
120             this.el.set_relative_to(onbtn);
121         }
122         this.el.show_all();
123         this.save_btn.el.hide();          
124     
125     }
126     public class Xcls_compile_view : Object 
127     {
128         public Gtk.VBox el;
129         private Xcls_ValaCompileErrors  _this;
130
131
132             // my vars (def)
133
134         // ctor 
135         public Xcls_compile_view(Xcls_ValaCompileErrors _owner )
136         {
137             _this = _owner;
138             _this.compile_view = this;
139             this.el = new Gtk.VBox( false, 0 );
140
141             // my vars (dec)
142
143             // set gobject values
144             var child_0 = new Xcls_HBox3( _this );
145             child_0.ref();
146             this.el.pack_start (  child_0.el , false,false,0 );
147             var child_1 = new Xcls_hpane( _this );
148             child_1.ref();
149             this.el.pack_start (  child_1.el , true,true,0 );
150         }
151
152         // user defined functions 
153     }
154     public class Xcls_HBox3 : Object 
155     {
156         public Gtk.HBox el;
157         private Xcls_ValaCompileErrors  _this;
158
159
160             // my vars (def)
161
162         // ctor 
163         public Xcls_HBox3(Xcls_ValaCompileErrors _owner )
164         {
165             _this = _owner;
166             this.el = new Gtk.HBox( true, 0 );
167
168             // my vars (dec)
169
170             // set gobject values
171             var child_0 = new Xcls_Button4( _this );
172             child_0.ref();
173             this.el.pack_start (  child_0.el , true,true,0 );
174             var child_1 = new Xcls_Button5( _this );
175             child_1.ref();
176             this.el.pack_start (  child_1.el , true,true,0 );
177             var child_2 = new Xcls_save_btn( _this );
178             child_2.ref();
179             this.el.pack_start (  child_2.el , true,true,0 );
180         }
181
182         // user defined functions 
183     }
184     public class Xcls_Button4 : Object 
185     {
186         public Gtk.Button el;
187         private Xcls_ValaCompileErrors  _this;
188
189
190             // my vars (def)
191
192         // ctor 
193         public Xcls_Button4(Xcls_ValaCompileErrors _owner )
194         {
195             _this = _owner;
196             this.el = new Gtk.Button();
197
198             // my vars (dec)
199
200             // set gobject values
201             this.el.label = "Compile and Run";
202         }
203
204         // user defined functions 
205     }
206     public class Xcls_Button5 : Object 
207     {
208         public Gtk.Button el;
209         private Xcls_ValaCompileErrors  _this;
210
211
212             // my vars (def)
213
214         // ctor 
215         public Xcls_Button5(Xcls_ValaCompileErrors _owner )
216         {
217             _this = _owner;
218             this.el = new Gtk.Button();
219
220             // my vars (dec)
221
222             // set gobject values
223             this.el.label = "Edit";
224
225             // listeners 
226             this.el.clicked.connect( () => {
227                 // is the file managed by the builder?
228                 
229                 var f = _this.sourceview.curfname;
230                 
231                 Regex regex = new Regex("\\.vala$");
232             
233                 var bjsf = regex.replace(f,f.length , 0 , ".bjs");
234                 
235                 var p = _this.window.project;
236                 
237                 
238                 
239                 var jsr = p.getByPath(bjsf);
240                 if (jsr != null) {
241                     _this.window.windowstate.fileViewOpen(jsr);
242                     
243                     return;
244                 
245                 }
246             
247             
248             });
249         }
250
251         // user defined functions 
252     }
253     public class Xcls_save_btn : Object 
254     {
255         public Gtk.Button el;
256         private Xcls_ValaCompileErrors  _this;
257
258
259             // my vars (def)
260
261         // ctor 
262         public Xcls_save_btn(Xcls_ValaCompileErrors _owner )
263         {
264             _this = _owner;
265             _this.save_btn = this;
266             this.el = new Gtk.Button();
267
268             // my vars (dec)
269
270             // set gobject values
271             this.el.label = "Save";
272             this.el.visible = false;
273         }
274
275         // user defined functions 
276     }
277     public class Xcls_hpane : Object 
278     {
279         public Gtk.HPaned el;
280         private Xcls_ValaCompileErrors  _this;
281
282
283             // my vars (def)
284
285         // ctor 
286         public Xcls_hpane(Xcls_ValaCompileErrors _owner )
287         {
288             _this = _owner;
289             _this.hpane = this;
290             this.el = new Gtk.HPaned();
291
292             // my vars (dec)
293
294             // set gobject values
295             var child_0 = new Xcls_ScrolledWindow8( _this );
296             child_0.ref();
297             this.el.add (  child_0.el  );
298             var child_1 = new Xcls_ScrolledWindow13( _this );
299             child_1.ref();
300             this.el.add (  child_1.el  );
301         }
302
303         // user defined functions 
304     }
305     public class Xcls_ScrolledWindow8 : Object 
306     {
307         public Gtk.ScrolledWindow el;
308         private Xcls_ValaCompileErrors  _this;
309
310
311             // my vars (def)
312
313         // ctor 
314         public Xcls_ScrolledWindow8(Xcls_ValaCompileErrors _owner )
315         {
316             _this = _owner;
317             this.el = new Gtk.ScrolledWindow( null, null );
318
319             // my vars (dec)
320
321             // set gobject values
322             var child_0 = new Xcls_compile_tree( _this );
323             child_0.ref();
324             this.el.add (  child_0.el  );
325
326             // init method 
327
328             {
329              this.el.set_policy (Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);
330              
331             
332             }
333         }
334
335         // user defined functions 
336     }
337     public class Xcls_compile_tree : Object 
338     {
339         public Gtk.TreeView el;
340         private Xcls_ValaCompileErrors  _this;
341
342
343             // my vars (def)
344
345         // ctor 
346         public Xcls_compile_tree(Xcls_ValaCompileErrors _owner )
347         {
348             _this = _owner;
349             _this.compile_tree = this;
350             this.el = new Gtk.TreeView();
351
352             // my vars (dec)
353
354             // set gobject values
355             var child_0 = new Xcls_compile_result_store( _this );
356             child_0.ref();
357             this.el.set_model (  child_0.el  );
358             var child_1 = new Xcls_column( _this );
359             child_1.ref();
360             this.el.append_column (  child_1.el  );
361
362             // init method 
363
364             {
365              var description = new Pango.FontDescription();
366                 description.set_size(8000);
367                 this.el.modify_font(description);
368             
369             }
370
371             // listeners 
372             this.el.cursor_changed.connect( () => {
373                 var sel = this.el.get_selection();
374              
375                         if (sel.count_selected_rows() < 1) {
376             
377                             print("selected rows < 1\n");
378                             //??this.mo 
379                             return  ;
380                         }
381                             
382                             //console.log('changed');
383                          
384                          Gtk.TreeIter iter;
385                          Gtk.TreeModel mod;
386                         sel.get_selected(out mod, out iter);
387                         /*
388                          store.set(citer, 
389                                 0, file + ":" + line, 
390                                 1, int.parse(line), 
391                                 2, GLib.Markup.escape_text(line + ": " + msg), 
392                                 3, file,-1);
393                         
394                         });
395                         */
396                         
397                         
398                         
399                         // var val = "";
400                         GLib.Value value;
401                         _this.compile_result_store.el.get_value(iter, 3, out value);
402                         var fname = (string)value;
403                         GLib.Value lvalue;
404                         _this.compile_result_store.el.get_value(iter, 1, out lvalue);
405                         var line = (int) lvalue;
406                         
407                         print ("loadfile %s : %d", fname,line);
408                         
409                         _this.sourceview.loadFile(fname, line);
410                         
411                         
412                         
413                         
414             });
415         }
416
417         // user defined functions 
418     }
419     public class Xcls_compile_result_store : Object 
420     {
421         public Gtk.TreeStore el;
422         private Xcls_ValaCompileErrors  _this;
423
424
425             // my vars (def)
426
427         // ctor 
428         public Xcls_compile_result_store(Xcls_ValaCompileErrors _owner )
429         {
430             _this = _owner;
431             _this.compile_result_store = this;
432             this.el = new Gtk.TreeStore( 4,   typeof(string), typeof(int), typeof(string), typeof(string)  );
433
434             // my vars (dec)
435
436             // set gobject values
437         }
438
439         // user defined functions 
440     }
441     public class Xcls_column : Object 
442     {
443         public Gtk.TreeViewColumn el;
444         private Xcls_ValaCompileErrors  _this;
445
446
447             // my vars (def)
448
449         // ctor 
450         public Xcls_column(Xcls_ValaCompileErrors _owner )
451         {
452             _this = _owner;
453             this.el = new Gtk.TreeViewColumn();
454
455             // my vars (dec)
456
457             // set gobject values
458             this.el.title = "Compile output";
459             var child_0 = new Xcls_renderer( _this );
460             child_0.ref();
461             this.el.pack_start (  child_0.el , true );
462
463             // init method 
464
465             {
466               this.el.add_attribute(_this.renderer.el , "markup", 2 );
467              
468             }
469         }
470
471         // user defined functions 
472     }
473     public class Xcls_renderer : Object 
474     {
475         public Gtk.CellRendererText el;
476         private Xcls_ValaCompileErrors  _this;
477
478
479             // my vars (def)
480
481         // ctor 
482         public Xcls_renderer(Xcls_ValaCompileErrors _owner )
483         {
484             _this = _owner;
485             _this.renderer = this;
486             this.el = new Gtk.CellRendererText();
487
488             // my vars (dec)
489
490             // set gobject values
491         }
492
493         // user defined functions 
494     }
495     public class Xcls_ScrolledWindow13 : Object 
496     {
497         public Gtk.ScrolledWindow el;
498         private Xcls_ValaCompileErrors  _this;
499
500
501             // my vars (def)
502
503         // ctor 
504         public Xcls_ScrolledWindow13(Xcls_ValaCompileErrors _owner )
505         {
506             _this = _owner;
507             this.el = new Gtk.ScrolledWindow( null, null );
508
509             // my vars (dec)
510
511             // set gobject values
512             var child_0 = new Xcls_sourceview( _this );
513             child_0.ref();
514             this.el.add (  child_0.el  );
515         }
516
517         // user defined functions 
518     }
519     public class Xcls_sourceview : Object 
520     {
521         public Gtk.SourceView el;
522         private Xcls_ValaCompileErrors  _this;
523
524
525             // my vars (def)
526         public string curfname;
527
528         // ctor 
529         public Xcls_sourceview(Xcls_ValaCompileErrors _owner )
530         {
531             _this = _owner;
532             _this.sourceview = this;
533             this.el = new Gtk.SourceView();
534
535             // my vars (dec)
536
537             // set gobject values
538             this.el.editable = false;
539             this.el.show_line_marks = true;
540             this.el.show_line_numbers = true;
541
542             // init method 
543
544             {
545                 this.curfname = "";
546                    var description =   Pango.FontDescription.from_string("monospace");
547                 description.set_size(8000);
548                 this.el.override_font(description);
549             
550                 var attrs = new Gtk.SourceMarkAttributes();
551                 var  pink = new Gdk.RGBA();
552                 pink.parse ( "pink");
553                 attrs.set_background ( pink);
554                 attrs.set_icon_name ( "process-stop");    
555                 attrs.query_tooltip_text.connect(( mark) => {
556                     //print("tooltip query? %s\n", mark.name);
557                     return mark.name;
558                 });
559                 
560                 this.el.set_mark_attributes ("error", attrs, 1);
561                 
562             }
563         }
564
565         // user defined functions 
566         public void loadFile (string fname, int line ) {
567           var buf = ((Gtk.SourceBuffer)(this.el.get_buffer()));
568               
569             if (this.curfname != fname) {
570                 this.curfname = fname;
571         
572                 Gtk.TextIter start;
573                 Gtk.TextIter end;     
574                 buf.get_bounds (out start, out end);
575                     
576                 buf.remove_source_marks (start, end, null);
577                      
578                  
579                 
580                 string str;
581                 FileUtils.get_contents(fname, out str);
582                                 
583                 buf.set_text(str, str.length);
584                 var lm = Gtk.SourceLanguageManager.get_default();
585                 
586                
587                 buf.set_language(lm.get_language("vala"));
588              
589                  
590                 this.el.grab_focus();
591         
592         
593                
594                 var lines = _this.notices.get_object_member(fname);
595                  
596                     
597                 lines.foreach_member((obj, line, node) => {
598                     
599                          Gtk.TextIter iter;
600                 //        print("get inter\n");
601                         var eline = int.parse(line) -1 ;
602                          
603                         
604                         buf.get_iter_at_line( out iter, eline);
605                         //print("mark line\n");
606                         var msg  = "Line: %d".printf(eline+1);
607                         var ar = lines.get_array_member(line);
608                         for (var i = 0 ; i < ar.get_length(); i++) {
609                                 msg += (msg.length > 0) ? "\n" : "";
610                                 msg += ar.get_string_element(i);
611                         }
612                         
613                         
614                         buf.create_source_mark(msg, "error", iter);
615                     } );
616             }
617             // jump to the line...
618             Gtk.TextIter liter;
619             buf.get_iter_at_line (out liter,  line);
620             print("Scroll to \n");
621             this.el.scroll_to_iter (liter, 0.0f, false, 0.0f, 0.5f);
622             print("End Scroll to \n");
623         
624         
625         }
626     }
627 }