{ "build_module" : "builder", "gen_extended" : false, "items" : [ { "# GtkSource.SearchContext searchcontext" : "null", "# JsRender.JsRender? file" : "null", "# JsRender.Node node" : "null", "# JsRender.NodeProp? prop" : "null", "# 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" : "\"\"", "$ homogeneous" : false, "$ xns" : "Gtk", "@ void save" : "()", "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL", "bool hexpand" : true, "bool vexpand" : true, "int last_search_end" : 0, "items" : [ { "$ xns" : "Gtk", "Gtk.Orientation orientation" : "Gtk.Orientation.HORIZONTAL", "bool resize_end_child" : false, "bool resize_start_child" : false, "bool shrink_end_child" : false, "bool shrink_start_child" : false, "id" : "paned", "items" : [ { "$ xns" : "Gtk", "* prop" : "start_child", "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL", "bool hexpand" : true, "int spacing" : 0, "items" : [ { "$ homogeneous" : false, "$ xns" : "Gtk", "Gtk.Orientation orientation" : "Gtk.Orientation.HORIZONTAL", "bool hexpand" : false, "bool vexpand" : false, "items" : [ { "$ xns" : "Gtk", "bool vexpand" : true, "id" : "save_button", "label" : "Save", "listeners" : { "clicked" : [ " () => { ", " _this.saveContents();", "}", " " ] }, "xtype" : "Button" }, { "$ xns" : "Gtk", "Gtk.Justification justify" : "Gtk.Justification.LEFT", "bool hexpand" : true, "float xalign" : 0, "id" : "helper", "int margin_end" : 4, "int margin_start" : 4, "listeners" : { "activate_link" : [ "(uri) => {", "\tGLib.debug(\"got uri %s\", uri);", "\tvar ls = _this.file.getLanguageServer();", "\tls.symbol.begin(uri, (a,b) => {", "\t\tls.symbol.end(b);", "\t});", "\t", "\treturn true;", "}", "" ], "query_tooltip" : [ "(x, y, keyboard_tooltip, tooltip) => {", "\tGLib.debug(\"using quiery tooltip?\");", "\tvar lbl = new Gtk.Label(this.el.tooltip_markup);", "\tlbl.width_request = 500;", "\ttooltip.set_custom(lbl);", "", "\treturn true;", "}", "" ] }, "xtype" : "Label", "| void setHelp" : [ "(Lsp.Hover? help) {", "\tif (help == null || help.contents == null", "\t\t|| help.contents.size < 1) {", "\t\tthis.el.set_text(\"\");", "\t\treturn;", "\t}", "\tvar sig = help.contents.get(0).value.split(\" \");", "\tstring[] str = {};", "\tfor(var i =0; i < sig.length; i++) {", "\t", "\t\tswitch(sig[i]) {", "\t\t\tcase \"public\":", "\t\t\tcase \"private\":", "\t\t\tcase \"protected\":", "\t\t\tcase \"async\":", "\t\t\tcase \"class\":", "\t\t\tcase \"{\":", "\t\t\tcase \"}\":", "\t\t\tcase \"(\":", "\t\t\tcase \")\":", "\t\t\t", "\t\t\t\tstr += sig[i];", "\t\t\t\tcontinue;", "\t\t\t\t", "\t\t\t\t", "\t\t\tdefault:", "\t", "\t\t\t\tstr += (\"\" + ", "\t\t\t\t\tGLib.Markup.escape_text(sig[i])", "\t\t\t\t\t+\"\");", "\t\t\tcontinue;", "\t\t}", "\t}", "\tif (help.contents.size > 1) {", "\t\tthis.el.tooltip_markup = GLib.Markup.escape_text(help.contents.get(1).value);", "\t} else {", "\t\tthis.el.tooltip_markup = GLib.Markup.escape_text(help.contents.get(0).value);", "\t}", "\tthis.el.set_markup(string.joinv(\" \",str));", "\t", "}" ] }, { "$ xns" : "Gtk", "* ctor" : "new Gtk.Scale.with_range (Gtk.Orientation.HORIZONTAL,6, 30, 1)", "* init" : [ "{", "\t//this.el.set_range(6,30);", " \tthis.el.set_value ( BuilderApplication.settings.editor_font_size);", " \tBuilderApplication.settings.editor_font_size_updated.connect(", " \t\t() => {", " \t\t\tBuilderApplication.settings.editor_font_size_inchange = true;", " \t\t//\tGLib.debug(\"update range\");", " \t\t \tthis.el.set_value (BuilderApplication.settings.editor_font_size);", " \t\t \tBuilderApplication.settings.editor_font_size_inchange = false;", " \t\t}", "\t);", "\t", " ", "}", "" ], "Gtk.Align halign" : "Gtk.Align.END", "bool draw_value" : false, "bool has_origin" : true, "bool sensitive" : true, "int digits" : 0, "int width_request" : 150, "listeners" : { "change_value" : [ "(st, val ) => {", "\tif (BuilderApplication.settings.editor_font_size_inchange) {", "\t\treturn false;", "\t}", " \tBuilderApplication.settings.editor_font_size = val;", " \treturn false;", "}" ] }, "xtype" : "Scale" }, { "$ xns" : "Gtk", "Gtk.Align halign" : "Gtk.Align.END", "id" : "close_btn", "items" : [ { "$ xns" : "Gtk", "* prop" : "child", "Gtk.IconSize icon_size" : "Gtk.IconSize.NORMAL", "string icon_name" : "window-close", "xtype" : "Image" } ], "listeners" : { "clicked" : [ " () => { ", " _this.saveContents();", " _this.window.windowstate.switchState(WindowState.State.PREVIEW);", "}", " " ] }, "string icon_name" : "window-close", "xtype" : "Button" } ], "xtype" : "Box" }, { "$ xns" : "Gtk", "Gtk.PolicyType hscrollbar_policy" : "Gtk.PolicyType.AUTOMATIC", "Gtk.PolicyType vscrollbar_policy" : "Gtk.PolicyType.AUTOMATIC", "bool overlay_scrolling" : false, "bool vexpand" : true, "id" : "RightEditor", "items" : [ { "# Gtk.CssProvider css" : "null", "$ gboolean auto_indent" : true, "$ xns" : "GtkSource", "* init" : [ "", " ", "\t", " ", " ", "this.el.completion.add_provider(", "\tnew Palete.CompletionProvider(_this)", ");", "", "// hover seems pretty useless.. - ??", "//var hover = this.el.get_hover();", "//hover.add_provider(new Palete.HoverProvider(_this));", "", "//this.el.completion.unblock_interactive();", "this.el.completion.select_on_show = true; // select", "//this.el.completion.remember_info_visibility\t = true;", "", "", "var attrs = new GtkSource.MarkAttributes();", "", "attrs.set_icon_name ( \"process-stop\"); ", "attrs.query_tooltip_text.connect(( mark) => {", " GLib.debug(\"tooltip query? %s\", mark.name);", " return strdup( mark.name);", "});", " attrs.query_tooltip_markup.connect(( mark) => {", " GLib.debug(\"tooltip query? %s\", mark.name);", " return strdup( mark.name);", "});", "this.el.set_mark_attributes (\"ERR\", attrs, 1);", "attrs.ref();", "", "", "var wattrs = new GtkSource.MarkAttributes();", "wattrs.set_icon_name ( \"process-stop\"); ", "wattrs.query_tooltip_text.connect(( mark) => {", " GLib.debug(\"tooltip query? %s\", mark.name);", " return strdup(mark.name);", "});", "wattrs.query_tooltip_markup.connect(( mark) => {", " GLib.debug(\"tooltip query? %s\", mark.name);", " return strdup(mark.name);", "});", "this.el.set_mark_attributes (\"WARN\", wattrs, 1);", "wattrs.ref();", "", " ", "var dattrs = new GtkSource.MarkAttributes();", " ", "dattrs.set_icon_name ( \"process-stop\"); ", "", "dattrs.query_tooltip_text.connect(( mark) => {", "\tGLib.debug(\"tooltip query? %s\", mark.name);", " return strdup(mark.name);", "});", "//dattrs.query_tooltip_markup.connect(( mark) => {", "//\tGLib.debug(\"tooltip query? %s\", mark.name);", " // return strdup(mark.name);", "//});", "this.el.set_mark_attributes (\"DEPR\", dattrs, 1);", "dattrs.ref(); ", "", " this.el.get_space_drawer().set_matrix(null);", " this.el.get_space_drawer().set_types_for_locations( ", "\tGtkSource.SpaceLocationFlags.ALL,", "\tGtkSource.SpaceTypeFlags.ALL", ");", "this.el.get_space_drawer().set_enable_matrix(true);", "" ], "* prop" : "child", "bool has_tooltip" : true, "bool hexpand" : true, "bool insert_spaces_instead_of_tabs" : true, "bool vexpand" : true, "boolean show_line_marks" : true, "boolean show_line_numbers" : true, "css_classes" : "{ \"code-editor\" }", "gboolean highlight_current_line" : true, "id" : "view", "indent_width" : 4, "items" : [ { "$ Gee.HashMap? xmarks" : "null", "$ xns" : "GtkSource", "$ xtype" : "Buffer", "* init" : [ "", "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\");", "", "", "" ], "* prop" : "buffer", "bool check_queued" : false, "bool enable_undo" : true, "bool highlight_matching_brackets" : true, "bool highlight_syntax" : true, "id" : "buffer", "int error_line" : "-1", "listeners" : { "changed" : [ " () => {", " // check syntax??", " // ??needed..??", " _this.save_button.el.sensitive = true;", " print(\"EDITOR CHANGED\");", " this.checkSyntax();", " ", " _this.dirty = true;", "", " // this.get('/LeftPanel.model').changed( str , false);", " return ;", "}", "" ], "cursor_moved" : [ "( ) => {", "", "\tGtk.TextIter iter;", "\tthis.el.get_iter_at_offset (", "\t\t\tout iter, this.el.cursor_position);", "", "\t_this.navigation.updateSelectedLine(", "\t\t\t(uint)iter.get_line(),", "\t\t\t(uint)iter.get_line_offset()", "\t\t);", "\tthis.showHelp(iter);", "", "}", "" ] }, "| bool OLDhighlightErrorsJson" : [ "(string type, Json.Object obj) {", "\tGtk.TextIter start;", "\tGtk.TextIter end; ", "\tthis.el.get_bounds (out start, out end);", "", "\tthis.el.remove_source_marks (start, end, type);", "\tGLib.debug(\"highlight errors\");\t\t ", "", "\t // we should highlight other types of errors..", "", "\tif (!obj.has_member(type)) {", "\t\tGLib.debug(\"Return has no errors\\n\");", "\t\treturn true;", "\t}", "", "\tif (_this.window.windowstate.state != WindowState.State.CODEONLY ", "\t\t&&", "\t\t_this.window.windowstate.state != WindowState.State.CODE", "\t\t) {", "\t\tGLib.debug(\"windowstate != CODEONLY?\");", "\t\t", "\t\treturn true;", "\t} ", "", "\t//this.marks = new Gee.HashMap();", "\tvar err = obj.get_object_member(type);", " ", "\tif (_this.file == null) {", "\t\tGLib.debug(\"file is null?\");", "\t\treturn true;", "", "\t}", "\tvar valafn = _this.file.path;", "", "\tif (_this.file.xtype != \"PlainFile\") {", "", "\t\tvalafn = \"\";", "\t\ttry { ", "\t\t\tvar regex = new Regex(\"\\\\.bjs$\");", "\t\t\t// should not happen", "\t \t\tvalafn = regex.replace(_this.file.path,_this.file.path.length , 0 , \".vala\");", "\t\t} catch (GLib.RegexError e) {", "\t\t\treturn true;", "\t\t} ", "", "", "", "\t}", "\tif (!err.has_member(valafn)) {", "\t\tGLib.debug(\"File path has no errors\");", "\t\treturn true;", "\t}", "", "\tvar lines = err.get_object_member(valafn);", "\t", "\tvar offset = 1;", "\tif (obj.has_member(\"line_offset\")) { // ?? why??", "\t\toffset = (int)obj.get_int_member(\"line_offset\") + 1;", "\t}", "", "", "\tvar tlines = this.el.get_line_count () +1;", "\t", "\tif (_this.prop != null) {", "\t", "\t\ttlines = _this.prop.end_line + 1;", "\t\toffset = _this.prop.start_line + 1;", "\t", "\t}", "\t", "", "", "\tlines.foreach_member((obj, line, node) => {", "\t\t", "\t Gtk.TextIter iter;", "// print(\"get inter\\n\");", "\t var eline = int.parse(line) - offset;", "\t GLib.debug(\"GOT ERROR on line %s -- converted to %d (offset = %d)\\n\", line,eline, offset);", "\t ", "\t ", "\t if (eline > tlines || eline < 0) {", "\t return;", "\t }", "\t ", "\t ", "\t this.el.get_iter_at_line( out iter, eline);", "\t //print(\"mark line\\n\");", "\t var msg = \"\";", "\t var ar = lines.get_array_member(line);", "\t for (var i = 0 ; i < ar.get_length(); i++) {", "\t \tif (ar.get_string_element(i) == \"Success\") {", "\t \t\tcontinue;", " \t\t}", "\t\t\tmsg += (msg.length > 0) ? \"\\n\" : \"\";", "\t\t\tmsg += ar.get_string_element(i);", "\t\t}", "\t\tif (msg == \"\") {", "\t\t\treturn;", "\t\t}", "\t\tmsg = \"Line: %d\".printf(eline+1) + \" \" + msg;", "\t this.el.create_source_mark(msg, type, iter);", "\t GLib.debug(\"set line %d to %m\", eline, msg);", "\t // this.marks.set(eline, msg);", "\t} );", "\treturn false;", "", "", "", "", "", "\t}", "" ], "| 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);", "\t BuilderApplication.showSpinner(\"appointment soon\",\"document change pending\");", " \t_this.file.getLanguageServer().document_change(_this.file);", "\t\t_this.file.getLanguageServer().queueDocumentSymbols(_this.file);", " _this.file.setSource(oldcode);", " ", "\t\t ", " return true;", " ", " }", " if (_this.file == null) {", " return true;", " }", " ", " ", "", " ", " ", " GLib.debug(\"calling validate\"); ", " // clear the buttons.", " \tif (_this.prop.name == \"xns\" || _this.prop.name == \"xtype\") {", "\t\treturn true ;", "\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;", " ", " ", " //print(\"done mark line\\n\");", " ", " return true; // at present allow saving - even if it's invalid..", "}", "" ], "| bool highlightErrors" : [ "( Gee.HashMap validate_res) {", " ", "\tthis.error_line = validate_res.size;", "", "\tif (this.error_line < 1) {", "\t\treturn true;", "\t}", "\tvar tlines = this.el.get_line_count ();", "\tGtk.TextIter iter;", "\tvar valiter = validate_res.map_iterator();", "\twhile (valiter.next()) {", "", "\t// print(\"get inter\\n\");", "\t\tvar eline = valiter.get_key();", "\t\tif (eline > tlines) {", "\t\t\tcontinue;", "\t\t}", "\t\tthis.el.get_iter_at_line( out iter, eline);", "\t\t//print(\"mark line\\n\");", "\t\tthis.el.create_source_mark(valiter.get_value(), \"ERR\", iter);", "\t} ", "\treturn false;", "}" ], "| string toString" : [ " () {", " ", " Gtk.TextIter s;", " Gtk.TextIter e;", " this.el.get_start_iter(out s);", " this.el.get_end_iter(out e);", " var ret = this.el.get_text(s,e,true);", " //print(\"TO STRING? \" + ret);", " return ret;", "}", " " ], "| void showHelp" : [ "(Gtk.TextIter iter) {", "\tvar back = iter.copy();", "\tback.backward_char();", "\t", "\tvar forward = iter.copy();", "\tforward.forward_char();", "\t", "\t// what's the character at the iter?", "\tvar str = back.get_text(iter);", "\tstr += iter.get_text(forward);", "\tif (str.strip().length < 1) {", "\t\treturn;", "\t}", "\tvar offset = iter.get_line_offset();", "\tvar line = iter.get_line();", "\tif (_this.prop != null) {", "\t\t\t\t// ", "\t\tline += _this.prop.start_line ; ", "\t\t\t\t\t// this is based on Gtk using tabs (hence 1/2 chars);", "\t\toffset += _this.node.node_pad.length;", "\t\t\t\t\t// javascript listeners are indented 2 more spaces.", "\t\tif (_this.prop.ptype == JsRender.NodePropType.LISTENER) {", "\t\t\toffset += 2;", "\t\t}", "\t} ", "\t", "\tvar ls = _this.file.getLanguageServer();", "\tls.hover.begin(", "\t\t_this.file, line, offset,", "\t\t( a, o) => {", "\t\t\ttry {", "\t\t\t\tvar res = ls.hover.end(o );", "\t\t\t", "\t\t\t\t_this.helper.setHelp(res);", "\t\t\t} catch (GLib.Error e) {", "\t\t\t\t// noop..", "\t\t\t}", "\t\t});", "}\t", "\t\t ", "" ] }, { "# bool is_control" : false, "$ xns" : "Gtk", "id" : "keystate", "listeners" : { "key_pressed" : [ "(keyval, keycode, state) => {", "", " \tif (keyval == Gdk.Key.Control_L || keyval == Gdk.Key.Control_R) {", " \t\tthis.is_control = true;", "\t}", "\treturn false;", "}", "" ], "key_released" : [ "(keyval, keycode, state) => {", "", " \t if (keyval == Gdk.Key.Control_L || keyval == Gdk.Key.Control_R) {", " \t\tthis.is_control = false;", "\t}", " if (keyval == Gdk.Key.s && (state & Gdk.ModifierType.CONTROL_MASK ) > 0 ) {", " GLib.debug(\"SAVE: ctrl-S pressed\");", " _this.saveContents();", " return;", " }", " ", " if (keyval == Gdk.Key.g && (state & Gdk.ModifierType.CONTROL_MASK ) > 0 ) {", "\t GLib.debug(\"SAVE: ctrl-g pressed\");", "\t\t_this.forwardSearch(true);", "\t return;", "\t}", "\tif (keyval == Gdk.Key.f && (state & Gdk.ModifierType.CONTROL_MASK ) > 0 ) {", "\t GLib.debug(\"SAVE: ctrl-f pressed\");", "\t\t_this.search_entry.el.grab_focus();", "\t\t_this.search_entry.el.select_region(0,-1);", "\t return;", "\t}", "\tif (keyval == Gdk.Key.space && (state & Gdk.ModifierType.CONTROL_MASK ) > 0 ) {", "\t\t_this.view.el.show_completion();", "\t}", "\t", "\tGtk.TextIter iter;", "\t_this.buffer.el.get_iter_at_offset( out iter, _this.buffer.el.cursor_position); ", "\tvar line = iter.get_line();", "\tvar offset = iter.get_line_offset();", "\tGLib.debug(\"line %d off %d\", line ,offset);", "\tif (_this.prop != null) {", "\t\tline += _this.prop.start_line + 1; // i think..", "\t\toffset += 12; // should probably be 8 without namespaced ", "\t\tGLib.debug(\"guess line %d off %d\", line ,offset);", "\t} ", " //_this.view.el.show_completion();", " // print(event.key.keyval)", " ", " ", " return;", " ", " ", "}", "" ] }, "xtype" : "EventControllerKey" }, { "# double distance" : "0.0f", "$ xns" : "Gtk", "Gtk.EventControllerScrollFlags flags" : "Gtk.EventControllerScrollFlags.VERTICAL", "listeners" : { "scroll" : [ "(dx, dy) => {", "\tif (!_this.keystate.is_control) {", "\t\treturn false;", "\t}", "\t //GLib.debug(\"scroll %f\", dy);", "\t", "\tthis.distance += dy;", "\t", "\t//GLib.debug(\"scroll %f / %f\", dy, this.distance);", " ", "\t if (this.distance < -1) {", " ", "\t\tBuilderApplication.settings.editor_font_size ++;", "\t\tthis.distance = 0;", "\t}", "\tif (this.distance > 1) {", "\t\tBuilderApplication.settings.editor_font_size --;", "\t\tthis.distance = 0;", "\t}", "\t ", "\treturn true;", "}", "" ] }, "xtype" : "EventControllerScroll" }, { "$ xns" : "Gtk", "listeners" : { "pressed" : [ "(n_press, x, y) => {", "\tGtk.TextIter iter;", "\tint buffer_x, buffer_y;", "\tvar gut = _this.view.el.get_gutter(Gtk.TextWindowType.LEFT);", "\t", "\t _this.view.el.window_to_buffer_coords (Gtk.TextWindowType.TEXT,", "\t\t(int)x - gut.get_width(), (int)y,", " \t\tout buffer_x, out buffer_y);", "\t_this.view.el.get_iter_at_location (out iter, ", "\t\t\tbuffer_x, buffer_y);;", "\t", "\t", "\tif (_this.buffer.el.iter_has_context_class(iter, \"comment\") ||", "\t\t_this.buffer.el.iter_has_context_class(iter, \"string\")", "\t) { ", "\t\treturn ;", "\t}", "\t_this.buffer.showHelp(iter);", "\t ", "\t\t ", " ", "}", "" ] }, "xtype" : "GestureClick" } ], "listeners" : { "query_tooltip" : [ "(x, y, keyboard_tooltip, tooltip) => {", "\t", "\t//GLib.debug(\"query tooltip\");", "\tGtk.TextIter iter;", "\tint trailing;", "\t", "\tvar yoff = (int) _this.RightEditor.el.vadjustment.value;", "\t", "\t// I think this is problematic - if it's compliing / updating at same time as query.", "\t", "\t//if (_this.window.statusbar_compile_spinner.el.spinning) {", "\t//\treturn false;", "\t//}", "\t", "\tthis.el.get_iter_at_position (out iter, out trailing, x, y + yoff);", "\t ", "\tvar l = iter.get_line();", "", "\t", "\t ", "\t// GLib.debug(\"query tooltip line %d\", (int) l);", "\tif (l < 0) {", "", "\t\treturn false;", "\t}", "\t/*", "\tif (_this.buffer.marks != null && _this.buffer.marks.has_key(l)) {", "\t\tGLib.debug(\"line %d setting tip to %s\", l, _this.buffer.marks.get(l));", "\t\ttooltip.set_text(_this.buffer.marks.get(l).dup());", "\t\treturn true;", "\t}", " ", "\treturn false;", "\t*/", "\t", "\t ", "\t// this crashes?? - not sure why.", "\tvar marks = _this.buffer.el.get_source_marks_at_line(l, \"ERR\");", "\tif (marks.is_empty()) {", "\t\tmarks = _this.buffer.el.get_source_marks_at_line(l, \"WARN\");", "\t}", "\tif (marks.is_empty()) {", "\t\tmarks = _this.buffer.el.get_source_marks_at_line(l, \"DEPR\");", "\t}", "\t", "\t// GLib.debug(\"query tooltip line %d marks %d\", (int)l, (int) marks.length());", "\tvar str = \"\";", "\tmarks.@foreach((m) => { ", "\t\t//GLib.debug(\"got mark %s\", m.name);", "\t\tstr += (str.length > 0 ? \"\\n\" : \"\") + m.category + \": \" + m.name;", "\t});", "\t// true if there is a mark..", "\tif (str.length > 0 ) {", "\t\ttooltip.set_text( str );", "\t}", "\treturn str.length > 0 ? true : false;", "\t ", "}", "" ] }, "string name" : "editor-view", "uint tab_width" : 4, "xtype" : "View", "| void load" : [ " (string str) {", "", "// show the help page for the active node..", " //this.get('/Help').show();", " ", " // this.get('/BottomPane').el.set_current_page(0);", " \tGLib.debug(\"load called - Reset undo buffer\");", " \t", " var buf = (GtkSource.Buffer)this.el.get_buffer();", " buf.begin_irreversible_action();", " buf.set_text(str, str.length);", " buf.end_irreversible_action();", " ", " var lm = GtkSource.LanguageManager.get_default();", " var lang = \"vala\";", " if (_this.file != null) {", " lang = _this.file.language;", " }", " print(\"lang=%s, content_type = %s\\n\", lang, _this.file.content_type);", " var lg = _this.file.content_type.length > 0 ?", " lm.guess_language(_this.file.path, _this.file.content_type) :", " lm.get_language(lang);", " ", " ", " ((GtkSource.Buffer)(this.el.get_buffer())) .set_language(lg); ", "", " this.el.insert_spaces_instead_of_tabs = true;", " if (lg != null) {", "\t\tprint(\"sourcelanguage = %s\\n\", lg.name);", "\t\tif (lg.name == \"Vala\") {", "\t\t this.el.insert_spaces_instead_of_tabs = false;", "\t\t}", " }", " _this.dirty = false;", " this.el.grab_focus();", " _this.save_button.el.sensitive = false;", " _this.last_error_counter = -1;", "}" ] } ], "xtype" : "ScrolledWindow" }, { "$ xns" : "Gtk", "* pack" : "append", "Gtk.Orientation orientation" : "Gtk.Orientation.HORIZONTAL", "bool homogeneous" : false, "bool vexpand" : false, "int spacing" : 0, "items" : [ { "$ xns" : "Gtk", "Gtk.CssProvider css" : "", "bool hexpand" : true, "id" : "search_entry", "items" : [ { "$ xns" : "Gtk", "listeners" : { "key_pressed" : [ "(keyval, keycode, state) => {", "", "\tif (keyval == Gdk.Key.g && (state & Gdk.ModifierType.CONTROL_MASK ) > 0 ) {", "\t GLib.debug(\"SAVE: ctrl-g pressed\");", "\t\t_this.forwardSearch(true);", "\t return true;", "\t}", " ", " ", " \tif (keyval == Gdk.Key.Return && _this.search_entry.el.text.length > 0) {", "\t\t_this.forwardSearch(true);", "\t\t", "\t\t", "\t return true;", "", "\t} ", " // print(event.key.keyval)", " ", " return false;", "}", "" ] }, "xtype" : "EventControllerKey" } ], "listeners" : { "search_changed" : [ "( ) => {", "", "_this.search(_this.search_entry.el.text);", "\t _this.search_results.updateResults();", "", "\tGLib.Timeout.add_seconds(1,() => {", "\t\t _this.search_results.updateResults();", "\t\t return false;", "\t });", "}", "" ] }, "string name" : "editor-search-entry", "string placeholder_text" : "Press enter to search", "uint search_delay" : 3, "xtype" : "SearchEntry", "| void forwardSearch" : [ "(bool change_focus) {", "", "", "\t_this.forwardSearch(change_focus);", "", "/*", "", "\tswitch(_this.windowstate.state) {", "\t\tcase WindowState.State.CODEONLY:", "\t\t//case WindowState.State.CODE:", "\t\t\t// search the code being edited..", "\t\t\t_this.windowstate.code_editor_tab.forwardSearch(change_focus);", "\t\t\t ", "\t\t\tbreak;", "\t\tcase WindowState.State.PREVIEW:", "\t\t\tif (_this.windowstate.file.xtype == \"Gtk\") {", "\t\t\t\t_this.windowstate.window_gladeview.forwardSearch(change_focus);", "\t\t\t} else { ", "\t\t\t\t _this.windowstate.window_rooview.forwardSearch(change_focus);", "\t\t\t}", "\t\t", "\t\t\tbreak;", "\t}", "\t*/", "\t", "}", "" ] }, { "$ xns" : "Gtk", "id" : "search_results", "int margin_end" : 4, "int margin_start" : 4, "string label" : "No Results", "xtype" : "Label", "| void updateResults" : [ "() {", "\tthis.el.visible = true;", "\t", "\tvar res = _this.searchcontext.get_occurrences_count();", "\tif (res < 0) {", "\t\t_this.search_results.el.label = \"??? Matches\";\t\t", "\t\treturn;", "\t}", "", "\t_this.nextBtn.el.sensitive = false;", "\t_this.backBtn.el.sensitive = false;\t", "", "\tif (res > 0) {", "\t\t_this.search_results.el.label = \"%d Matches\".printf(res);", "\t\t_this.nextBtn.el.sensitive = true;", "\t\t_this.backBtn.el.sensitive = true;", "\t\treturn;", "\t} ", "\t_this.search_results.el.label = \"No Matches\";", "\t", "}" ] }, { "$ xns" : "Gtk", "bool always_show_image" : true, "bool sensitive" : false, "id" : "nextBtn", "listeners" : { "clicked" : [ "(event) => {", "", "\t_this.forwardSearch(true);", "\t", "\t ", "}", "" ] }, "string icon_name" : "go-down", "xtype" : "Button" }, { "$ xns" : "Gtk", "bool always_show_image" : true, "bool sensitive" : false, "id" : "backBtn", "listeners" : { "clicked" : [ "(event) => {", "", "\t_this.backSearch(true);", "\t ", "}", "" ] }, "string icon_name" : "go-up", "xtype" : "Button" }, { "$ xns" : "Gtk", "bool always_show_arrow" : true, "bool always_show_image" : true, "items" : [ { "$ xns" : "Gtk", "* prop" : "popover", "id" : "search_settings", "items" : [ { "$ xns" : "Gtk", "* prop" : "child", "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL", "int spacing" : 0, "items" : [ { "$ xns" : "Gtk", "* init" : [ "{", "\tthis.el.show();", "}", "" ], "id" : "case_sensitive", "string label" : "Case Sensitive", "xtype" : "CheckButton" }, { "$ xns" : "Gtk", "* init" : [ "{", "\tthis.el.show();", "}", "" ], "id" : "regex", "string label" : "Regex", "xtype" : "CheckButton" }, { "$ xns" : "Gtk", "id" : "multiline", "string label" : "Multi-line (add \\n)", "xtype" : "CheckButton" } ], "xtype" : "Box" } ], "xtype" : "Popover" } ], "string icon_name" : "emblem-system", "xtype" : "MenuButton" } ], "xtype" : "Box" } ], "xtype" : "Box" }, { "$ xns" : "Gtk", "* prop" : "end_child", "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL", "bool hexpand" : true, "bool vexpand" : true, "bool visible" : false, "id" : "navigation_holder", "int spacing" : 0, "int width_request" : 120, "items" : [ { "$ xns" : "Gtk", "Gtk.Orientation orientation" : "Gtk.Orientation.HORIZONTAL", "int spacing" : 0, "xtype" : "Box" }, { "$ xns" : "Gtk", "bool hexpand" : true, "bool vexpand" : true, "bool visible" : true, "id" : "navigationwindow", "items" : [ { "# int last_selected_line" : "-1", "$ Gtk.Widget? selected_row" : "null", "$ xns" : "Gtk", "* prop" : "child", "id" : "navigation", "items" : [ { "$ xns" : "Gtk", "bool expand" : true, "items" : [ { "$ xns" : "Gtk", "* prop" : "factory", "listeners" : { "bind" : [ "(listitem) => {", "\t ", "\t// GLib.debug(\"listitme is is %s\", ((Gtk.ListItem)listitem).get_type().name());", "\t", "\t//var expand = (Gtk.TreeExpander) ((Gtk.ListItem)listitem).get_child();", "\tvar expand = (Gtk.TreeExpander) ((Gtk.ListItem)listitem).get_child();", "\t ", "\t ", "\tvar hbox = (Gtk.Box) expand.child;", " ", "\t", "\tvar img = (Gtk.Image) hbox.get_first_child();", "\tvar lbl = (Gtk.Label) img.get_next_sibling();", "\t", "\tvar lr = (Gtk.TreeListRow)((Gtk.ListItem)listitem).get_item();", "\tvar sym = (Lsp.DocumentSymbol) lr.get_item();", "\t", "\tsym.set_data(\"widget\", expand.get_parent());", "\texpand.get_parent().get_parent().set_data(\"symbol\", sym);", "\t", "\t//GLib.debug(\"save sym on %s\", expand.get_parent().get_parent().get_type().name());", "\t", "\t//GLib.debug(\"got %d children for %s\" , (int)sym.children.get_n_items(), sym.name);", " ", " expand.set_hide_expander( sym.children.get_n_items() < 1);", " \texpand.set_list_row(lr);", " \t//this.in_bind = true;", " \t// default is to expand", " ", " \t//this.in_bind = false;", " \t", " \tsym.bind_property(\"symbol_icon\",", " img, \"icon_name\",", " GLib.BindingFlags.SYNC_CREATE);", " \t", " \thbox.css_classes = { sym.symbol_icon };", " \t", " \tsym.bind_property(\"name\",", " lbl, \"label\",", " GLib.BindingFlags.SYNC_CREATE);", " \t// should be better?- --line no?", " \tsym.bind_property(\"tooltip\",", " lbl, \"tooltip_markup\",", " GLib.BindingFlags.SYNC_CREATE);", " \t// bind image...", " \t", "}", "" ], "setup" : [ "(listitem) => {", "\t", "\tvar expand = new Gtk.TreeExpander();", "\t ", "\texpand.set_indent_for_depth(true);", "\texpand.set_indent_for_icon(true);", "\tvar hbox = new Gtk.Box(Gtk.Orientation.HORIZONTAL,0);", "\tvar icon = new Gtk.Image();", "\tvar lbl = new Gtk.Label(\"\");", "\tlbl.use_markup = true;", "\tlbl.ellipsize = Pango.EllipsizeMode.END;", "\t", "\ticon.margin_end = 4;", " \tlbl.justify = Gtk.Justification.LEFT;", " \tlbl.xalign = 0;", "", "//\tlistitem.activatable = true; ??", "\t", "\thbox.append(icon);", "\thbox.append(lbl);", "\texpand.set_child(hbox);", "\t((Gtk.ListItem)listitem).set_child(expand);", "\t", "}", "" ] }, "xtype" : "SignalListItemFactory" } ], "string title" : "Code Navigation", "xtype" : "ColumnViewColumn" }, { "$ xns" : "Gtk", "* prop" : "model", "id" : "navigationselmodel", "items" : [ { "$ xns" : "Gtk", "* prop" : "model", "id" : "navigationsort", "items" : [ { "$ Gtk.TreeListModelCreateModelFunc create_func" : [ "(item) => {", " ", "\treturn ((Lsp.DocumentSymbol)item).children;", "}", "" ], "$ xns" : "Gtk", "* prop" : "model", "bool autoexpand" : true, "bool passthrough" : false, "items" : [ { "$ GLib.Type item_type" : "typeof(Lsp.DocumentSymbol)", "$ xns" : "GLib", "* prop" : "root", "id" : "navliststore", "xtype" : "ListStore", "| Lsp.DocumentSymbol? symbolAtLine" : [ "(uint line, uint chr) {", " ", "\t", "\tfor(var i = 0; i < this.el.get_n_items();i++) {", "\t\tvar el = (Lsp.DocumentSymbol)this.el.get_item(i);", "\t\t//GLib.debug(\"Check sym %s : %d-%d\",", "\t\t//\tel.name , (int)el.range.start.line,", "\t\t//\t(int)el.range.end.line", "\t\t//);", "\t\tvar ret = el.containsLine(line,chr);", "\t\tif (ret != null) {", "\t\t\treturn ret;", "\t\t}", "\t\t", "\t}", "\t", "\treturn null;", "}" ] } ], "listeners" : { "items_changed" : [ "(position, removed, added) => {", "\tGLib.debug(\"tree item changed %d , %d , %d\",(int) position, (int)removed, (int) added);", "\t if (added < 1) { ", "\t \treturn;", " \t}", "\t//var sym = (Lsp.DocumentSymbol) this.el.get_item(position);", "\tvar row = this.el.get_row(position);", "\t", "\tGLib.debug(\"got %s\", row.get_item().get_type().name());", "\t", "", "}", "" ] }, "xtype" : "TreeListModel" }, { "$ xns" : "Gtk", "* prop" : "sorter", "items" : [ { "$ xns" : "Gtk", "* prop" : "sorter", "items" : [ { "$ GLib.Type this_type" : "typeof(Lsp.DocumentSymbol)", "$ xns" : "Gtk", "* prop" : "expression", "string property_name" : "sort_key", "xtype" : "PropertyExpression" } ], "xtype" : "StringSorter" } ], "xtype" : "TreeListRowSorter" } ], "xtype" : "SortListModel", "| Lsp.DocumentSymbol? getSymbolAt" : [ "(uint row) {", "", " var tr = (Gtk.TreeListRow)this.el.get_item(row);", " ", " var a = tr.get_item();; ", " GLib.debug(\"get_item (2) = %s\", a.get_type().name());", " \t", " ", " return (Lsp.DocumentSymbol)tr.get_item();", "\t ", "}" ], "| int getRowFromSymbol" : [ "(Lsp.DocumentSymbol sym) {", "", "\tfor (var i=0;i < this.el.get_n_items(); i++) {", "\t\tvar tr = (Gtk.TreeListRow)this.el.get_item(i);", "\t ", "\t\tif (sym.equals( (Lsp.DocumentSymbol)tr.get_item())) {", "\t\t\treturn i;", "\t\t}", "\t}", " \treturn -1;", "}" ], "| void collapseOnLoad" : [ "() {", "\tfor (var i=0;i < this.el.get_n_items(); i++) {", "\t\tvar tr = (Gtk.TreeListRow)this.el.get_item(i);", "\t\tvar sym = (Lsp.DocumentSymbol)tr.get_item();", "\t\tswitch (sym.kind) {", "\t \t\tcase Lsp.SymbolKind.Enum: ", "\t \t\t\ttr.expanded = false;", "\t \t\t\tbreak;", "\t\t\tdefault:", "\t\t\t\t//tr.expanded = true;", "\t\t\t\tbreak;", "\t\t}", "\t}", " ", "\t", "", "", "}" ] } ], "xtype" : "NoSelection" }, { "$ xns" : "Gtk", "listeners" : { "pressed" : [ "(n_press, x, y) => {", "\tstring pos;", " \tvar row = _this.navigation.getRowWidgetAt(x,y, out pos );", "", " if (row == null) {", "\t GLib.debug(\"no row selected items\");", "\t return;", " }", "\tGLib.debug(\"got click on %s\", row.get_type().name()); ", " //Lsp.DocumentSymbol", " var sym = row.get_data(\"symbol\");", " if (sym == null) {", " \treturn;", "\t}", "\t/*", "\t \"range\" : {", " \"start\" : {", " \"line\" : 1410,", " \"character\" : 8", " },", " \"end\" : {", " \"line\" : 1410,", " \"character\" : 39", " }", " },", " */", " GLib.debug(\"goto line %d\", (int)sym.range.start.line); ", " _this.scroll_to_line((int)sym.range.start.line);", " Gtk.TextIter iter;", " _this.buffer.el.get_iter_at_line_offset(out iter, ", " \t(int)sym.range.start.line,", " \t(int)sym.range.start.character", "\t);", " _this.buffer.el.place_cursor(iter);", "\t", "}" ] }, "xtype" : "GestureClick" } ], "string name" : "editor-navigation", "xtype" : "ColumnView", "| Gtk.Widget? getRowWidgetAt" : [ "(double x, double y, out string pos) {", "", "\tpos = \"\";", "\tvar w = this.el.pick(x, y, Gtk.PickFlags.DEFAULT);", "\t//GLib.debug(\"got widget %s\", w == null ? \"nothing\" : w.get_type().name());", "\tif (w == null) {", "\t\treturn null;", "\t}", "\t", "\tvar row= w.get_ancestor(GLib.Type.from_name(\"GtkColumnViewRowWidget\"));", "\tif (row == null) {", "\t\treturn null;", "\t}", "\t", "\t//GLib.debug(\"got colview %s\", row == null ? \"nothing\" : row.get_type().name());", "\t ", " ", "\t", "\t//GLib.debug(\"row number is %d\", rn);", "\t//GLib.debug(\"click %d, %d\", (int)x, (int)y);", "\t// above or belw", "\tGraphene.Rect bounds;", "\trow.compute_bounds(this.el, out bounds);", "\t//GLib.debug(\"click x=%d, y=%d, w=%d, h=%d\", ", "\t//\t(int)bounds.get_x(), (int)bounds.get_y(),", "\t//\t(int)bounds.get_width(), (int)bounds.get_height()", "\t//\t);", "\tvar ypos = y - bounds.get_y();", "\t//GLib.debug(\"rel ypos = %d\", (int)ypos);\t", "\tvar rpos = 100.0 * (ypos / bounds.get_height());", "\t//GLib.debug(\"rel pos = %d %%\", (int)rpos);", "\tpos = \"over\";", "\t", "\tif (rpos > 80) {", "\t\tpos = \"below\";", "\t} else if (rpos < 20) {", "\t\tpos = \"above\";", "\t} ", "\treturn row;", " }" ], "| int getRowAt" : [ "(double x, double y, out string pos) {", "", "\tpos = \"\";", "\tvar w = this.el.pick(x, y, Gtk.PickFlags.DEFAULT);", "\t//GLib.debug(\"got widget %s\", w == null ? \"nothing\" : w.get_type().name());", "\tif (w == null) {", "\t\treturn -1;", "\t}", "\t", "\tvar row= w.get_ancestor(GLib.Type.from_name(\"GtkColumnViewRowWidget\"));", "\tif (row == null) {", "\t\treturn -1;", "\t}", "\t", "\t//GLib.debug(\"got colview %s\", row == null ? \"nothing\" : row.get_type().name());", "\t ", "\tvar rn = 0;", "\tvar cr = row;", "\t ", "\twhile (cr.get_prev_sibling() != null) {", "\t\trn++;", "\t\tcr = cr.get_prev_sibling();", "\t}", "\t", "\t//GLib.debug(\"row number is %d\", rn);", "\t//GLib.debug(\"click %d, %d\", (int)x, (int)y);", "\t// above or belw", "\tGraphene.Rect bounds;", "\trow.compute_bounds(this.el, out bounds);", "\t//GLib.debug(\"click x=%d, y=%d, w=%d, h=%d\", ", "\t//\t(int)bounds.get_x(), (int)bounds.get_y(),", "\t//\t(int)bounds.get_width(), (int)bounds.get_height()", "\t//\t);", "\tvar ypos = y - bounds.get_y();", "\t//GLib.debug(\"rel ypos = %d\", (int)ypos);\t", "\tvar rpos = 100.0 * (ypos / bounds.get_height());", "\t//GLib.debug(\"rel pos = %d %%\", (int)rpos);", "\tpos = \"over\";", "\t", "\tif (rpos > 80) {", "\t\tpos = \"below\";", "\t} else if (rpos < 20) {", "\t\tpos = \"above\";", "\t} ", "\treturn rn;", " }" ], "| void show" : [ "(Gee.ArrayList syms) {", "\t", "\tif (!_this.navigation_holder.el.visible && syms.size > 0) {", "\t\t_this.navigation_holder.el.show();", "\t\t_this.paned.el.position = ", "\t\t\t_this.paned.el.get_width() - 200;", "\t} ", "\t//_this.navliststore.el.remove_all();", "\t", "\t", "\tvar ls = new GLib.ListStore(typeof(Lsp.DocumentSymbol));", "\t", "\tforeach(var sym in syms) {", "\t\tls.append(sym);", "\t}", "\t// if syms updated is empty, but we already have one..", "\tif (_this.navliststore.el.get_n_items() > 0 && ls.get_n_items() < 1) {", "\t\treturn;", "\t}", "\tLsp.DocumentSymbol.copyList(ls, _this.navliststore.el);", "\t//_this.navliststore.el.append(sym);", "\tthis.last_selected_line = -1;", "\tGLib.Idle.add(() => {", "\t\t_this.navigationsort.collapseOnLoad();", "\t\tGtk.TextIter iter;", "\t\t_this.buffer.el.get_iter_at_offset (", "\t\t\t\tout iter, _this.buffer.el.cursor_position);", "\t\t", "\t\tGLib.debug(\"idle update scroll %d, %d\", iter.get_line(),", "\t\t\t\titer.get_line_offset());", "\t\tthis.updateSelectedLine(", "\t\t\t\t(uint)iter.get_line(),", "\t\t\t\t(uint)iter.get_line_offset()", "\t\t);", "\t\treturn false;", "\t});", "", "}" ], "| void updateSelectedLine" : [ "(uint line, uint chr) {", "\tif (line == this.last_selected_line) {", "\t\treturn;", "\t}", "\tGLib.debug(\"select line %d\", (int)line);", "\tthis.last_selected_line = (int)line;", "\t", "\t", "\tvar new_row = -1;", "\tvar sym = _this.navliststore.symbolAtLine(line, chr);", "\tif (sym != null) {", "\t \tnew_row = _this.navigationsort.getRowFromSymbol(sym);", " \t\tGLib.debug(\"select line %d - row found %d\", (int)line, new_row);", " \t} else {", " \t\tGLib.debug(\" no symbol found at line %d\", (int)line);", " \t}", " \t", "\tif (this.selected_row != null) { ", "\t\tGLib.debug(\" remove selected row\");", "\t\tthis.selected_row.remove_css_class(\"selected-row\");", "\t}", "\tthis.selected_row = null;", "\tif (new_row > -1) {", "\t\tthis.el.scroll_to(new_row,null,Gtk.ListScrollFlags.NONE, null);", "\t\tvar row = sym.get_data(\"widget\");", "\t\tif (row != null) {", "\t\t\tGLib.debug(\" Add selected row\");", " \t\t\t", "\t\t\trow.add_css_class(\"selected-row\");", "\t\t\tthis.selected_row = row;", "", "\t\t\t", "\t\t} else {", "\t\t\tGLib.debug(\"could not find widget on row %d\", new_row);", "\t\t}", "", "\t}", "", "", "}" ] } ], "xtype" : "ScrolledWindow" } ], "xtype" : "Box" } ], "xtype" : "Paned" } ], "xtype" : "Box", "| bool saveContents" : [ " () {", " ", " ", " if (_this.file == null) {", " return true;", " }", " ", " ", " ", " var str = _this.buffer.toString();", " ", " _this.buffer.checkSyntax();", " ", " ", " ", " // LeftPanel.model.changed( str , false);", " _this.dirty = false;", " _this.save_button.el.sensitive = false;", " ", " // find the text for the node..", " if (_this.file.xtype != \"PlainFile\") {", " // in theory these properties have to exist!?!", " \tthis.prop.val = str;", " //this.window.windowstate.left_props.reload();", " } else {", " _this.file.setSource( str );", " }", " ", " // call the signal..", " this.save();", " ", " return true;", "", "} " ], "| int search" : [ "(string in_txt) {", "", "\tvar s = new GtkSource.SearchSettings();", "\ts.case_sensitive = _this.case_sensitive.el.active;", "\ts.regex_enabled = _this.regex.el.active;\t", "\ts.wrap_around = false;", "\t", "\tthis.searchcontext = new GtkSource.SearchContext(this.buffer.el,s);", "\tthis.searchcontext.set_highlight(true);", "\tvar txt = in_txt;", "\t", "\tif (_this.multiline.el.active) {", "\t\ttxt = in_txt.replace(\"\\\\n\", \"\\n\");", "\t}", "\t", "\ts.set_search_text(txt);", "\tGtk.TextIter beg, st,en;", "\t ", "\tthis.buffer.el.get_start_iter(out beg);", "\tbool has_wrapped_around;", "\tthis.searchcontext.forward(beg, out st, out en, out has_wrapped_around);", "\tthis.last_search_end = 0;", "\t", "\treturn this.searchcontext.get_occurrences_count();", "", " ", " ", "", "}", "" ], "| string tempFileContents" : [ "() {", " ", " ", " if (_this.file == null) {", " return \"\";", " }", "\tvar str= this.buffer.toString();", "\tif (_this.file.xtype == \"PlainFile\") {", " ", " \treturn str;", " ", " }", " ", " ", " ", " GLib.debug(\"calling validate\"); ", " // clear the buttons.", " \tif (_this.prop.name == \"xns\" || _this.prop.name == \"xtype\") {", "\t\treturn this.file.toSource(); ;", "\t}", "\t", "\tvar oldcode = _this.prop.val;", "\t_this.prop.val = str;", " var ret = _this.file.toSource();", " _this.prop.val = oldcode;", " return ret;", " ", "}" ], "| void backSearch" : [ "(bool change_focus) {", "", "\tif (this.searchcontext == null) {", "\t\treturn;", "\t}", "\t", "\tGtk.TextIter beg, st,en;", "\tbool has_wrapped_around;", "\tthis.buffer.el.get_iter_at_offset(out beg, this.last_search_end -1 );", "\t", "\tif (!this.searchcontext.backward(beg, out st, out en, out has_wrapped_around)) {", "\t\tthis.last_search_end = 0;", "\t} else {", "\t\tthis.last_search_end = en.get_offset();", "\t\tif (change_focus) {", "\t\t\tthis.view.el.grab_focus();", "\t\t}", "\t\tthis.buffer.el.place_cursor(st);", "\t\tthis.view.el.scroll_to_iter(st, 0.1f, true, 0.0f, 0.5f);", "\t}", "", "}", "" ], "| void forwardSearch" : [ "(bool change_focus) {", "", "\tif (this.searchcontext == null) {", "\t\treturn;", "\t} ", "", "\tGtk.TextIter beg, st,en;", "\t bool has_wrapped_around;", "\tthis.buffer.el.get_iter_at_offset(out beg, this.last_search_end);", "\tif (!this.searchcontext.forward(beg, out st, out en, out has_wrapped_around)) {", "\t", "\t\tthis.last_search_end = 0; // not sure if this should happen", "\t} else {", "\t\tif (has_wrapped_around) {", "\t\t\treturn;", "\t\t}", "\t", "\t\tthis.last_search_end = en.get_offset();", "\t\tif (change_focus) {", "\t\t\tthis.view.el.grab_focus();", "\t\t}", "\t\tthis.buffer.el.place_cursor(st);", "\t\tthis.view.el.scroll_to_iter(st, 0.1f, true, 0.0f, 0.5f);", "\t}", " ", "}", "" ], "| void reset" : [ "() {", "\t this.file = null; ", " ", " this.node = null;", " this.prop = null;", "\tthis.searchcontext = null;", " ", "}", "" ], "| void scroll_to_line" : [ "(int line) {", "", "\tGLib.Timeout.add(500, () => {", " ", "\t\tvar buf = this.view.el.get_buffer();", "", "\t\tvar sbuf = (GtkSource.Buffer) buf;", "", "", "\t\tGtk.TextIter iter; ", "\t\tsbuf.get_iter_at_line(out iter, line);", "\t\tthis.view.el.scroll_to_iter(iter, 0.1f, true, 0.0f, 0.5f);", "\t\treturn false;", "\t}); ", "}", "" ], "| void show" : [ "(JsRender.JsRender file, JsRender.Node? node, JsRender.NodeProp? prop)", "{", " this.reset();", " if (this.file != null) {", " \tthis.file.navigation_tree_updated.disconnect(", " \t\t_this.navigation.show", " \t);", " }", " this.file = file; ", " this.file.navigation_tree_updated.connect(", "\t\t_this.navigation.show", "\t);", " if (file.xtype != \"PlainFile\") {", " \tthis.prop = prop;", " this.node = node;", "", " // 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();", " var ls = file.getLanguageServer();", " ls.queueDocumentSymbols(file);", " ////ls.documentSymbols.begin(file, (a,o) => {", " //\t_this.navigation.show(ls.documentSymbols.end(o)); ", " //});", " //documentSymbols", " ", " }", " ", "}" ], "| void updateErrorMarks" : [ "() {", "\t", " ", "", "\tvar buf = _this.buffer.el;", "\tGtk.TextIter start;", "\tGtk.TextIter end; ", "\tbuf.get_bounds (out start, out end);", "", "\t", "", " ", "\t//GLib.debug(\"highlight errors\");\t\t ", "", "\t // we should highlight other types of errors..", "", "\tif (_this.window.windowstate.state != WindowState.State.CODEONLY ", "\t\t&&", "\t\t_this.window.windowstate.state != WindowState.State.CODE", "\t\t) {", "\t\t//GLib.debug(\"windowstate != CODEONLY?\");", "\t\t", "\t\treturn;", "\t} ", "", "\t ", "\tif (_this.file == null) {", "\t\tGLib.debug(\"file is null?\");", "\t\treturn;", "", "\t}", "\tvar ar = this.file.getErrors();", "\tif (ar.size < 1) {", "\t\tbuf.remove_source_marks (start, end, \"ERR\");", "\t\tbuf.remove_source_marks (start, end, \"WARN\");", "\t\tbuf.remove_source_marks (start, end, \"DEPR\");", "\t\tbuf.remove_tag_by_name (\"ERR\", start, end);", "\t\tbuf.remove_tag_by_name (\"WARN\", start, end);", "\t\tbuf.remove_tag_by_name (\"DEPR\", start, end);", "\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;", "\tvar hoffset = 0;", "", "\tvar tlines = buf.get_line_count () +1;", "\t", "\tif (_this.prop != null) {", "\t\t// this still seems flaky...", "", "\t\ttlines = _this.prop.end_line;", "\t\toffset = _this.prop.start_line;", "\t\thoffset = _this.node.node_pad.length + 2; //shift it left by 2 ? ..", "\t\t", "\t\t ", "\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, \"ERR\");", "\tbuf.remove_source_marks (start, end, \"WARN\");", "\tbuf.remove_source_marks (start, end, \"DEPR\");", "\tbuf.remove_tag_by_name (\"ERR\", start, end);", "\tbuf.remove_tag_by_name (\"WARN\", start, end);", "\tbuf.remove_tag_by_name (\"DEPR\", start, end);", "\t", "\tforeach(var diag in ar) { ", "\t Gtk.TextIter iter;", "// print(\"get inter\\n\");", "\t var eline = (int)diag.range.start.line - offset;", "\t var eline_to = (int)diag.range.end.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 continue;", "\t }", "\t ", "\t buf.get_iter_at_line( out iter, eline);", "\t \tvar msg = \"Line: %d %s : %s\".printf(eline+1, diag.category, diag.message);", "\t buf.create_source_mark( msg, diag.category, iter);", "\t ", " \t var spos = (int)diag.range.start.character - hoffset;", " \t if (spos < 0) { spos =0 ; }", " \t if (spos > iter.get_chars_in_line()) {", " \t \tspos = iter.get_chars_in_line();", " \t}", "\t\tbuf.get_iter_at_line( out iter, eline_to);", "\t\tvar epos = (int)diag.range.end.character - hoffset;", " \t if (epos < 0) { epos =0 ; }", " \t if (epos > iter.get_chars_in_line()) {", " \t \tepos = iter.get_chars_in_line();", " \t}", " \t ", " \t ", " \t buf.get_iter_at_line_offset( out start, eline, spos); ", " \t ", " \t buf.get_iter_at_line_offset( out end, eline_to,epos); ", " \t \t", "\t buf.apply_tag_by_name(diag.category, start, end);", "\t ", "\t // GLib.debug(\"set line %d to %s\", eline, msg);", "\t //this.marks.set(eline, msg);", "\t}", "\tthis.last_error_counter = file.error_counter ;", "", "", "", " ", "", "}" ] } ], "name" : "Editor" }