X-Git-Url: http://git.roojs.org/?p=app.Builder.js;a=blobdiff_plain;f=src%2FBuilder4%2FEditor.vala;h=3b4d09b35fc314225ef90606782422ebe4a4fda0;hp=057db6ee388e9c0b99367e7ad1a94a0af66db354;hb=fc49f865ff0b406b1fb2313e84cf3edb8536727b;hpb=cd57c93f7084b1d52d83a630688f6ca7d4d77ab0 diff --git a/src/Builder4/Editor.vala b/src/Builder4/Editor.vala index 057db6ee3..3b4d09b35 100644 --- a/src/Builder4/Editor.vala +++ b/src/Builder4/Editor.vala @@ -24,8 +24,9 @@ public class Editor : Object public int pos_root_x; public int pos_root_y; public string ptype; - public string fname; + public int last_search_end; public string key; + public Gtk.SourceSearchContext searchcontext; public JsRender.JsRender file; public bool pos; public bool dirty; @@ -42,8 +43,9 @@ public class Editor : Object this.window = null; this.activeEditor = ""; this.ptype = ""; - this.fname = ""; + this.last_search_end = 0; this.key = ""; + this.searchcontext = null; this.file = null; this.pos = false; this.dirty = false; @@ -51,6 +53,7 @@ public class Editor : Object // set gobject values this.el.homogeneous = false; + this.el.hexpand = true; var child_0 = new Xcls_Box2( _this ); child_0.ref(); this.el.pack_start ( child_0.el , false,true ); @@ -68,8 +71,7 @@ public class Editor : Object } - - + var str = _this.buffer.toString(); @@ -99,6 +101,40 @@ public class Editor : Object return true; + } + public void scroll_to_line (int line) { + + GLib.Timeout.add(500, () => { + + var buf = this.view.el.get_buffer(); + + var sbuf = (Gtk.SourceBuffer) buf; + + + Gtk.TextIter iter; + sbuf.get_iter_at_line(out iter, line); + this.view.el.scroll_to_iter(iter, 0.1f, true, 0.0f, 0.5f); + return false; + }); + } + public int search (string txt) { + + var s = new Gtk.SourceSearchSettings(); + + this.searchcontext = new Gtk.SourceSearchContext(this.buffer.el,s); + this.searchcontext .set_highlight(true); + s.set_search_text(txt); + Gtk.TextIter beg, st,en; + + this.buffer.el.get_start_iter(out beg); + this.searchcontext.forward(beg, out st, out en); + this.last_search_end = 0; + + return this.searchcontext.get_occurrences_count(); + + + + } public void show (JsRender.JsRender file, JsRender.Node? node, string ptype, string key) { @@ -106,7 +142,7 @@ public class Editor : Object this.ptype = ""; this.key = ""; this.node = null; - + this.searchcontext = null; if (file.xtype != "PlainFile") { @@ -122,14 +158,37 @@ public class Editor : Object val = node.props.get(key); } this.view.load(val); - + this.key_edit.el.show(); + this.key_edit.el.text = key; } else { this.view.load( file.toSource() ); - + this.key_edit.el.hide(); } - this.key_edit.el.text = key; - + + + } + public void forwardSearch (bool change_focus) { + + if (this.searchcontext == null) { + return; + } + + Gtk.TextIter beg, st,en; + + this.buffer.el.get_iter_at_offset(out beg, this.last_search_end); + if (!this.searchcontext.forward(beg, out st, out en)) { + + this.last_search_end = 0; + } else { + this.last_search_end = en.get_offset(); + if (change_focus) { + this.view.el.grab_focus(); + } + this.buffer.el.place_cursor(st); + this.view.el.scroll_to_iter(st, 0.1f, true, 0.0f, 0.5f); + } + } public class Xcls_Box2 : Object { @@ -264,6 +323,8 @@ public class Editor : Object this.el.show_line_marks = true; this.el.insert_spaces_instead_of_tabs = true; this.el.show_line_numbers = true; + this.el.draw_spaces = Gtk.SourceDrawSpacesFlags.LEADING + Gtk.SourceDrawSpacesFlags.TRAILING + Gtk.SourceDrawSpacesFlags.TAB + Gtk.SourceDrawSpacesFlags.SPACE; + this.el.tab_width = 4; this.el.highlight_current_line = true; var child_0 = new Xcls_buffer( _this ); child_0.ref(); @@ -272,10 +333,19 @@ public class Editor : Object // init method var description = Pango.FontDescription.from_string("monospace"); - description.set_size(8000); - this.el.override_font(description); + description.set_size(8000); + this.el.override_font(description); + try { + this.el.completion.add_provider(new Palete.CompletionProvider(_this)); + } catch (GLib.Error e) {} + + this.el.completion.unblock_interactive(); + this.el.completion.select_on_show = true; // select + this.el.completion.show_headers = false; + this.el.completion.remember_info_visibility = true; + var attrs = new Gtk.SourceMarkAttributes(); var pink = Gdk.RGBA(); @@ -338,7 +408,7 @@ public class Editor : Object // this.get('/BottomPane').el.set_current_page(0); - var buf = (Gtk.SourceBuffer)this.el.get_buffer(); + var buf = (Gtk.SourceBuffer)this.el.get_buffer(); buf.set_text(str, str.length); buf.set_undo_manager(null); @@ -347,11 +417,21 @@ public class Editor : Object if (_this.file != null) { lang = _this.file.language; } - //?? is javascript going to work as js? - - ((Gtk.SourceBuffer)(this.el.get_buffer())) .set_language(lm.get_language(lang)); - + 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) { + print("sourcelanguage = %s\n", lg.name); + if (lg.name == "Vala") { + this.el.insert_spaces_instead_of_tabs = false; + } + } _this.dirty = false; this.el.grab_focus(); _this.save_button.el.sensitive = false; @@ -470,11 +550,14 @@ public class Editor : Object // assume it's gtk... this.check_running = true; - - _this.window.windowstate.valasource.checkPlainFileSpawn( + + if (!_this.window.windowstate.valasource.checkPlainFileSpawn( _this.file, str - ); + )) { + this.check_running = false; + } + return true; } @@ -491,13 +574,17 @@ public class Editor : Object if (_this.file.language == "js") { this.check_running = false; print("calling validate javascript\n"); - return this.highlightErrors(p.validateJavascript( + Gee.HashMap errors; + p.javascriptHasErrors( + _this.window.windowstate, str, _this.key, _this.ptype, _this.file, - _this.node - )); + + out errors + ); + return this.highlightErrors(errors); } @@ -506,16 +593,15 @@ public class Editor : Object // clear the buttons. - p.validateVala( - _this.window.windowstate, - str, - _this.key, - _this.ptype, + if (! _this.window.windowstate.valasource.checkFileWithNodePropChange( _this.file, - _this.node - - - ); + _this.node, + _this.key, + _this.ptype, + str + )) { + this.check_running = false; + } @@ -546,8 +632,15 @@ public class Editor : Object var err = obj.get_object_member(type); - var valafn = _this.fname; - if (_this.file.xtype == "PlainFile") { + + + if (_this.file == null) { + return true; + + } + var valafn = _this.file.path; + + if (_this.file.xtype != "PlainFile") { @@ -555,7 +648,8 @@ public class Editor : Object 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) {