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_sourceview sourceview;
19     public Xcls_compile_tree compile_tree;
20     public Xcls_compile_result_store compile_result_store;
21     public Xcls_renderer renderer;
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(250, 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( 0);
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_ScrolledWindow10( _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_sourceview( _this );
323             child_0.ref();
324             this.el.add (  child_0.el  );
325         }
326
327         // user defined functions 
328     }
329     public class Xcls_sourceview : Object 
330     {
331         public Gtk.SourceView el;
332         private Xcls_ValaCompileErrors  _this;
333
334
335             // my vars (def)
336         public string curfname;
337
338         // ctor 
339         public Xcls_sourceview(Xcls_ValaCompileErrors _owner )
340         {
341             _this = _owner;
342             _this.sourceview = this;
343             this.el = new Gtk.SourceView();
344
345             // my vars (dec)
346
347             // set gobject values
348             this.el.editable = false;
349             this.el.show_line_marks = true;
350             this.el.show_line_numbers = true;
351
352             // init method 
353
354             {
355                 this.curfname = "";
356                    var description =   Pango.FontDescription.from_string("monospace");
357                 description.set_size(8000);
358                 this.el.override_font(description);
359             
360                 var attrs = new Gtk.SourceMarkAttributes();
361                 var  pink = new Gdk.RGBA();
362                 pink.parse ( "pink");
363                 attrs.set_background ( pink);
364                 attrs.set_icon_name ( "process-stop");    
365                 attrs.query_tooltip_text.connect(( mark) => {
366                     //print("tooltip query? %s\n", mark.name);
367                     return mark.name;
368                 });
369                 
370                 this.el.set_mark_attributes ("error", attrs, 1);
371                 
372             }
373         }
374
375         // user defined functions 
376         public void loadFile (string fname, int line ) {
377         
378             
379             // resize the view...
380             
381             // left tree = 250, editor area = 500?
382             
383             if (_this.hpane.el.get_position() < 1) {
384                  int w,h;
385                 _this.window.el.get_size(out w, out h);
386                 
387                 var new_w = int.min(750, w-100);
388                 if (new_w > (w-100)) {
389                     new_w = w-100;
390                 }
391                 _this.el.set_size_request( int.max(100, new_w), int.max(100, h-120));
392              
393                 _this.hpane.el.set_position( _this.hpane.el.max_position - 250);
394         
395             }
396         
397             var buf = ((Gtk.SourceBuffer)(this.el.get_buffer()));
398               
399             if (this.curfname != fname) {
400                 this.curfname = fname;
401                 
402                 
403                 Regex regex = new Regex("\\.vala$");
404         
405                 var bjsf = regex.replace(fname,fname.length , 0 , ".bjs");
406                 
407                 var p = _this.window.project;
408                 
409                 var jsr = p.getByPath(bjsf);
410                 
411                 if (_this.file != null) {
412                     // remove listeners from the file...
413                 }
414                 
415                 _this.file = null;
416                 
417                 if (jsr != null) {
418                     _this.file = jsr;
419                     
420                     return;
421                 
422                 }
423                 
424                 
425                 
426         
427                 Gtk.TextIter start;
428                 Gtk.TextIter end;     
429                 buf.get_bounds (out start, out end);
430                     
431                 buf.remove_source_marks (start, end, null);
432                      
433                  
434                 
435                 string str;
436                 FileUtils.get_contents(fname, out str);
437                                 
438                 buf.set_text(str, str.length);
439                 var lm = Gtk.SourceLanguageManager.get_default();
440                 
441                
442                 buf.set_language(lm.get_language("vala"));
443              
444                  
445                 this.el.grab_focus();
446         
447         
448                
449                 var lines = _this.notices.get_object_member(fname);
450                  
451                     
452                 lines.foreach_member((obj, line, node) => {
453                     
454                          Gtk.TextIter iter;
455                 //        print("get inter\n");
456                         var eline = int.parse(line) -1 ;
457                          
458                         
459                         buf.get_iter_at_line( out iter, eline);
460                         //print("mark line\n");
461                         var msg  = "Line: %d".printf(eline+1);
462                         var ar = lines.get_array_member(line);
463                         for (var i = 0 ; i < ar.get_length(); i++) {
464                                 msg += (msg.length > 0) ? "\n" : "";
465                                 msg += ar.get_string_element(i);
466                         }
467                         
468                         
469                         buf.create_source_mark(msg, "error", iter);
470                     } );
471             }
472             // jump to the line...
473             Gtk.TextIter liter;
474             buf.get_iter_at_line (out liter,  line);
475             print("Scroll to \n");
476             this.el.scroll_to_iter (liter, 0.0f, false, 0.0f, 0.5f);
477             print("End Scroll to \n");
478         
479         
480         }
481     }
482     public class Xcls_ScrolledWindow10 : Object 
483     {
484         public Gtk.ScrolledWindow el;
485         private Xcls_ValaCompileErrors  _this;
486
487
488             // my vars (def)
489
490         // ctor 
491         public Xcls_ScrolledWindow10(Xcls_ValaCompileErrors _owner )
492         {
493             _this = _owner;
494             this.el = new Gtk.ScrolledWindow( null, null );
495
496             // my vars (dec)
497
498             // set gobject values
499             var child_0 = new Xcls_compile_tree( _this );
500             child_0.ref();
501             this.el.add (  child_0.el  );
502
503             // init method 
504
505             {
506              this.el.set_policy (Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);
507              
508             
509             }
510         }
511
512         // user defined functions 
513     }
514     public class Xcls_compile_tree : Object 
515     {
516         public Gtk.TreeView el;
517         private Xcls_ValaCompileErrors  _this;
518
519
520             // my vars (def)
521
522         // ctor 
523         public Xcls_compile_tree(Xcls_ValaCompileErrors _owner )
524         {
525             _this = _owner;
526             _this.compile_tree = this;
527             this.el = new Gtk.TreeView();
528
529             // my vars (dec)
530
531             // set gobject values
532             var child_0 = new Xcls_compile_result_store( _this );
533             child_0.ref();
534             this.el.set_model (  child_0.el  );
535             var child_1 = new Xcls_column( _this );
536             child_1.ref();
537             this.el.append_column (  child_1.el  );
538
539             // init method 
540
541             {
542              var description = new Pango.FontDescription();
543                 description.set_size(8000);
544                 this.el.modify_font(description);
545             
546             }
547
548             // listeners 
549             this.el.cursor_changed.connect( () => {
550                 var sel = this.el.get_selection();
551             
552                 if (sel.count_selected_rows() < 1) {
553             
554                     print("selected rows < 1\n");
555                     //??this.mo 
556                     return  ;
557                 }
558                     
559                     //console.log('changed');
560                  
561                  Gtk.TreeIter iter;
562                  Gtk.TreeModel mod;
563                 sel.get_selected(out mod, out iter);
564                 /*
565                  store.set(citer, 
566                         0, file + ":" + line, 
567                         1, int.parse(line), 
568                         2, GLib.Markup.escape_text(line + ": " + msg), 
569                         3, file,-1);
570                 
571                 });
572                 */
573                 
574                 
575                 
576                 // var val = "";
577                 GLib.Value value;
578                 _this.compile_result_store.el.get_value(iter, 3, out value);
579                 var fname = (string)value;
580                 GLib.Value lvalue;
581                 _this.compile_result_store.el.get_value(iter, 1, out lvalue);
582                 var line = (int) lvalue;
583                 
584                 
585                 
586              
587                 
588                 
589                 print ("loadfile %s : %d", fname,line);
590                 
591                 _this.sourceview.loadFile(fname, line);
592                 
593                 
594                         
595                         
596             });
597         }
598
599         // user defined functions 
600     }
601     public class Xcls_compile_result_store : Object 
602     {
603         public Gtk.TreeStore el;
604         private Xcls_ValaCompileErrors  _this;
605
606
607             // my vars (def)
608
609         // ctor 
610         public Xcls_compile_result_store(Xcls_ValaCompileErrors _owner )
611         {
612             _this = _owner;
613             _this.compile_result_store = this;
614             this.el = new Gtk.TreeStore( 4,   typeof(string), typeof(int), typeof(string), typeof(string)  );
615
616             // my vars (dec)
617
618             // set gobject values
619         }
620
621         // user defined functions 
622     }
623     public class Xcls_column : Object 
624     {
625         public Gtk.TreeViewColumn el;
626         private Xcls_ValaCompileErrors  _this;
627
628
629             // my vars (def)
630
631         // ctor 
632         public Xcls_column(Xcls_ValaCompileErrors _owner )
633         {
634             _this = _owner;
635             this.el = new Gtk.TreeViewColumn();
636
637             // my vars (dec)
638
639             // set gobject values
640             this.el.title = "Compile output";
641             var child_0 = new Xcls_renderer( _this );
642             child_0.ref();
643             this.el.pack_start (  child_0.el , true );
644
645             // init method 
646
647             {
648               this.el.add_attribute(_this.renderer.el , "markup", 2 );
649              
650             }
651         }
652
653         // user defined functions 
654     }
655     public class Xcls_renderer : Object 
656     {
657         public Gtk.CellRendererText el;
658         private Xcls_ValaCompileErrors  _this;
659
660
661             // my vars (def)
662
663         // ctor 
664         public Xcls_renderer(Xcls_ValaCompileErrors _owner )
665         {
666             _this = _owner;
667             _this.renderer = this;
668             this.el = new Gtk.CellRendererText();
669
670             // my vars (dec)
671
672             // set gobject values
673         }
674
675         // user defined functions 
676     }
677 }