X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=src%2FBuilder4%2FEditor.bjs;h=ebadf15db3b55b42bb25de359ff531940f1cc4a4;hb=36c7c3bd492414b11eca1937f5c41b0d1274cfe5;hp=af1b6bc81a0c9b9d7de24afe95f2913d4816b0b8;hpb=5d1cebf6dde6634da0fc2f17827259a6eeec0799;p=roobuilder diff --git a/src/Builder4/Editor.bjs b/src/Builder4/Editor.bjs index af1b6bc81..ebadf15db 100644 --- a/src/Builder4/Editor.bjs +++ b/src/Builder4/Editor.bjs @@ -935,422 +935,482 @@ { "$ xns" : "Gtk", "* prop" : "end_child", - "bool visible" : false, - "id" : "navigationwindow", + "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL", + "bool hexpand" : true, + "bool vexpand" : true, + "int spacing" : 0, "items" : [ { - "# int last_selected_line" : "-1", - "$ Gtk.Widget? selected_row" : "null", "$ xns" : "Gtk", - "* prop" : "child", - "id" : "navigation", + "Gtk.Orientation orientation" : "Gtk.Orientation.HORIZONTAL", + "int spacing" : 0, + "xtype" : "Box" + }, + { + "$ xns" : "Gtk", + "bool hexpand" : true, + "bool vexpand" : true, + "bool visible" : false, + "id" : "navigationwindow", "items" : [ { + "# int last_selected_line" : "-1", + "$ Gtk.Widget? selected_row" : "null", "$ xns" : "Gtk", - "bool expand" : true, + "* prop" : "child", + "id" : "navigation", "items" : [ { "$ xns" : "Gtk", - "* prop" : "factory", - "listeners" : { - "bind" : [ - "(listitem) => {", - "\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", - " \tsym.bind_property(\"symbol_icon\",", - " img, \"icon_name\",", - " GLib.BindingFlags.SYNC_CREATE);", - " \t", - " \thbox.add_css_class(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" : [ + "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" : "navigationsort", + "id" : "navigationselmodel", "items" : [ { - "$ Gtk.TreeListModelCreateModelFunc create_func" : [ - "(item) => {", - " ", - "\treturn ((Lsp.DocumentSymbol)item).children;", - "}", - "" - ], "$ xns" : "Gtk", "* prop" : "model", - "bool autoexpand" : true, - "bool passthrough" : false, + "id" : "navigationsort", "items" : [ { - "$ GLib.Type item_type" : "typeof(Lsp.DocumentSymbol)", - "$ xns" : "GLib", - "* prop" : "root", - "id" : "navliststore", - "xtype" : "ListStore", - "| Lsp.DocumentSymbol? symbolAtLine" : [ - "(uint line, uint chr) {", + "$ Gtk.TreeListModelCreateModelFunc create_func" : [ + "(item) => {", " ", - "\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;", - "}" - ] - } - ], - "xtype" : "TreeListModel" - }, - { - "$ xns" : "Gtk", - "* prop" : "sorter", - "items" : [ + "\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" : [ { - "$ GLib.Type this_type" : "typeof(Lsp.DocumentSymbol)", "$ xns" : "Gtk", - "* prop" : "expression", - "string property_name" : "sort_key", - "xtype" : "PropertyExpression" + "* prop" : "sorter", + "items" : [ + { + "$ GLib.Type this_type" : "typeof(Lsp.DocumentSymbol)", + "$ xns" : "Gtk", + "* prop" : "expression", + "string property_name" : "sort_key", + "xtype" : "PropertyExpression" + } + ], + "xtype" : "StringSorter" } ], - "xtype" : "StringSorter" + "xtype" : "TreeListRowSorter" } ], - "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" : "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;", - "}" - ] + "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" } ], - "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_this.navigationwindow.el.show();", + "\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}", + "\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}", + "", + "", + "}" + ] } ], - "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_this.navigationwindow.el.show();", - "\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}", - "\tLsp.DocumentSymbol.copyList(ls, _this.navliststore.el);", - "\t//_this.navliststore.el.append(sym);", - "\tthis.last_selected_line = -1;", - "\tGLib.Idle.add(() => {", - "", - "\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" : "ScrolledWindow" + "xtype" : "Box" } ], "xtype" : "Paned"