Fix #8003 - undo code
[roobuilder] / src / Builder4 / GtkView.vala
index a567585..015788e 100644 (file)
@@ -34,6 +34,7 @@ public class Xcls_GtkView : Object
        public Gtk.CssProvider css;
        public Xcls_MainWindow main_window;
        public GtkSource.SearchContext searchcontext;
+       public int last_error_counter;
        public int last_search_end;
        public JsRender.JsRender file;
 
@@ -45,6 +46,7 @@ public class Xcls_GtkView : Object
 
                // my vars (dec)
                this.lastObj = null;
+               this.last_error_counter = 0;
                this.last_search_end = 0;
                this.file = null;
 
@@ -82,15 +84,17 @@ public class Xcls_GtkView : Object
                if (file.tree == null) {
                    return;
                }
+               this.last_error_counter = -1;
                this.notebook.el.page = 0;// gtk preview 
           
          
                
               this.file = file;     
                this.sourceview.loadFile();
+              
                this.searchcontext = null;
-               
-       
+               this.last_error_counter = -1;
+                       this.updateErrorMarks();
                if (this.lastObj != null) {
                    this.container.el.remove(this.lastObj);
                }
@@ -126,19 +130,7 @@ public class Xcls_GtkView : Object
                this.createThumb();
                 
                         
-              return;/*
-               var x = new JsRender.NodeToGtk((Project.Gtk) file.project, file.tree);
-           var obj = x.munge() as Gtk.Widget;
-           this.lastObj = null;
-               if (obj == null) {
-                       return;
-               }
-               this.lastObj = obj;
-               
-               this.container.el.append(obj);
-               obj.show();
-               
-                */
+              
                
        }
        public void highlightNodeAtLine (int ln) {
@@ -328,7 +320,7 @@ public class Xcls_GtkView : Object
            
             
        }
