fix remove css for error tree
[roobuilder] / src / Builder4 / WindowLeftProps.vala
index 5da1a3f..8e1dc03 100644 (file)
@@ -28,6 +28,7 @@ public class Xcls_LeftProps : Object
        public signal void show_add_props (string type);
        public signal bool stop_editor ();
        public Xcls_MainWindow main_window;
+       public int last_error_counter;
        public signal void changed ();
        public JsRender.JsRender file;
        public JsRender.Node node;
@@ -43,6 +44,7 @@ public class Xcls_LeftProps : Object
                this.loading = false;
                this.allow_edit = false;
                this.main_window = null;
+               this.last_error_counter = -1;
 
                // set gobject values
                this.el.homogeneous = false   ;
@@ -83,6 +85,55 @@ public class Xcls_LeftProps : Object
        
        
        
+       }
+       public void updateErrors () {
+               var file = this.file;
+               var ar = file.getErrors();
+               if (ar.size < 1) {
+                       this.removeErrors();
+                       this.last_error_counter = file.error_counter ;
+       
+                       return;
+               }
+               if (this.last_error_counter == file.error_counter) {
+                       return;
+               }
+               this.removeErrors();
+               
+               foreach(var diag in ar) { 
+               
+                        
+       //        print("get inter\n");
+                   var node= file.lineToNode( (int)diag.range.start.line) ;
+                   if (node == null || node.oid != this.node.oid) {
+                       continue;
+               }
+               var prop = node.lineToProp( (int)diag.range.start.line) ;
+               
+               var row = _this.selmodel.propToRow(prop);
+               if (row < 0) {
+                       continue;
+                       }
+               var w = this.view.getWidgetAtRow(row);
+               if (w == null) {
+                       return;
+                       }
+                               var ed = diag.category.down();
+                       if (ed != "err" && w.has_css_class("node-err")) {
+                               continue;
+                       }
+                       if (ed == "err" && w.has_css_class("node-warn")) {
+                               w.remove_css_class("node-warn");
+                       }
+                       if (ed == "err" && w.has_css_class("node-depr")) {
+                               w.remove_css_class("node-depr");
+                       }
+                       if (!w.has_css_class("node-"+ ed)) {
+                               w.add_css_class("node-" + ed);
+                       }
+                       
+               }
+               
        }
        public string keyFormat (string val, string type) {
            
@@ -185,6 +236,47 @@ public class Xcls_LeftProps : Object
                _this.changed();
                */
        }
+       public void removeErrors () {
+               var  child = this.view.el.get_first_child(); 
+        
+               var reading_header = true;
+        
+               while (child != null) {
+                       GLib.debug("Got %s", child.get_type().name());
+                  
+                  if (reading_header) {
+                               
+       
+                               if (child.get_type().name() != "GtkColumnListView") {
+                                  
+                                       child = child.get_next_sibling();
+                                       continue;
+                               }
+                               // should be columnlistview
+                               child = child.get_first_child(); 
+                        
+                        
+                               
+                               reading_header = false;
+                                
+                   }
+                   
+                       if (child.has_css_class("node-err")) {
+                               child.remove_css_class("node-err");
+                       }
+                       if (child.has_css_class("node-warn")) {
+                               child.remove_css_class("node-warn");
+                       }
+                       
+                       if (child.has_css_class("node-depr")) {
+                               child.remove_css_class("node-depr");
+                       }
+                       
+               child = child.get_next_sibling(); 
+               }
+               //GLib.debug("Rturning null");
+            
+       }
        public void a_addProp (JsRender.NodeProp prop) {
              // info includes key, val, skel, etype..
              //console.dump(info);
@@ -253,6 +345,7 @@ public class Xcls_LeftProps : Object
           
                this.loading = false;
            this.selmodel.el.set_selected(Gtk.INVALID_LIST_POSITION);
+           this.updateErrors();
           // clear selection?
          //this.model.el.set_sort_column_id(4,Gtk.SortType.ASCENDING); // sort by real key..
           
@@ -1288,6 +1381,7 @@ public class Xcls_LeftProps : Object
                                                }
                                                child = child.get_first_child(); 
                                                reading_header = false;
+                                               continue;
                                }
                                    if (child.get_type().name() != "GtkColumnViewRowWidget") {
                                    child = child.get_next_sibling();
@@ -1707,6 +1801,17 @@ public class Xcls_LeftProps : Object
                }
 
                // user defined functions
+               public int propToRow (JsRender.NodeProp prop) {
+                       for (var i = 0 ; i < this.el.n_items; i++) {
+                               var r = (JsRender.NodeProp)this.el.get_item(i);
+                               if (r.equals(prop)) {
+                                       return i;
+                                       
+                               }
+                       }
+                       return -1;
+                        
+               }
                public void startEditing (JsRender.NodeProp prop) {
                        // should we call select?? - caller does int (from windowstate)