X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=src%2FBuilder4%2FWindowRooView.vala;h=6906c4176196359295c9135fa34b7051ba69fe2d;hb=6b47d4fc5bda7c979e3860e27bbd54bf211574b8;hp=69068e6df45bf1e8b326d8570ee7d64997344f5c;hpb=d72fa6356bc834d1b4a277197bc1c183f9010061;p=app.Builder.js diff --git a/src/Builder4/WindowRooView.vala b/src/Builder4/WindowRooView.vala index 69068e6df..6906c4176 100644 --- a/src/Builder4/WindowRooView.vala +++ b/src/Builder4/WindowRooView.vala @@ -933,6 +933,7 @@ public class Xcls_WindowRooView : Object // my vars (def) public bool loading; public bool allow_node_scroll; + public JsRender.Node? node; public string propSelected; // ctor @@ -945,6 +946,7 @@ public class Xcls_WindowRooView : Object // my vars (dec) this.loading = true; this.allow_node_scroll = true; + this.node = null; this.propSelected = ""; // set gobject values @@ -1105,18 +1107,20 @@ public class Xcls_WindowRooView : Object public void nodeSelected (JsRender.Node? sel, bool scroll ) { - + // this is connected in widnowstate - print("node selected\n"); - var buf = this.el.get_buffer(); - - var sbuf = (Gtk.SourceBuffer) buf; - + + // not sure why.... while(Gtk.events_pending()) { Gtk.main_iteration(); } + + print("node selected\n"); + var buf = this.el.get_buffer(); + var sbuf = (Gtk.SourceBuffer) buf; + // clear all the marks.. Gtk.TextIter start; @@ -1139,13 +1143,16 @@ public class Xcls_WindowRooView : Object Gtk.TextIter cur_iter; sbuf.get_iter_at_offset(out cur_iter, sbuf.cursor_position); + + var cursor_at_line = cur_iter.get_line(); + //var cur_line = cur_iter.get_line(); //if (cur_line > sel.line_start && cur_line < sel.line_end) { //} else { if (scroll) { - + print("scrolling to node -- should occur on node picking.\n"); this.el.scroll_to_iter(iter, 0.1f, true, 0.0f, 0.5f); } @@ -1154,6 +1161,9 @@ public class Xcls_WindowRooView : Object this.el.editable = false; + + var colon_pos = 0; + // now if we have selected a property... if (this.propSelected.length> 0 ) { @@ -1162,12 +1172,46 @@ public class Xcls_WindowRooView : Object start_line = nstart; end_line = nend; this.el.editable = true; + print("start line = %d, end line = %d\n", start_line, end_line); + + // see if we are 'right of ':' + // get an iter for the start of the line. + Gtk.TextIter start_line_iter,end_line_iter; + this.el.buffer.get_iter_at_line(out start_line_iter, start_line -1); + this.el.buffer.get_iter_at_line(out end_line_iter, start_line -1); + + + + + if (end_line_iter.forward_to_line_end()) { + var first_line = this.el.buffer.get_text(start_line_iter, end_line_iter, false); + print("first line = %s\n", first_line); + if (first_line.contains(":")) { + colon_pos = start_line_iter.get_offset() + first_line.index_of(":"); + } + print("colon_pos = %d\n", colon_pos); + } + print("is cursor at line? %d ?= %d\n", start_line -1 , cursor_at_line); + if (start_line - 1 == cursor_at_line) { + print("cursor is on current line.\n"); + var before_cursor_string = this.el.buffer.get_text(start_line_iter, cur_iter, false); + print("before cursor string = %s\n", before_cursor_string); + if (!before_cursor_string.contains(":")) { + this.el.editable = false; + } + + } + + } print("propSelected = %s range %d -> %d\n", this.propSelected, start_line, end_line); } + print("checking selection\n"); + + // check selection - if it's out of 'bounds' if (this.el.editable && sbuf.get_has_selection()) { Gtk.TextIter sel_start_iter, sel_end_iter; @@ -1178,6 +1222,14 @@ public class Xcls_WindowRooView : Object // save? this.el.editable = false; } + if (colon_pos > 0 && + (sel_start_iter.get_offset() < colon_pos || sel_end_iter.get_offset() < colon_pos) + + ) { + this.el.editable = false; + } + + } @@ -1258,79 +1310,16 @@ public class Xcls_WindowRooView : Object this.el.get_vadjustment().set_value(vadj_pos);; this.onCursorChanged(); + _this.buffer.checkSyntax(); return false; }); this.loading = false; - _this.buffer.dirty = false + _this.buffer.dirty = false; } public void highlightErrorsJson (string type, Json.Object obj) { - Gtk.TextIter start; - Gtk.TextIter end; - - var buf = this.el.get_buffer(); - var sbuf = (Gtk.SourceBuffer)buf; - buf.get_bounds (out start, out end); - - sbuf.remove_source_marks (start, end, type); - - - // we should highlight other types of errors.. - - if (!obj.has_member(type)) { - print("Return has no errors\n"); - return ; - } - var err = obj.get_object_member(type); - - if (_this.file == null) { - return; // just in case the file has not loaded yet? - } - - - var valafn = ""; - try { - var regex = new Regex("\\.bjs$"); - - - valafn = regex.replace(_this.file.path,_this.file.path.length , 0 , ".vala"); - } catch (GLib.RegexError e) { - return; - } - - if (!err.has_member(valafn)) { - print("File path has no errors\n"); - return ; - } - var lines = err.get_object_member(valafn); - - - - var tlines = buf.get_line_count () +1; - - lines.foreach_member((obj, line, node) => { - - Gtk.TextIter iter; - // print("get inter\n"); - var eline = int.parse(line) -1 ; - print("GOT ERROR on line %s -- converted to %d\n", line,eline); - - - if (eline > tlines || eline < 0) { - return; - } - sbuf.get_iter_at_line( out iter, eline); - //print("mark line\n"); - var msg = type + " on line: %d - %s".printf(eline+1, valafn); - var ar = lines.get_array_member(line); - for (var i = 0 ; i < ar.get_length(); i++) { - msg += (msg.length > 0) ? "\n" : ""; - msg += ar.get_string_element(i); - } - - - sbuf.create_source_mark(msg, type, iter); - } ); + // this is a hook for the vala code - it has no value in javascript + // as we only have one error ususally.... return ; @@ -1345,10 +1334,8 @@ public class Xcls_WindowRooView : Object // my vars (def) - public bool check_queued; public bool dirty; public int error_line; - public bool check_running; // ctor public Xcls_buffer(Xcls_WindowRooView _owner ) @@ -1358,10 +1345,8 @@ public class Xcls_WindowRooView : Object this.el = new Gtk.SourceBuffer( null ); // my vars (dec) - this.check_queued = false; this.dirty = false; this.error_line = -1; - this.check_running = false; // set gobject values @@ -1371,12 +1356,21 @@ public class Xcls_WindowRooView : Object // ??needed..?? // _this.save_button.el.sensitive = true; ///?? has changed occured during loading? + if (_this.sourceview.loading) { + return; + } + print("- PREVIEW EDITOR CHANGED--"); + this.dirty = true; + if (!this.checkSyntax()) { + return; + } - //this.checkSyntax(); + // what are we editing?? + - this.dirty = true; + return ; @@ -1384,6 +1378,29 @@ public class Xcls_WindowRooView : Object } // user defined functions + public bool highlightErrors ( Gee.HashMap validate_res) { + + this.error_line = validate_res.size; + + if (this.error_line < 1) { + return true; + } + var tlines = this.el.get_line_count (); + Gtk.TextIter iter; + var valiter = validate_res.map_iterator(); + while (valiter.next()) { + + // print("get inter\n"); + var eline = valiter.get_key(); + if (eline > tlines) { + continue; + } + this.el.get_iter_at_line( out iter, eline); + //print("mark line\n"); + this.el.create_source_mark(valiter.get_value(), "ERR", iter); + } + return false; + } public string toString () { Gtk.TextIter s; @@ -1396,24 +1413,7 @@ public class Xcls_WindowRooView : Object } public bool checkSyntax () { - if (this.check_running) { - print("Check is running\n"); - if (this.check_queued) { - print("Check is already queued"); - return true; - } - this.check_queued = true; - print("Adding queued Check "); - GLib.Timeout.add_seconds(1, () => { - this.check_queued = false; - - this.checkSyntax(); - return false; - }); - - - return true; - } + var str = this.toString(); // needed??? @@ -1424,69 +1424,32 @@ public class Xcls_WindowRooView : Object this.el.remove_source_marks (start, end, null); } + if (str.length < 1) { print("checkSyntax - empty string?\n"); - return true; + return false; } - if (_this.file.xtype == "PlainFile") { - - // assume it's gtk... - this.check_running = true; - /* - if (!_this.window.windowstate.valasource.checkPlainFileSpawn( - _this.file, - str - )) { - this.check_running = false; - } - */ - return true; - - } if (_this.file == null) { - return true; + return false; } - var p = Palete.factory(_this.file.xtype); + var p = Palete.factory(_this.file.xtype); // returns Roo | Gtk | PlainFile - - - this.check_running = true; - - - if (_this.file.language == "js") { - this.check_running = false; - print("calling validate javascript\n"); - /* return this.highlightErrors(p.validateJavascript( - str, - _this.key, - _this.ptype, - _this.file, - _this.node - )); - */ - } - - - print("calling validate vala\n"); - // clear the buttons. - /* - if (! _this.window.windowstate.valasource.checkFileWithNodePropChange( + if (_this.file.language != "js") { + return false; // fake syntax error. + } + + + + return this.highlightErrors(p.validateJavascript( + str, + "", // _this.key, + "file", //_this.ptype, _this.file, - _this.node, - _this.key, - _this.ptype, - str - )) { - this.check_running = false; - } - - */ - - //print("done mark line\n"); + null + )); - return true; // at present allow saving - even if it's invalid.. } }