src/Builder4/Editor.bjs
authorAlan Knowles <alan@roojs.com>
Sat, 16 Mar 2024 12:10:04 +0000 (20:10 +0800)
committerAlan Knowles <alan@roojs.com>
Sat, 16 Mar 2024 12:10:04 +0000 (20:10 +0800)
src/Builder4/Editor.vala

src/Builder4/Editor.bjs
src/Builder4/Editor.vala

index 6ca6dcd..24de7a2 100644 (file)
          "string name" : "editor-navigation",
          "xtype" : "ColumnView",
          "| 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<Lsp.DocumentSymbol> syms) {",
index 6bfe3fd..99b8efd 100644 (file)
@@ -1791,9 +1791,52 @@ public class Editor : Object
                        
                
                }
-               public int getRowAt () {
+               public int getRowAt (double x,  double  y, out string pos) {
                
-               }
+                       pos = "";
+                       var w = this.el.pick(x, y, Gtk.PickFlags.DEFAULT);
+                       //GLib.debug("got widget %s", w == null ? "nothing" : w.get_type().name());
+                       if (w == null) {
+                               return -1;
+                       }
+                       
+                       var row= w.get_ancestor(GLib.Type.from_name("GtkColumnViewRowWidget"));
+                       if (row == null) {
+                               return -1;
+                       }
+                       
+                       //GLib.debug("got colview %s", row == null ? "nothing" : row.get_type().name());
+                        
+                       var rn = 0;
+                       var cr = row;
+                        
+                       while (cr.get_prev_sibling() != null) {
+                               rn++;
+                               cr = cr.get_prev_sibling();
+                       }
+                       
+                       //GLib.debug("row number is %d", rn);
+                       //GLib.debug("click %d, %d", (int)x, (int)y);
+                       // above or belw
+                       Graphene.Rect  bounds;
+                       row.compute_bounds(this.el, out bounds);
+                       //GLib.debug("click x=%d, y=%d, w=%d, h=%d", 
+                       //      (int)bounds.get_x(), (int)bounds.get_y(),
+                       //      (int)bounds.get_width(), (int)bounds.get_height()
+                       //      );
+                       var ypos = y - bounds.get_y();
+                       //GLib.debug("rel ypos = %d", (int)ypos);       
+                       var rpos = 100.0 * (ypos / bounds.get_height());
+                       //GLib.debug("rel pos = %d %%", (int)rpos);
+                       pos = "over";
+                       
+                       if (rpos > 80) {
+                               pos = "below";
+                       } else if (rpos < 20) {
+                               pos = "above";
+                       } 
+                       return rn;
+                }
        }
        public class Xcls_ColumnViewColumn29 : Object
        {