-       public void updateErrorMarks (string category) {
+       public void updateErrorMarks () {
                
         
        
@@ -337,7 +329,7 @@ public class Xcls_GtkView : Object
                Gtk.TextIter end;     
                buf.get_bounds (out start, out end);
        
-               buf.remove_source_marks (start, end, category);
+       
         
                GLib.debug("highlight errors");          
        
@@ -351,12 +343,22 @@ public class Xcls_GtkView : Object
                        return;
        
                }
-               var ar = this.file.getErrors(category);
-               if (ar == null || ar.get_n_items() < 1) {
-                       GLib.debug("higjlight %s has no errors", category);
+               var ar = this.file.getErrors();
+               if (ar.size < 1) {
+                       buf.remove_tag_by_name ("ERR", start, end);
+                       buf.remove_tag_by_name ("WARN", start, end);
+                       buf.remove_tag_by_name ("DEPR", start, end);
+                       buf.remove_source_marks (start, end, "ERR");
+                       buf.remove_source_marks (start, end, "WARN");
+                       buf.remove_source_marks (start, end, "DEPR");
+                       this.last_error_counter = file.error_counter ;
+                       GLib.debug("higjlight has no errors");
                        return;
                }
-        
+               if (this.last_error_counter == file.error_counter) {
+                       return;
+               }
+               
        
         
                 
@@ -365,16 +367,19 @@ public class Xcls_GtkView : Object
                
         
                 
-               for (var i = 0; i < ar.get_n_items();i++) {
-                       var err = (Palete.CompileError) ar.get_item(i);
+               buf.remove_source_marks (start, end, "ERR");
+               buf.remove_source_marks (start, end, "WARN");
+               buf.remove_source_marks (start, end, "DEPR");
+               buf.remove_tag_by_name ("ERR", start, end);
+               buf.remove_tag_by_name ("WARN", start, end);
+               buf.remove_tag_by_name ("DEPR", start, end);
+               foreach(var diag in ar) { 
+               
                        
                     Gtk.TextIter iter;
        //        print("get inter\n");
-                   var eline = err.line + 1;
-                   GLib.debug("GOT ERROR on line %d -- converted to %d ",
-                       err.line ,eline);
-                   
-                   
+                   var eline = (int)diag.range.start.line ;
+                   var eline_to = (int)diag.range.end.line;
                    if (eline > tlines || eline < 0) {
                        return;
                    }
@@ -382,13 +387,20 @@ public class Xcls_GtkView : Object
                    
                    buf.get_iter_at_line( out iter, eline);
                   
+                        buf.get_iter_at_line_offset( out start, 
+                       eline, (int)diag.range.start.character); 
+                   buf.get_iter_at_line_offset( out end, 
+                       eline_to, (int)diag.range.end.character); 
+                       
+                   buf.apply_tag_by_name(diag.category, start, end);
+                  
                   
-                       var msg = "Line: %d %s : %s".printf(eline+1, err.category, err.msg);
-                   buf.create_source_mark( msg, err.category, iter);
+                       var msg = "Line: %d %s : %s".printf(eline+1, diag.category, diag.message);
+                   buf.create_source_mark( msg, diag.category, iter);
                    GLib.debug("set line %d to %s", eline, msg);
                    //this.marks.set(eline, msg);
                }
-               return ;
+               this.last_error_counter = file.error_counter ;
        
        
        
@@ -657,9 +669,9 @@ public class Xcls_GtkView : Object
                        // init method
 
                        {
-                          
-                          
-                               this.css = new Gtk.CssProvider();
+                       
+                       
+                               this.css = new Gtk.CssProvider();
                                 
                                this.css.load_from_string("#gtkview-view { font: 10px monospace ;}");
                                 
@@ -670,63 +682,54 @@ public class Xcls_GtkView : Object
                                );
                                        
                                         
-                           this.loading = true;
-                           
-                         
-                         
-                           var attrs = new GtkSource.MarkAttributes();
-                           var  pink =   Gdk.RGBA();
-                           pink.parse ( "pink");
-                           attrs.set_background ( pink);
-                           attrs.set_icon_name ( "process-stop");    
-                           attrs.query_tooltip_text.connect(( mark) => {
-                               //print("tooltip query? %s\n", mark.name);
-                               return mark.name;
-                           });
-                           
-                           this.el.set_mark_attributes ("ERR", attrs, 1);
-                           
-                            var wattrs = new GtkSource.MarkAttributes();
-                           var  blue =   Gdk.RGBA();
-                           blue.parse ( "#ABF4EB");
-                           wattrs.set_background ( blue);
-                           wattrs.set_icon_name ( "process-stop");    
-                           wattrs.query_tooltip_text.connect(( mark) => {
-                               //print("tooltip query? %s\n", mark.name);
-                               return mark.name;
-                           });
-                           
-                           this.el.set_mark_attributes ("WARN", wattrs, 1);
-                           
-                        
-                           
-                            var dattrs = new GtkSource.MarkAttributes();
-                           var  purple =   Gdk.RGBA();
-                           purple.parse ( "#EEA9FF");
-                           dattrs.set_background ( purple);
-                           dattrs.set_icon_name ( "process-stop");    
-                           dattrs.query_tooltip_text.connect(( mark) => {
-                               //print("tooltip query? %s\n", mark.name);
-                               return mark.name;
-                           });
-                           
-                           this.el.set_mark_attributes ("DEPR", dattrs, 1);
-                           
-                           
-                           var gattrs = new GtkSource.MarkAttributes();
-                           var  grey =   Gdk.RGBA();
-                           grey.parse ( "#ccc");
-                           gattrs.set_background ( grey);
-                        
-                           
-                           this.el.set_mark_attributes ("grey", gattrs, 1);
-                           
-                           
-                           
-                           
-                           
-                           
-                       }
+                               this.loading = true;
+                       
+                       
+                       
+                               var attrs = new GtkSource.MarkAttributes();
+                                attrs.set_icon_name ( "process-stop");    
+                               attrs.query_tooltip_text.connect(( mark) => {
+                                       //print("tooltip query? %s\n", mark.name);
+                                       return mark.name;
+                               });
+                       
+                               this.el.set_mark_attributes ("ERR", attrs, 1);
+                       
+                                var wattrs = new GtkSource.MarkAttributes();
+                                 wattrs.set_icon_name ( "process-stop");    
+                               wattrs.query_tooltip_text.connect(( mark) => {
+                                       //print("tooltip query? %s\n", mark.name);
+                                       return mark.name;
+                               });
+                       
+                               this.el.set_mark_attributes ("WARN", wattrs, 1);
+                       
+                       
+                       
+                                var dattrs = new GtkSource.MarkAttributes();
+                               dattrs.set_icon_name ( "process-stop");    
+                               dattrs.query_tooltip_text.connect(( mark) => {
+                                       //print("tooltip query? %s\n", mark.name);
+                                       return mark.name;
+                               });
+                       
+                               this.el.set_mark_attributes ("DEPR", dattrs, 1);
+                       
+                       
+                               var gattrs = new GtkSource.MarkAttributes();
+                               var  grey =   Gdk.RGBA();
+                               grey.parse ( "#ccc");
+                               gattrs.set_background ( grey);
+                       
+                       
+                               this.el.set_mark_attributes ("grey", gattrs, 1);
+                       
+                       
+                       
+                       
+                       
+                       
+                               }
 
                        //listeners
                        this.el.query_tooltip.connect( (x, y, keyboard_tooltip, tooltip) => {
@@ -779,7 +782,7 @@ public class Xcls_GtkView : Object
                        this.loading = false;
                        return;
                    }
-                   
+                   /*
                    var valafn = "";
                      try {             
                           var  regex = new Regex("\\.bjs$");
@@ -806,6 +809,8 @@ public class Xcls_GtkView : Object
                        this.loading = false;
                        return  ;
                    }
+                   */
+                   var str = _this.file.toSource();
                
                //    print("setting str %d\n", str.length);
                    buf.set_text(str, str.length);
@@ -930,6 +935,23 @@ public class Xcls_GtkView : Object
 
                        // set gobject values
 
+                       // init method
+
+                       var buf = this.el;
+                       buf.create_tag ("bold", "weight", Pango.Weight.BOLD);
+                       buf.create_tag ("type", "weight", Pango.Weight.BOLD, "foreground", "#204a87");
+                       buf.create_tag ("keyword", "weight", Pango.Weight.BOLD, "foreground", "#a40000");
+                       buf.create_tag ("text", "weight", Pango.Weight.NORMAL, "foreground", "#729fcf");
+                       buf.create_tag ("number", "weight", Pango.Weight.BOLD, "foreground", "#ad7fa8");
+                       buf.create_tag ("method", "weight", Pango.Weight.BOLD, "foreground", "#729fcf");
+                       buf.create_tag ("property", "weight", Pango.Weight.BOLD, "foreground", "#BC1F51");
+                       buf.create_tag ("variable", "weight", Pango.Weight.BOLD, "foreground", "#A518B5");
+                       
+                       
+                       buf.create_tag ("ERR", "weight", Pango.Weight.BOLD, "background", "pink");
+                       buf.create_tag ("WARN", "weight", Pango.Weight.BOLD, "background", "#ABF4EB");
+                       buf.create_tag ("DEPR", "weight", Pango.Weight.BOLD, "background", "#EEA9FF");
+
                        //listeners
                        this.el.cursor_moved.connect( ( ) => {
                        GLib.debug("cursor moved called");