// my vars (def)
public bool loading;
public bool allow_node_scroll;
+ public string propSelected;
// ctor
public Xcls_sourceview(Xcls_WindowRooView _owner )
// my vars (dec)
this.loading = true;
this.allow_node_scroll = true;
+ this.propSelected = "";
// set gobject values
this.el.editable = false;
print("prop : %s", prop == null ? "???" : prop);
+
+
+
+
var ltree = _this.main_window.windowstate.left_tree;
var tp = ltree.model.treePathFromNode(node);
print("got tree path %s\n", tp);
//print("changing cursor on tree..\n");
- ltree.view.el.set_cursor(new Gtk.TreePath.from_string(tp), null, false);
-
+
// let's try allowing editing on the methods.
// a little klunky at present..
var kv = prop.split(":");
if (kv[0] == "p") {
- var k = prop.get_key(kv[1]);
+ //var k = prop.get_key(kv[1]);
+ // fixme -- need to determine if it's an editable property...
this.propSelected = prop;
- } elseif (kv[0]) = "l") {
+ } else if (kv[0] == "l") {
this.propSelected = prop;
}
}
-
+ ltree.view.setCursor(tp, "editor");
+ // ltree.view.el.set_cursor(new Gtk.TreePath.from_string(tp), null, false);
+ this.nodeSelected(node,false);
// scrolling is disabled... as node selection calls scroll 10ms after it changes.
GLib.Timeout.add_full(GLib.Priority.DEFAULT,100 , () => {
// highlight the node..
}
- public void nodeSelected (JsRender.Node? sel) {
+ public void nodeSelected (JsRender.Node? sel, bool scroll ) {
// clear all the marks..
- Gtk.TextIter start;
+ Gtk.TextIter start;
Gtk.TextIter end;
sbuf.get_bounds (out start, out end);
//if (cur_line > sel.line_start && cur_line < sel.line_end) {
//} else {
- if (this.allow_node_scroll) {
+ if (scroll) {
this.el.scroll_to_iter(iter, 0.1f, true, 0.0f, 0.5f);
}
+ var start_line = sel.line_start;
+ var end_line = sel.line_end;
+
+
+ this.el.editable = false;
+ // now if we have selected a property...
+ if (this.propSelected.length> 0 ) {
+
+ int nstart, nend;
+ if (sel.getPropertyRange(this.propSelected, out nstart, out nend) && nend > nstart) {
+ start_line = nstart;
+ end_line = nend;
+ this.el.editable = true;
+ }
+ print("propSelected = %s range %d -> %d\n", this.propSelected, nstart, nend);
+
+
+ }
+
+ // check selection - if it's out of 'bounds'
+ if (this.el.editable && sbuf.get_has_selection()) {
+ Gtk.TextIter sel_start_iter, sel_end_iter;
+ sbuf.get_selection_bounds(out sel_start_iter, out sel_end_iter);
+
+ if (sel_start_iter.get_line() < start_line || sel_end_iter.get_line() > end_line ||
+ sel_start_iter.get_line() > end_line || sel_end_iter.get_line() < start_line ) {
+ // save?
+ this.el.editable = false;
+ }
+
+ }
+
+
for (var i = 0; i < buf.get_line_count();i++) {
- if (i < (sel.line_start -1) || i > (sel.line_end -1)) {
+ if (i < (start_line -1) || i > (end_line -1)) {
sbuf.get_iter_at_line(out iter, i);
sbuf.create_source_mark(null, "grey", iter);
}
public void loadFile ( ) {
this.loading = true;
+
+
+ // get the cursor and scroll position....
+ var buf = this.el.get_buffer();
+
+ Gtk.TextIter cpos;
+ buf.get_iter_at_offset(out cpos, buf.cursor_position);
+
+
+
+
var buf = this.el.get_buffer();
buf.set_text("",0);
var sbuf = (Gtk.SourceBuffer) buf;