Fix #8025 - move css to resources
[roobuilder] / src / Builder4 / Editor.vala
index 027d241..e9c403c 100644 (file)
@@ -63,12 +63,12 @@ public class Editor : Object
                this.el.homogeneous = false;
                this.el.hexpand = true;
                this.el.vexpand = true;
-               var child_1 = new Xcls_Box2( _this );
+               var child_1 = new Xcls_Box1( _this );
                child_1.ref();
                this.el.append( child_1.el );
                new Xcls_RightEditor( _this );
                this.el.append( _this.RightEditor.el );
-               var child_3 = new Xcls_Box12( _this );
+               var child_3 = new Xcls_Box11( _this );
                child_3.ref();
                this.el.append ( child_3.el  );
        }
@@ -145,13 +145,15 @@ public class Editor : Object
        
                // find the text for the node..
                this.view.load( prop.val );
-               
+               this.updateErrorMarks();
                
                this.close_btn.el.show();       
            
            } else {
                this.view.load(        file.toSource() );
+                this.updateErrorMarks();
                this.close_btn.el.hide();
+               
            }
         
        }
@@ -275,7 +277,12 @@ public class Editor : Object
                }
                var ar = this.file.getErrors();
                if (ar.size < 1) {
-                       buf.remove_source_marks (start, end, null);
+                       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);
                        this.last_error_counter = file.error_counter ;
                        //GLib.debug("highlight %s :  %s has no errors", this.file.relpath, category);
                        return;
@@ -297,7 +304,7 @@ public class Editor : Object
        
                        tlines = _this.prop.end_line;
                        offset = _this.prop.start_line;
-                       hoffset = _this.node.node_pad.length;
+                       hoffset = _this.node.node_pad.length + 2; //shift it left  by 2 ? ..
                        
                         
                } else {
@@ -308,27 +315,50 @@ public class Editor : Object
                        }
                
                }
-               buf.remove_source_marks (start, end, null);
+               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 = (int)diag.range.start.line - offset;
+                   var eline_to = (int)diag.range.end.line - offset;
                    //var eline =  diag.range.end_line - offset;
                    //GLib.debug("GOT ERROR on line %d -- converted to %d  (offset = %d)",
                    //  err.line ,eline, offset);
                    
                    
                    if (eline > tlines || eline < 0) {
-       
                        continue;
                    }
-                  
                    
-                   buf.get_iter_at_line_offset( out iter, eline, (int)diag.range.start.character - hoffset);
-                  
-                  
-                       var msg = "Line: %d %s : %s".printf(eline+1, diag.category, diag.message);
+                   buf.get_iter_at_line( out iter, eline);
+                       var msg = "Line: %d %s : %s".printf(eline+1, diag.category, diag.message);
                    buf.create_source_mark( msg, diag.category, iter);
+                   
+                   var spos = (int)diag.range.start.character - hoffset;
+                   if (spos < 0) { spos =0 ; }
+                   if (spos > iter.get_chars_in_line()) {
+                       spos = iter.get_chars_in_line();
+               }
+                       buf.get_iter_at_line( out iter, eline_to);
+                       var epos = (int)diag.range.end.character - hoffset;
+                   if (epos < 0) { epos =0 ; }
+                   if (epos > iter.get_chars_in_line()) {
+                       epos = iter.get_chars_in_line();
+               }
+                    
+                   
+                   buf.get_iter_at_line_offset( out start, eline, spos); 
+                  
+                   buf.get_iter_at_line_offset( out end, eline_to,epos); 
+                       
+                   buf.apply_tag_by_name(diag.category, start, end);
+                   
                   // GLib.debug("set line %d to %s", eline, msg);
                    //this.marks.set(eline, msg);
                }
@@ -354,7 +384,7 @@ public class Editor : Object
                        return false;
                });   
        }
