Fix #8099 - convert left tree to use get_data<> methods
[roobuilder] / src / Builder4 / WindowLeftTree.bjs
index 9bf6162..5c883b8 100644 (file)
            "\t    return ;",
            "    }",
            "    string pos;",
-           "    var row = _this.view.getRowAt(x,y, out pos );",
-           "    if (row < 0) {",
+           "    var row_widget = _this.view.getRowWidgetAt(x,y, out pos );",
+           "    if (row_widget == null) {",
            "\t    GLib.debug(\"no row selected items\");",
            "\t    return;",
            "    }",
            "    ",
-           "    var node =   _this.selmodel.getNodeAt(row);",
+           "    var node =   row_widget.get_data<JsRender.Node>(\"node\");",
            "    if (node == null) {",
-           "    \tGLib.warning(\"No node found at row %d\", row);",
+           "    \tGLib.warning(\"No node found bound to widget\");",
            "    \treturn;",
            "\t}",
            "",
            "\t    return ;",
            "    }",
            "    string pos;",
-           "    var row = _this.view.getRowAt(x,y, out pos );",
-           "    if (row < 0) {",
+           "    var row_widget = _this.view.getRowWidgetAt(x,y, out pos );",
+           "    if (row_widget == null) {",
            "\t    GLib.debug(\"no row selected items\");",
            "\t    return;",
            "    }",
            "    ",
-           "    var node =   _this.selmodel.getNodeAt(row);",
+           "    var node =  row_widget.get_data<JsRender.Node>(\"node\");",
            "    if (node == null) {",
-           "    \tGLib.warning(\"No node found at row %d\", row);",
+           "    \tGLib.warning(\"No node found from widget\");",
            "    \treturn;",
            "\t}",
            "\t",
            "    var xname = data.fqn();",
            "    GLib.debug (\"XNAME  IS %s\", xname);",
            "",
-           " \tvar widget = _this.view.getWidgetAtRow(_this.selmodel.el.selected);",
+           " \tvar widget = data.get_data<Gtk.Widget>(\"tree-row\");",
            " \t",
            " \t",
            "    var paintable = new Gtk.WidgetPaintable(widget);",
            "\t",
            "\t// must get the pos before we clear the hightlihg.",
            " \tvar pos = \"\";",
-           " \tvar row = _this.view.getRowAt(x,y, out pos);",
+           " \tvar row_widget = _this.view.getRowWidgetAt(x,y, out pos);",
            "\tthis.addHighlight(null,\"\");",
            " ",
            " \tvar is_shift = _this.keystate.is_shift > 0;",
            "",
            "",
            "",
-           "\tif (row < 0) {",
+           "\tif (row_widget == null) {",
            "\t\tGLib.debug(\"could not get row %d,%d, %s\", (int)x,(int)y,pos);",
            "\t\treturn   false; //Gdk.DragAction.COPY;",
            "\t}",
-           "\tvar tr = (Gtk.TreeListRow)_this.view.el.model.get_object(row);",
-           "\t",
-           "\tvar node =  (JsRender.Node)tr.get_item();",
+           " \t",
+           "\tvar node =  row_widget.get_data<JsRender.Node>(\"node\");",
            "",
            " \tif (pos == \"above\" || pos == \"below\") {",
            "\t\tif (node.parent == null) {",
            "    // if path of source and dest are inside each other..",
            "    // need to add source info to drag?",
            "    // the fail();",
-           " \tvar row = _this.view.getRowAt(x,y, out pos);",
+           " \t var row_widget = _this.view.getRowWidgetAt( x,y, out pos);    ",
+           "// \tvar row = _this.view.getRowAt(x,y, out pos);",
            " \t//GLib.debug(\"check is over %d, %d, %s\", (int)x,(int)y, pos);",
            "",
-           " \tif (row < 0) {",
+           " \tif (row_widget == null) {",
            "\t\tthis.addHighlight(null, \"\");\t",
            "\t \treturn Gdk.DragAction.COPY;",
            " \t}",
-           "\tvar tr = (Gtk.TreeListRow)_this.view.el.model.get_object(row);",
-           "\t",
-           "\tvar node =  (JsRender.Node)tr.get_item();",
+           " \tvar node = row_widget.get_data<JsRender.Node>(\"node\");",
            "\t",
            "\t//GLib.debug(\"Drop over node: %s\", node.fqn());",
            "\t",
            " \t",
            " \t",
            " \t    // _this.view.highlightDropPath(\"\", (Gtk.TreeViewDropPosition)0);",
-           "\tvar w = _this.view.getWidgetAt(x,y);",
-           "\tthis.addHighlight(w, pos); ",
+           "",
+           "\tthis.addHighlight(row_widget, pos); ",
            "\treturn is_shift ?  Gdk.DragAction.MOVE :  Gdk.DragAction.COPY;\t\t",
            "}"
           ]
              "\tif (node == null || node.fqn() == \"\") {",
              "\t\treturn;",
              "\t}",
+             "\t",
+             "\tnode.set_data<Gtk.Widget>(\"tree-row\", expand.get_parent().get_parent());",
+             "\texpand.get_parent().get_parent().set_data<JsRender.Node>(\"node\", node);",
+             "\t",
              "   //GLib.debug(\"node is %s\", node.get_type().name());",
              "// was item (1) in old layout",
              "",
        ],
        "string name" : "left-tree-view",
        "xtype" : "ColumnView",
-       "| Gtk.Widget? getWidgetAt" : [
-        "(double x,  double  y) {",
+       "| 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\"));",
+        "\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",
+        "\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;",
-        " ",
-        "",
         " }"
        ],
-       "| Gtk.Widget? getWidgetAtRow" : [
+       "| Gtk.Widget? getWidgetAtRowBROKE" : [
         "(uint row) {",
         "/*",
         "    \t",
         "",
         " }"
        ],
-       "| int getRowAt" : [
+       "| int getRowAtOLD" : [
         "(double x,  double  y, out string pos) {",
         "",
         "\tpos = \"\";",
     "\tthis.removeErrors();",
     "\tthis.error_widgets = new Gee.ArrayList<Gtk.Widget>();",
     "\tforeach(var diag in ar) { ",
-    "\t",
-    "\t\t ",
+    "\t ",
     "//        print(\"get inter\\n\");",
     "\t    var node= file.lineToNode( (int)diag.range.start.line) ;",
     "\t    if (node == null) {",
     "\t    \tcontinue;",
     "    \t}",
-    "    \tvar row = _this.model.nodeToRow(node);",
-    "    \tif (row < 0) {",
-    "    \t\tcontinue;",
-    "\t\t}",
-    "    \tvar w = this.view.getWidgetAtRow(row);",
+    "    \tvar w = node.get_data<Gtk.Widget>(\"tree-row\");",
     "    \tif (w == null) {",
     "    \t\treturn;",
     "\t\t}",