Fix #8106 - tidy up color higlighting on nav tree
[roobuilder] / src / Builder4 / Editor.bjs
index af1b6bc..ebadf15 100644 (file)
       {
        "$ 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<Gtk.Widget>(\"widget\", expand.get_parent());",
-               "\texpand.get_parent().get_parent().set_data<Lsp.DocumentSymbol>(\"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<Gtk.Widget>(\"widget\", expand.get_parent());",
+                 "\texpand.get_parent().get_parent().set_data<Lsp.DocumentSymbol>(\"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<Lsp.DocumentSymbol>(\"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<Lsp.DocumentSymbol>(\"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<Lsp.DocumentSymbol> 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<Gtk.Widget>(\"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<Lsp.DocumentSymbol> 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<Gtk.Widget>(\"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"