-       public class Xcls_Box2 : Object
+       public class Xcls_Box1 : Object
        {
                public Gtk.Box el;
                private Editor  _this;
@@ -363,7 +393,7 @@ public class Editor : Object
                        // my vars (def)
 
                // ctor
-               public Xcls_Box2(Editor _owner )
+               public Xcls_Box1(Editor _owner )
                {
                        _this = _owner;
                        this.el = new Gtk.Box( Gtk.Orientation.HORIZONTAL, 0 );
@@ -375,10 +405,10 @@ public class Editor : Object
                        this.el.hexpand = true;
                        new Xcls_save_button( _this );
                        this.el.append( _this.save_button.el );
-                       var child_2 = new Xcls_Label4( _this );
+                       var child_2 = new Xcls_Label3( _this );
                        child_2.ref();
                        this.el.append( child_2.el );
-                       var child_3 = new Xcls_Scale5( _this );
+                       var child_3 = new Xcls_Scale4( _this );
                        child_3.ref();
                        this.el.append( child_3.el );
                        new Xcls_close_btn( _this );
@@ -416,7 +446,7 @@ public class Editor : Object
                // user defined functions
        }
 
-       public class Xcls_Label4 : Object
+       public class Xcls_Label3 : Object
        {
                public Gtk.Label el;
                private Editor  _this;
@@ -425,7 +455,7 @@ public class Editor : Object
                        // my vars (def)
 
                // ctor
-               public Xcls_Label4(Editor _owner )
+               public Xcls_Label3(Editor _owner )
                {
                        _this = _owner;
                        this.el = new Gtk.Label( null );
@@ -439,7 +469,7 @@ public class Editor : Object
                // user defined functions
        }
 
-       public class Xcls_Scale5 : Object
+       public class Xcls_Scale4 : Object
        {
                public Gtk.Scale el;
                private Editor  _this;
@@ -448,7 +478,7 @@ public class Editor : Object
                        // my vars (def)
 
                // ctor
-               public Xcls_Scale5(Editor _owner )
+               public Xcls_Scale4(Editor _owner )
                {
                        _this = _owner;
                        this.el = new Gtk.Scale.with_range (Gtk.Orientation.HORIZONTAL,6, 30, 1);
@@ -465,18 +495,26 @@ public class Editor : Object
                        // init method
 
                        {
-                               this.el.set_range(6,30);
-                               this.el.set_value(8);
+                               //this.el.set_range(6,30);
+                               this.el.set_value ( BuilderApplication.settings.editor_font_size);
+                               BuilderApplication.settings.editor_font_size_updated.connect(
+                                       () => {
+                                               BuilderApplication.settings.editor_font_size_inchange = true;
+                                               GLib.debug("update range");
+                                               this.el.set_value (BuilderApplication.settings.editor_font_size);
+                                               BuilderApplication.settings.editor_font_size_inchange = false;
+                                       }
+                               );
+                               
+                        
                        }
 
                        //listeners
                        this.el.change_value.connect( (st, val ) => {
-                                
-                                  
-                                 _this.view.css.load_from_string(
-                                               "#editor-view { font: %dpx monospace; }".printf((int)val)
-                                  );
-                            
+                               if (BuilderApplication.settings.editor_font_size_inchange) {
+                                       return false;
+                               }
+                               BuilderApplication.settings.editor_font_size = val;
                                return false;
                        });
                }
@@ -503,7 +541,7 @@ public class Editor : Object
 
                        // set gobject values
                        this.el.icon_name = "window-close";
-                       var child_1 = new Xcls_Image7( _this );
+                       var child_1 = new Xcls_Image6( _this );
                        this.el.child = child_1.el;
 
                        //listeners
@@ -515,7 +553,7 @@ public class Editor : Object
 
                // user defined functions
        }
-       public class Xcls_Image7 : Object
+       public class Xcls_Image6 : Object
        {
                public Gtk.Image el;
                private Editor  _this;
@@ -524,7 +562,7 @@ public class Editor : Object
                        // my vars (def)
 
                // ctor
-               public Xcls_Image7(Editor _owner )
+               public Xcls_Image6(Editor _owner )
                {
                        _this = _owner;
                        this.el = new Gtk.Image();
@@ -598,42 +636,20 @@ public class Editor : Object
                        this.el.hexpand = true;
                        this.el.vexpand = true;
                        this.el.has_tooltip = true;
+                       this.el.css_classes = { "code-editor" };
                        this.el.tab_width = 4;
                        this.el.highlight_current_line = true;
                        new Xcls_buffer( _this );
                        this.el.buffer = _this.buffer.el;
-                       var child_2 = new Xcls_EventControllerKey11( _this );
+                       var child_2 = new Xcls_EventControllerKey10( _this );
                        child_2.ref();
                        this.el.add_controller(  child_2.el );
 
                        // init method
 
-                       this.css = new Gtk.CssProvider();
-                       
-                       this.css.load_from_string(
-                               "#editor-view { font:  12px monospace;}"
+                       this.el.completion.add_provider(
+                               new Palete.CompletionProvider(_this)
                        );
-                        
-                       Gtk.StyleContext.add_provider_for_display(
-                               this.el.get_display(),
-                               this.css,
-                               Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
-                       );
-                               
-                        
-                                
-                       /*
-                       this is pretty flakey - triggers Gtk with  < 0 d
-                        var cp = new GtkSource.CompletionWords("test"); 
-                        cp.minimum_word_size  = 3;
-                        //cp.priority = 100; //?? does this do anything
-                        cp.proposals_batch_size  = 10;
-                        cp.scan_batch_size = 1000;
-                        
-                       cp.register(_this.buffer.el);
-                       this.el.completion.add_provider(cp);
-                       */
-                       this.el.completion.add_provider(new Palete.CompletionProvider(_this));
                          
                        //this.el.completion.unblock_interactive();
                        this.el.completion.select_on_show = true; // select
@@ -641,9 +657,7 @@ public class Editor : Object
                        
                        
                        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) => {
                             GLib.debug("tooltip query? %s", mark.name);
@@ -655,10 +669,9 @@ public class Editor : Object
                        });
                        this.el.set_mark_attributes ("ERR", attrs, 1);
                        attrs.ref();
-                        var wattrs = new GtkSource.MarkAttributes();
-                       var  blue =   Gdk.RGBA();
-                       blue.parse ( "#ABF4EB");
-                       wattrs.set_background ( blue);
+                       
+                       
+                       var wattrs = new GtkSource.MarkAttributes();
                        wattrs.set_icon_name ( "process-stop");    
                        wattrs.query_tooltip_text.connect(( mark) => {
                             GLib.debug("tooltip query? %s", mark.name);
@@ -671,20 +684,19 @@ public class Editor : Object
                        this.el.set_mark_attributes ("WARN", wattrs, 1);
                        wattrs.ref();
                        
+                        
+                       var dattrs = new GtkSource.MarkAttributes();
+                        
+                       dattrs.set_icon_name ( "process-stop"); 
                        
-                        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) => {
                                GLib.debug("tooltip query? %s", mark.name);
                            return strdup(mark.name);
                        });
-                       dattrs.query_tooltip_markup.connect(( mark) => {
-                               GLib.debug("tooltip query? %s", mark.name);
-                           return strdup(mark.name);
-                       });
+                       //dattrs.query_tooltip_markup.connect(( mark) => {
+                       //      GLib.debug("tooltip query? %s", mark.name);
+                        //   return strdup(mark.name);
+                       //});
                        this.el.set_mark_attributes ("DEPR", dattrs, 1);
                        dattrs.ref();    
                        
@@ -826,18 +838,20 @@ public class Editor : Object
 
                        // 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");
+                       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.changed.connect( () => {
@@ -855,66 +869,7 @@ public class Editor : Object
                }
 
                // user defined functions
-               public bool checkSyntax () {
-                
-                   
-                   var str = this.toString();
-                   
-                   // needed???
-                   if (this.error_line > 0) {
-                        Gtk.TextIter start;
-                        Gtk.TextIter end;     
-                       this.el.get_bounds (out start, out end);
-               
-                       this.el.remove_source_marks (start, end, null);
-                   }
-                   if (str.length < 1) {
-                       print("checkSyntax - empty string?\n");
-                       return true;
-                   }
-                   
-                   // bit presumptiona
-                   if (_this.file.xtype == "PlainFile") {
-                   
-                       // assume it's gtk...
-                        var  oldcode =_this.file.toSource();
-                       _this.file.setSource(str);
-                           BuilderApplication.showSpinner("appointment soon","document change pending");
-                       _this.file.getLanguageServer().document_change(_this.file);
-               
-                       _this.file.setSource(oldcode);
-                       
-                                
-                       return true;
-                   
-                   }
-                  if (_this.file == null) {
-                      return true;
-                  }
-                
-                   
-               
-                     
-                    
-                   GLib.debug("calling validate");    
-                   // clear the buttons.
-                       if (_this.prop.name == "xns" || _this.prop.name == "xtype") {
-                               return true ;
-                       }
-                       var oldcode  = _this.prop.val;
-                       
-                       _this.prop.val = str;
-                       _this.node.updated_count++;
-                   _this.file.getLanguageServer().document_change(_this.file);
-                   _this.node.updated_count++;
-                   _this.prop.val = oldcode;
-                   
-                   
-                   //print("done mark line\n");
-                    
-                   return true; // at present allow saving - even if it's invalid..
-               }
-               public bool highlightErrorsJson (string type, Json.Object obj) {
+               public bool OLDhighlightErrorsJson (string type, Json.Object obj) {
                        Gtk.TextIter start;
                        Gtk.TextIter end;     
                        this.el.get_bounds (out start, out end);
@@ -1025,6 +980,65 @@ public class Editor : Object
                
                
                        }
+               public bool checkSyntax () {
+                
+                   
+                   var str = this.toString();
+                   
+                   // needed???
+                   if (this.error_line > 0) {
+                        Gtk.TextIter start;
+                        Gtk.TextIter end;     
+                       this.el.get_bounds (out start, out end);
+               
+                       this.el.remove_source_marks (start, end, null);
+                   }
+                   if (str.length < 1) {
+                       print("checkSyntax - empty string?\n");
+                       return true;
+                   }
+                   
+                   // bit presumptiona
+                   if (_this.file.xtype == "PlainFile") {
+                   
+                       // assume it's gtk...
+                        var  oldcode =_this.file.toSource();
+                       _this.file.setSource(str);
+                           BuilderApplication.showSpinner("appointment soon","document change pending");
+                       _this.file.getLanguageServer().document_change(_this.file);
+               
+                       _this.file.setSource(oldcode);
+                       
+                                
+                       return true;
+                   
+                   }
+                  if (_this.file == null) {
+                      return true;
+                  }
+                
+                   
+               
+                     
+                    
+                   GLib.debug("calling validate");    
+                   // clear the buttons.
+                       if (_this.prop.name == "xns" || _this.prop.name == "xtype") {
+                               return true ;
+                       }
+                       var oldcode  = _this.prop.val;
+                       
+                       _this.prop.val = str;
+                       _this.node.updated_count++;
+                   _this.file.getLanguageServer().document_change(_this.file);
+                   _this.node.updated_count++;
+                   _this.prop.val = oldcode;
+                   
+                   
+                   //print("done mark line\n");
+                    
+                   return true; // at present allow saving - even if it's invalid..
+               }
                public bool highlightErrors ( Gee.HashMap<int,string> validate_res) {
                         
                        this.error_line = validate_res.size;
@@ -1060,7 +1074,7 @@ public class Editor : Object
                }
        }
 
-       public class Xcls_EventControllerKey11 : Object
+       public class Xcls_EventControllerKey10 : Object
        {
                public Gtk.EventControllerKey el;
                private Editor  _this;
@@ -1069,7 +1083,7 @@ public class Editor : Object
                        // my vars (def)
 
                // ctor
-               public Xcls_EventControllerKey11(Editor _owner )
+               public Xcls_EventControllerKey10(Editor _owner )
                {
                        _this = _owner;
                        this.el = new Gtk.EventControllerKey();
@@ -1130,7 +1144,7 @@ public class Editor : Object
 
 
 
-       public class Xcls_Box12 : Object
+       public class Xcls_Box11 : Object
        {
                public Gtk.Box el;
                private Editor  _this;
@@ -1139,7 +1153,7 @@ public class Editor : Object
                        // my vars (def)
 
                // ctor
-               public Xcls_Box12(Editor _owner )
+               public Xcls_Box11(Editor _owner )
                {
                        _this = _owner;
                        this.el = new Gtk.Box( Gtk.Orientation.HORIZONTAL, 0 );
@@ -1157,7 +1171,7 @@ public class Editor : Object
                        this.el.append( _this.nextBtn.el );
                        new Xcls_backBtn( _this );
                        this.el.append( _this.backBtn.el );
-                       var child_5 = new Xcls_MenuButton18( _this );
+                       var child_5 = new Xcls_MenuButton17( _this );
                        child_5.ref();
                        this.el.append( child_5.el );
                }
@@ -1187,7 +1201,7 @@ public class Editor : Object
                        this.el.hexpand = true;
                        this.el.placeholder_text = "Press enter to search";
                        this.el.search_delay = 3;
-                       var child_1 = new Xcls_EventControllerKey14( _this );
+                       var child_1 = new Xcls_EventControllerKey13( _this );
                        child_1.ref();
                        this.el.add_controller(  child_1.el );
 
@@ -1232,7 +1246,7 @@ public class Editor : Object
                        
                }
        }
-       public class Xcls_EventControllerKey14 : Object
+       public class Xcls_EventControllerKey13 : Object
        {
                public Gtk.EventControllerKey el;
                private Editor  _this;
@@ -1241,7 +1255,7 @@ public class Editor : Object
                        // my vars (def)
 
                // ctor
-               public Xcls_EventControllerKey14(Editor _owner )
+               public Xcls_EventControllerKey13(Editor _owner )
                {
                        _this = _owner;
                        this.el = new Gtk.EventControllerKey();
@@ -1392,7 +1406,7 @@ public class Editor : Object
                // user defined functions
        }
 
-       public class Xcls_MenuButton18 : Object
+       public class Xcls_MenuButton17 : Object
        {
                public Gtk.MenuButton el;
                private Editor  _this;
@@ -1402,7 +1416,7 @@ public class Editor : Object
                public bool always_show_image;
 
                // ctor
-               public Xcls_MenuButton18(Editor _owner )
+               public Xcls_MenuButton17(Editor _owner )
                {
                        _this = _owner;
                        this.el = new Gtk.MenuButton();
@@ -1437,13 +1451,13 @@ public class Editor : Object
                        // my vars (dec)
 
                        // set gobject values
-                       var child_1 = new Xcls_Box20( _this );
+                       var child_1 = new Xcls_Box19( _this );
                        this.el.child = child_1.el;
                }
 
                // user defined functions
        }
-       public class Xcls_Box20 : Object
+       public class Xcls_Box19 : Object
        {
                public Gtk.Box el;
                private Editor  _this;
@@ -1452,7 +1466,7 @@ public class Editor : Object
                        // my vars (def)
 
                // ctor
-               public Xcls_Box20(Editor _owner )
+               public Xcls_Box19(Editor _owner )
                {
                        _this = _owner;
                        this.el = new Gtk.Box( Gtk.Orientation.VERTICAL, 0 );