X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=src%2FBuilder4%2FEditor.bjs;h=2127fc99578eec688889982f42a8d1b878213503;hb=02ca85af257a567b9543717a1f9348674cf49432;hp=0db9e57919d6189f0fc17ab38de003dcc46841f0;hpb=193e8a594f01bf44ecc2c541a63a6d0db87738e3;p=roobuilder diff --git a/src/Builder4/Editor.bjs b/src/Builder4/Editor.bjs index 0db9e5791..2127fc995 100644 --- a/src/Builder4/Editor.bjs +++ b/src/Builder4/Editor.bjs @@ -972,7 +972,12 @@ "\tvar lr = (Gtk.TreeListRow)((Gtk.ListItem)listitem).get_item();", "\tvar sym = (Lsp.DocumentSymbol) lr.get_item();", "\t", - "\tGLib.debug(\"got %d children for %s\" , (int)sym.children.get_n_items(), sym.name);", + "\tsym.set_data(\"widget\", expand.get_parent());", + "\texpand.get_parent().get_parent().set_data(\"symbol\", sym);", + "\t", + "\tGLib.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);", @@ -1133,33 +1138,7 @@ ] } ], - "xtype" : "NoSelection", - "| Lsp.DocumentSymbol? getSymbollAtOLD" : [ - "(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 getRowFromSymbolx" : [ - "(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", @@ -1167,13 +1146,15 @@ "pressed" : [ "(n_press, x, y) => {", "\tstring pos;", - " \tvar row = _this.navigation.getRowAt(x,y, out pos );", - " if (row < 0) {", + " \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 = _this.navigationsort.getSymbolAt(row);", + " var sym = row.get_data(\"symbol\");", " if (sym == null) {", " \treturn;", "\t}", @@ -1191,6 +1172,12 @@ " */", " 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", "}" ] @@ -1200,55 +1187,46 @@ ], "string name" : "editor-navigation", "xtype" : "ColumnView", - "| Gtk.Widget? getWidgetAtRow" : [ - "(uint row) {", - "/*", - " \t", - "from \thttps://discourse.gnome.org/t/gtk4-finding-a-row-data-on-gtkcolumnview/8465", - " \tvar colview = gesture.widget;", - " \tvar line_no = check_list_widget(colview, x,y);", - " if (line_no > -1) {", - " \t\tvar item = colview.model.get_item(line_no);", - " \t\t ", - " \t}", - " \t*/", - "\t\t//GLib.debug(\"Get Widget At Row %d\", (int)row);", - " var child = this.el.get_first_child(); ", - " \tvar line_no = -1; ", - " \tvar reading_header = true;", - "\t ", - " \twhile (child != null) {", - "\t\t\t//GLib.debug(\"Got %s\", child.get_type().name());", - " \t ", - " \t if (reading_header) {", - "\t\t\t\t", - "", - "\t\t\t\tif (child.get_type().name() != \"GtkColumnListView\") {", - "\t\t\t\t ", - "\t\t\t\t\tchild = child.get_next_sibling();", - "\t\t\t\t\tcontinue;", - "\t\t\t\t}", - "\t\t\t\t// should be columnlistview", - "\t\t\t\tchild = child.get_first_child(); ", - "\t\t\t ", - "\t\t\t ", - "\t\t\t\t", - "\t\t\t\treading_header = false;", - "\t\t\t\tcontinue;", - "\t\t }", - "\t\t ", - "\t\t ", - " \t ", - "\t\t line_no++;", - "\t\t\tif (line_no == row) {", - "\t\t\t\t//GLib.debug(\"Returning widget %s\", child.get_type().name());", - "\t\t\t return (Gtk.Widget)child;", - "\t\t }", - "\t child = child.get_next_sibling(); ", - " \t}", - "\t\tGLib.debug(\"Failed to find row (max = %d)\", line_no);", - " return null;", + "| 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" : [ @@ -1335,7 +1313,7 @@ "\tthis.selected_row = null;", "\tif (new_row > -1) {", "\t\tthis.el.scroll_to(new_row,null,Gtk.ListScrollFlags.NONE, null);", - "\t\tvar row = this.getWidgetAtRow(new_row);", + "\t\tvar row = sym.get_data(\"widget\");", "\t\tif (row != null) {", "\t\t\tGLib.debug(\" Add selected row\");", " \t\t\t",