fix merge
[roobuilder] / src / Builder4 / Editor.bjs
index b1a00f9..c0555bf 100644 (file)
@@ -10,6 +10,7 @@
    "# Xcls_MainWindow window" : "null",
    "# bool dirty" : false,
    "# bool pos" : false,
+   "# int last_error_counter" : 0,
    "# int pos_root_x" : "",
    "# int pos_root_y" : "",
    "# string activeEditor" : "\"\"",
           "        // assume it's gtk...",
           "         var  oldcode =_this.file.toSource();",
           "        _this.file.setSource(str);",
-          "        _this.file.getLanguageServer().document_change(_this.file);",
           "\t    BuilderApplication.showSpinner(\"appointment soon\",\"document change pending\");",
+          "    \t_this.file.getLanguageServer().document_change(_this.file);",
+          "",
           "        _this.file.setSource(oldcode);",
           "        ",
           "\t\t ",
           "\tvar oldcode  = _this.prop.val;",
           "\t",
           "\t_this.prop.val = str;",
+          "\t_this.node.updated_count++;",
           "    _this.file.getLanguageServer().document_change(_this.file);",
+          "    _this.node.updated_count++;",
           "    _this.prop.val = oldcode;",
           "    ",
           "    ",
         "    _this.dirty = false;",
         "    this.el.grab_focus();",
         "    _this.save_button.el.sensitive = false;",
+        "    _this.last_error_counter = -1;",
+        "\t_this.updateErrorMarks();",
+        "    ",
         "}"
        ]
       }
     "",
     "        // find the text for the node..",
     "        this.view.load( prop.val );",
-    "        ",
-    "        ",
+    "",
     "        this.close_btn.el.show();       ",
     "    ",
     "    } else {",
     "}"
    ],
    "| void updateErrorMarks" : [
-    "(string category) {",
+    "() {",
     "\t",
     " ",
     "",
     "\tGtk.TextIter end;     ",
     "\tbuf.get_bounds (out start, out end);",
     "",
-    "\tbuf.remove_source_marks (start, end, category);",
+    "\t",
+    "",
     " ",
     "\t//GLib.debug(\"highlight errors\");\t\t ",
     "",
     "\t\treturn;",
     "",
     "\t}",
-    "\tvar ar = this.file.getErrors(category);",
-    "\tif (ar == null || ar.get_n_items() < 1) {",
+    "\tvar ar = this.file.getErrors();",
+    "\tif (ar.size < 1) {",
+    "\t\tbuf.remove_source_marks (start, end, null);",
+    "\t\tthis.last_error_counter = file.error_counter ;",
     "\t\t//GLib.debug(\"highlight %s :  %s has no errors\", this.file.relpath, category);",
     "\t\treturn;",
     "\t}",
-    " ",
+    "\t",
     "",
-    " ",
+    " // basicaly check if there is no change, then we do not do any update..",
+    " // we can do this by just using an error counter?",
+    " // if that's changed then we will do an update, otherwise dont bother.",
+    "\t  ",
     "\t",
     "\tvar offset = 0;",
-    "\t ",
+    "\tvar hoffset = 0;",
     "",
     "\tvar tlines = buf.get_line_count () +1;",
     "\t",
     "\tif (_this.prop != null) {",
     "\t\t// this still seems flaky...",
-    "\t\t",
+    "",
     "\t\ttlines = _this.prop.end_line;",
     "\t\toffset = _this.prop.start_line;",
+    "\t\thoffset = _this.node.node_pad.length;",
+    "\t\t",
     "\t\t ",
-    "\t}",
-    "\t ",
-    "\tfor (var i = 0; i < ar.get_n_items();i++) {",
-    "\t\tvar err = (Palete.CompileError) ar.get_item(i);",
+    "\t} else {",
+    "\t\t// no update...",
+    "\t\tif (this.last_error_counter == file.error_counter) {",
     "\t\t",
+    "\t\t\treturn;",
+    "\t\t}",
+    "\t",
+    "\t}",
+    "\tbuf.remove_source_marks (start, end, null);",
+    "\tforeach(var diag in ar) { ",
     "\t     Gtk.TextIter iter;",
     "//        print(\"get inter\\n\");",
-    "\t    var eline = err.line - offset;",
+    "\t    var eline = (int)diag.range.start.line - offset;",
+    "\t    //var eline =  diag.range.end_line - offset;",
     "\t    //GLib.debug(\"GOT ERROR on line %d -- converted to %d  (offset = %d)\",",
     "\t    //\terr.line ,eline, offset);",
     "\t    ",
     "\t    ",
     "\t    if (eline > tlines || eline < 0) {",
-    "\t        return;",
+    "",
+    "\t        continue;",
     "\t    }",
     "\t   ",
     "\t    ",
-    "\t    buf.get_iter_at_line( out iter, eline);",
+    "\t    buf.get_iter_at_line_offset( out iter, eline, (int)diag.range.start.character - hoffset);",
     "\t   ",
     "\t   ",
-    "\t\tvar msg = \"Line: %d %s : %s\".printf(eline+1, err.category, err.msg);",
-    "\t    buf.create_source_mark( msg, err.category, iter);",
+    "\t\tvar msg = \"Line: %d %s : %s\".printf(eline+1, diag.category, diag.message);",
+    "\t    buf.create_source_mark( msg, diag.category, iter);",
     "\t   // GLib.debug(\"set line %d to %s\", eline, msg);",
     "\t    //this.marks.set(eline, msg);",
     "\t}",
-    "\treturn ;",
+    "\tthis.last_error_counter = file.error_counter ;",
     "",
     "",
     "",