{ "build_module" : "builder", "items" : [ { "# JsRender.JsRender? file" : "null", "# JsRender.Node node" : "null", "# JsRender.NodeProp? prop" : "null", "# Xcls_MainWindow window" : "null", "# bool dirty" : false, "# bool pos" : false, "# int pos_root_x" : "", "# int pos_root_y" : "", "# string activeEditor" : "\"\"", "$ homogeneous" : false, "$ xns" : "Gtk", "* pack" : "add", "@ void save" : "()", "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL", "Gtk.SourceSearchContext searchcontext" : "null", "bool hexpand" : true, "bool vexpand" : true, "int last_search_end" : 0, "items" : [ { "$ homogeneous" : false, "$ xns" : "Gtk", "* pack" : "pack_start,false,true", "Gtk.Orientation orientation" : "Gtk.Orientation.HORIZONTAL", "items" : [ { "$ xns" : "Gtk", "* pack" : "add", "bool always_show_image" : true, "id" : "save_button", "items" : [ { "$ xns" : "Gtk", "* prop" : "image", "string icon_name" : "document-save", "xtype" : "Image" } ], "label" : "Save", "listeners" : { "clicked" : [ " () => { ", " _this.saveContents();", "}", " " ] }, "xtype" : "Button" }, { "$ xns" : "Gtk", "* pack" : "add", "bool hexpand" : true, "xtype" : "Label" }, { "$ xns" : "Gtk", "* ctor" : "new Gtk.HScale.with_range (6, 30, 1)", "* init" : [ "{", "\tthis.el.set_range(6,30);", "\tthis.el.set_value(8);", "}", "" ], "* pack" : "add", "bool draw_value" : true, "bool has_origin" : true, "bool sensitive" : true, "int digits" : 0, "int width_request" : 200, "listeners" : { "change_value" : [ "(st, val ) => {", "\t ", "\t var description = Pango.FontDescription.from_string(\"monospace\");", "\t print(\"resize to %d\", (int)val*1000);", " description.set_size((int)val*1000);", " _this.view.el.override_font(description);", " return false;", "}" ] }, "xtype" : "HScale" }, { "$ xns" : "Gtk", "* pack" : "add", "bool always_show_image" : true, "id" : "close_btn", "items" : [ { "$ xns" : "Gtk", "* prop" : "image", "string icon_name" : "window-close", "xtype" : "Image" } ], "listeners" : { "clicked" : [ " () => { ", " _this.saveContents();", " _this.window.windowstate.switchState(WindowState.State.PREVIEW);", "}", " " ] }, "xtype" : "Button" } ], "xtype" : "Box" }, { "$ xns" : "Gtk", "* init" : [ "this.el.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);", "" ], "bool vexpand" : true, "id" : "RightEditor", "items" : [ { "$ Gtk.SourceDrawSpacesFlags draw_spaces" : "Gtk.SourceDrawSpacesFlags.LEADING + Gtk.SourceDrawSpacesFlags.TRAILING + Gtk.SourceDrawSpacesFlags.TAB + Gtk.SourceDrawSpacesFlags.SPACE", "$ gboolean auto_indent" : true, "$ show_line_numbers" : true, "$ xns" : "Gtk", "* init" : [ " ", "", "\t\tvar description = Pango.FontDescription.from_string(\"monospace\");", "\t\tdescription.set_size(8000);", "", "\t\t this.el.override_font(description);", "", "\ttry { ", "\t\tthis.el.completion.add_provider(new Palete.CompletionProvider(_this));", " } catch (GLib.Error e) {}", " ", "\tthis.el.completion.unblock_interactive();", "\tthis.el.completion.select_on_show\t\t\t= true; // select", "\tthis.el.completion.show_headers\t\t\t= false;", "\tthis.el.completion.remember_info_visibility\t\t= true;", " ", " ", " var attrs = new Gtk.SourceMarkAttributes();", " var pink = Gdk.RGBA();", " pink.parse ( \"pink\");", " attrs.set_background ( pink);", " attrs.set_icon_name ( \"process-stop\"); ", " attrs.query_tooltip_text.connect(( mark) => {", " //print(\"tooltip query? %s\\n\", mark.name);", " return mark.name;", " });", " ", " this.el.set_mark_attributes (\"ERR\", attrs, 1);", " ", " var wattrs = new Gtk.SourceMarkAttributes();", " var blue = Gdk.RGBA();", " blue.parse ( \"#ABF4EB\");", " wattrs.set_background ( blue);", " wattrs.set_icon_name ( \"process-stop\"); ", " wattrs.query_tooltip_text.connect(( mark) => {", " //print(\"tooltip query? %s\\n\", mark.name);", " return mark.name;", " });", " ", " this.el.set_mark_attributes (\"WARN\", wattrs, 1);", " ", " ", " ", " var dattrs = new Gtk.SourceMarkAttributes();", " var purple = Gdk.RGBA();", " purple.parse ( \"#EEA9FF\");", " dattrs.set_background ( purple);", " dattrs.set_icon_name ( \"process-stop\"); ", " dattrs.query_tooltip_text.connect(( mark) => {", " //print(\"tooltip query? %s\\n\", mark.name);", " return mark.name;", " });", " ", " this.el.set_mark_attributes (\"DEPR\", dattrs, 1);", " ", " " ], "* pack" : "add", "bool insert_spaces_instead_of_tabs" : true, "gboolean highlight_current_line" : true, "gboolean show_line_marks" : true, "id" : "view", "indent_width" : 4, "items" : [ { "$ xns" : "Gtk", "* pack" : "set_buffer", "bool check_queued" : false, "bool check_running" : false, "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 ;", "}", "", " ", "" ] }, "xtype" : "SourceBuffer", "| 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???", " 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;", " }", " ", " if (_this.file.xtype == \"PlainFile\") {", " ", " // assume it's gtk...", " this.check_running = true;", " ", " if (!BuilderApplication.valasource.checkPlainFileSpawn(", "\t _this.file,", "\t str", "\t )) {", " this.check_running = false;", " }", "\t", " return true;", " ", " }", " if (_this.file == null) {", " return true;", " }", " var p = _this.file.project.palete;", " ", "", " ", " this.check_running = true;", " ", " ", " if (_this.file.language == \"js\") {", " this.check_running = false;", " print(\"calling validate javascript\\n\"); ", " Gee.HashMap errors;", " p.javascriptHasErrors(", " \t\t_this.window.windowstate,", " str, ", " _this.prop,", " _this.file, // no reference not node?", " out errors", " );", " return this.highlightErrors(errors); ", " ", " }", " ", " ", " print(\"calling validate vala\\n\"); ", " // clear the buttons.", " ", " ", " if (! BuilderApplication.valasource.checkFileWithNodePropChange(", " _this.file,", " _this.node,", " _this.prop, ", " str", " )) {", " this.check_running = false;", " } ", " ", " ", " ", " //print(\"done mark line\\n\");", " ", " return true; // at present allow saving - even if it's invalid..", "}", "" ], "| 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;", " }" ], "| bool highlightErrorsJson" : [ "(string type, Json.Object obj) {", " Gtk.TextIter start;", " Gtk.TextIter end; ", " this.el.get_bounds (out start, out end);", " ", " this.el.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 true;", " }", " ", " if (_this.window.windowstate.state != WindowState.State.CODEONLY ", " ", " ) {", " return true;", " } ", " ", " ", " var err = obj.get_object_member(type);", " ", " ", " if (_this.file == null) {", " return true;", " ", " }", " var valafn = _this.file.path;", " ", " if (_this.file.xtype != \"PlainFile\") {", "", "", " ", " ", " valafn = \"\";", " try { ", " var regex = new Regex(\"\\\\.bjs$\");", " // should not happen", " ", " ", " valafn = regex.replace(_this.file.path,_this.file.path.length , 0 , \".vala\");", " } catch (GLib.RegexError e) {", " return true;", " } ", "", "", "", " }", " if (!err.has_member(valafn)) {", " print(\"File path has no errors\\n\");", " return true;", " }", "", " var lines = err.get_object_member(valafn);", " ", " var offset = 1;", " if (obj.has_member(\"line_offset\")) {", " offset = (int)obj.get_int_member(\"line_offset\") + 1;", " }", " ", "", " ", " ", " var tlines = this.el.get_line_count () +1;", " ", " lines.foreach_member((obj, line, node) => {", " ", " Gtk.TextIter iter;", " // print(\"get inter\\n\");", " var eline = int.parse(line) - offset;", " print(\"GOT ERROR on line %s -- converted to %d\\n\", line,eline);", " ", " ", " if (eline > tlines || eline < 0) {", " return;", " }", " this.el.get_iter_at_line( out iter, eline);", " //print(\"mark line\\n\");", " var msg = \"Line: %d\".printf(eline+1);", " var ar = lines.get_array_member(line);", " for (var i = 0 ; i < ar.get_length(); i++) {", "\t\t msg += (msg.length > 0) ? \"\\n\" : \"\";", "\t\t msg += ar.get_string_element(i);", "\t }", " ", " ", " this.el.create_source_mark(msg, type, iter);", " } );", " return 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;", "}", " " ] } ], "listeners" : { "key_release_event" : [ " (event) => {", " ", " if (event.keyval == Gdk.Key.s && (event.state & Gdk.ModifierType.CONTROL_MASK ) > 0 ) {", " GLib.debug(\"SAVE: ctrl-S pressed\");", " _this.saveContents();", " return false;", " }", " ", " if (event.keyval == Gdk.Key.g && (event.state & Gdk.ModifierType.CONTROL_MASK ) > 0 ) {", "\t GLib.debug(\"SAVE: ctrl-g pressed\");", "\t\t_this.forwardSearch(true);", "\t return true;", "\t}", " ", " // print(event.key.keyval)", " ", " return false;", "", "} ", "", " " ] }, "uint tab_width" : 4, "xtype" : "SourceView", "| void load" : [ " (string str) {", "", "// show the help page for the active node..", " //this.get('/Help').show();", "", "", " // this.get('/BottomPane').el.set_current_page(0);", " var buf = (Gtk.SourceBuffer)this.el.get_buffer();", " buf.set_text(str, str.length);", " buf.set_undo_manager(null);", " ", " var lm = Gtk.SourceLanguageManager.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);", " ", " ", " ((Gtk.SourceBuffer)(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;", "}" ] } ], "xtype" : "ScrolledWindow" }, { "$ xns" : "Gtk", "Gtk.Orientation orientation" : "Gtk.Orientation.HORIZONTAL", "bool homogeneous" : false, "bool vexpand" : false, "int spacing" : 0, "items" : [ { "$ xns" : "Gtk", "* init" : [ "var description = Pango.FontDescription.from_string(\"monospace\");", "\tdescription.set_size(8000);", "\t this.el.override_font(description);", "", "" ], "bool hexpand" : true, "id" : "search_entry", "int width_request" : 300, "listeners" : { "changed" : [ "() => {", "\t/*", "\tif (this.el.text == \"\") {", "\t\t_this.search_results.el.hide();", "\t\treturn;", "\t}", "\tvar res = 0;", "\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\tres = _this.windowstate.code_editor_tab.search(this.el.text);", "\t\t\t", "\t\t\tbreak;", "\t\tcase WindowState.State.PREVIEW:", "\t\t\tif (_this.windowstate.file.xtype == \"Gtk\") {", "\t\t\t\t res = _this.windowstate.window_gladeview.search(this.el.text);", "\t\t\t} else { ", "\t\t\t\t res = _this.windowstate.window_rooview.search(this.el.text);\t\t\t", "\t\t\t}", "\t\t", "\t\t", "\t\t\tbreak;", "\t}", "\t_this.search_results.el.show();", "\tif (res > 0) {", "\t\t_this.search_results.el.label = \"%d Matches\".printf(res);", "\t} else {", "\t\t_this.search_results.el.label = \"No Matches\";", "\t}", "\t\t", "\t*/", "\t", "}", "" ], "key_press_event" : [ "(event) => {", " if (event.keyval == Gdk.Key.g && (event.state & Gdk.ModifierType.CONTROL_MASK ) > 0 ) {", "\t GLib.debug(\"SAVE: ctrl-g pressed\");", "\t\t_this.forwardSearch(true);", "\t return true;", "\t}", " ", " ", " \tif (event.keyval == Gdk.Key.Return && this.el.text.length > 0) {", "\t\tvar res = _this.search(this.el.text);", "\t\tif (res > 0) {", "\t\t\t_this.search_results.el.label = \"%d Matches\".printf(res);", "\t\t} else {", "\t\t\t_this.search_results.el.label = \"No Matches\";", "\t\t}", "\t\t", "\t return true;", "", "\t} ", " // print(event.key.keyval)", " ", " return false;", "", "} " ] }, "string placeholder_text" : "Press enter to search", "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", "* pack" : "add", "items" : [ { "$ xns" : "Gtk", "* pack" : "add", "Xcls_ValaCompileErrors popup" : "", "bool always_show_image" : true, "id" : "search_results", "items" : [ { "$ xns" : "Gtk", "* pack" : "set_image", "bool sensitive" : false, "utf8 icon_name" : "system-search", "xtype" : "Image" } ], "listeners" : { "button_press_event" : [ "() => {", "/*", " if (this.popup == null) {", " this.popup = new Xcls_ValaCompileErrors();", " this.popup.window = _this;", " }", " ", " ", " this.popup.show(this.notices, this.el);", " */", " return true;", "}" ] }, "string label" : "Matches", "xtype" : "ImageMenuItem" } ], "xtype" : "MenuBar" }, { "$ xns" : "Gtk", "bool always_show_image" : true, "items" : [ { "$ xns" : "Gtk", "* prop" : "image", "string icon_name" : "go-down", "xtype" : "Image" } ], "listeners" : { "button_press_event" : [ "(event) => {", "", "\t_this.forwardSearch(true);", "\t", "\treturn true;", "}", "" ] }, "string label" : "Next", "xtype" : "Button" }, { "$ xns" : "Gtk", "bool always_show_image" : true, "items" : [ { "$ xns" : "Gtk", "* prop" : "image", "string icon_name" : "go-up", "xtype" : "Image" } ], "listeners" : { "button_press_event" : [ "(event) => {", "", "\t_this.backSearch(true);", "\t", "\treturn true;", "}", "" ] }, "string label" : "Previous", "xtype" : "Button" }, { "$ xns" : "Gtk", "bool always_show_image" : true, "items" : [ { "$ xns" : "Gtk", "* prop" : "image", "string icon_name" : "emblem-system", "xtype" : "Image" }, { "$ xns" : "Gtk", "* prop" : "popup", "id" : "search_settings", "items" : [ { "$ xns" : "Gtk", "* init" : [ "{", "\tthis.el.show();", "}", "" ], "id" : "case_sensitive", "string label" : "Case Sensitive", "xtype" : "CheckMenuItem" }, { "$ xns" : "Gtk", "* init" : [ "{", "\tthis.el.show();", "}", "" ], "id" : "regex", "string label" : "Regex", "xtype" : "CheckMenuItem" }, { "$ xns" : "Gtk", "* init" : [ "{", "\tthis.el.show();", "}", "" ], "id" : "multiline", "string label" : "Multi-line (add \\n)", "xtype" : "CheckMenuItem" } ], "xtype" : "Menu" } ], "string label" : "Settings", "xtype" : "MenuButton" } ], "xtype" : "Box" } ], "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 Gtk.SourceSearchSettings();", "\ts.case_sensitive = _this.case_sensitive.el.active;", "\ts.regex_enabled = _this.regex.el.active;\t", "\ts.wrap_around = false;", "\t", "\tthis.searchcontext = new Gtk.SourceSearchContext(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);", "\tthis.searchcontext.forward(beg, out st, out en);", "\tthis.last_search_end = 0;", "\t", "\treturn this.searchcontext.get_occurrences_count();", "", " ", " ", "", "}", "" ], "| 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.backward2(beg, out st, out en, out has_wrapped_around)) {", "\t", "\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} ", "\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.forward2(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 = (Gtk.SourceBuffer) 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();", " this.file = file; ", " ", " if (file.xtype != \"PlainFile\") {", " \tthis.prop = prop;", " this.node = node;", "", " // find the text for the node..", " this.view.load( prop.val );", " this.close_btn.el.show(); ", " ", " } else {", " this.view.load( file.toSource() );", " this.close_btn.el.hide();", " }", " ", "}" ] } ], "modOrder" : "", "name" : "Editor", "parent" : "", "path" : "/home/alan/gitlive/roobuilder/src/Builder4/Editor.bjs", "permname" : "", "title" : "" }