Fix #8062 - fix new file node selection issue
authorAlan Knowles <alan@roojs.com>
Sat, 2 Mar 2024 06:03:57 +0000 (14:03 +0800)
committerAlan Knowles <alan@roojs.com>
Sat, 2 Mar 2024 06:03:57 +0000 (14:03 +0800)
src/Builder4/PopoverAddObject.bjs
src/Builder4/PopoverAddObject.vala
src/Builder4/WindowLeftProps.bjs
src/Builder4/WindowLeftProps.vala
src/Builder4/WindowLeftTree.bjs
src/Builder4/WindowLeftTree.vala
src/JsRender/NodeProp.vala
src/Palete/HoverProvider.vala

index 20d4cd8..5bc0971 100644 (file)
            "\t}",
            "\t//var pos = \"\";",
            "\t// find left tree selected node",
-           "\tvar addto = _this.mainwindow.windowstate.left_tree.selmodel.getSelectedNode();",
+           "\tvar ws =_this.mainwindow.windowstate;",
+           "\tvar lt = ws.left_tree;",
+           "",
+           "\tvar add = _this.selmodel.getSelectedNode().deepClone();",
+           "\tif (lt.model.el.n_items < 1) {",
+           "\t\tws.file.tree = add;  ",
+           "    \tadd.updated_count++;",
+           "    \tvar m = (GLib.ListStore) lt.model.el.model;",
+           "\t\tm.append(add);",
+           "\t\tlt.model.selectNode(add); \t",
+           "\t\tlt.changed();",
+           "\t\tlt.node_selected(add);",
+           "\t\treturn;",
+           "\t}",
+           "\tvar addto = _this.mainwindow.windowstate.left_tree.selmodel.getSelectedNode();\t",
            "\t//var row = _this.view.getRowAt(x,y, out pos);",
            "\t",
-           " \t var add = _this.selmodel.getSelectedNode().deepClone();",
+           "",
            "\taddto.appendChild(add);",
            "\t_this.mainwindow.windowstate.left_props.changed();",
            "\t_this.mainwindow.windowstate.left_tree.model.selectNode(add);",
index 83490c2..3d0c336 100644 (file)
@@ -641,10 +641,24 @@ public class Xcls_PopoverAddObject : Object
                                }
                                //var pos = "";
                                // find left tree selected node
-                               var addto = _this.mainwindow.windowstate.left_tree.selmodel.getSelectedNode();
+                               var ws =_this.mainwindow.windowstate;
+                               var lt = ws.left_tree;
+                       
+                               var add = _this.selmodel.getSelectedNode().deepClone();
+                               if (lt.model.el.n_items < 1) {
+                                       ws.file.tree = add;  
+                               add.updated_count++;
+                               var m = (GLib.ListStore) lt.model.el.model;
+                                       m.append(add);
+                                       lt.model.selectNode(add);       
+                                       lt.changed();
+                                       lt.node_selected(add);
+                                       return;
+                               }
+                               var addto = _this.mainwindow.windowstate.left_tree.selmodel.getSelectedNode();  
                                //var row = _this.view.getRowAt(x,y, out pos);
                                
-                                var add = _this.selmodel.getSelectedNode().deepClone();
+                       
                                addto.appendChild(add);
                                _this.mainwindow.windowstate.left_props.changed();
                                _this.mainwindow.windowstate.left_tree.model.selectNode(add);
index c59b667..5b2cd59 100644 (file)
              "    ",
              "    var pal = _this.file.project.palete;",
              "        ",
-             "    string[] opts;",
-             "    var has_opts = pal.typeOptions(_this.node.fqn(), prop.name, prop.rtype, out opts);",
+             "    string[] opts = {};",
+             "  ",
+             "    var has_opts = prop.ptype.can_have_opt_list() ? ",
+             "    \tpal.typeOptions(_this.node.fqn(), prop.name, prop.rtype, out opts)",
+             "    \t: false;",
              "    ",
              "    if (!has_opts && prop.ptype == JsRender.NodePropType.RAW) {",
              "      \tuse_textarea = true;",
index e46a22a..1200d93 100644 (file)
@@ -2373,8 +2373,11 @@ public class Xcls_LeftProps : Object
                            
                            var pal = _this.file.project.palete;
                                
-                           string[] opts;
-                           var has_opts = pal.typeOptions(_this.node.fqn(), prop.name, prop.rtype, out opts);
+                           string[] opts = {};
+                         
+                           var has_opts = prop.ptype.can_have_opt_list() ? 
+                               pal.typeOptions(_this.node.fqn(), prop.name, prop.rtype, out opts)
+                               : false;
                            
                            if (!has_opts && prop.ptype == JsRender.NodePropType.RAW) {
                                use_textarea = true;
index a4deaf6..9bf6162 100644 (file)
            "\t\tm.append(dropNode);",
            "\t\t_this.model.selectNode(dropNode); \t",
            "\t\t_this.changed();",
+           "\t\t_this.node_selected(dropNode);",
            "\t\treturn true; // no need to highlight?",
            "     ",
            "    }",
         {
          "$ xns" : "Gtk",
          "* prop" : "model",
+         "bool can_unselect" : true,
          "id" : "selmodel",
          "items" : [
           {
             "\t     return;",
             "     }",
             "    _this.selmodel.el.unselect_all();",
-            "    ",
-            "    node.remove();",
-            " \tGLib.debug(\"delete Selected - done\");",
-            "    _this.changed();",
+            "    if (node.parent != null) {",
+            "\t\tnode.remove();",
+            "\t \tGLib.debug(\"delete Selected - done\");",
+            "\t\t_this.changed();",
+            "\t\treturn;",
+            "\t}",
+            "\tthis.updateModel(null);",
+            "\t_this.main_window.windowstate.file.tree = null;",
+            "\t_this.changed();",
+            "\t_this.node_selected(null);",
             "/*    ",
             "    print(\"DELETE SELECTED?\");",
             "    //_this.view.blockChanges = true;",
index a878cba..70b5349 100644 (file)
@@ -1237,6 +1237,7 @@ public class Xcls_WindowLeftTree : Object
                                        m.append(dropNode);
                                        _this.model.selectNode(dropNode);       
                                        _this.changed();
+                                       _this.node_selected(dropNode);
                                        return true; // no need to highlight?
                             
                            }
@@ -1385,6 +1386,7 @@ public class Xcls_WindowLeftTree : Object
                        // my vars (dec)
 
                        // set gobject values
+                       this.el.can_unselect = true;
 
                        //listeners
                        this.el.selection_changed.connect( (position, n_items) => {
@@ -1561,10 +1563,16 @@ public class Xcls_WindowLeftTree : Object
                             return;
                     }
                    _this.selmodel.el.unselect_all();
-                   
-                   node.remove();
-                       GLib.debug("delete Selected - done");
-                   _this.changed();
+                   if (node.parent != null) {
+                               node.remove();
+                               GLib.debug("delete Selected - done");
+                               _this.changed();
+                               return;
+                       }
+                       this.updateModel(null);
+                       _this.main_window.windowstate.file.tree = null;
+                       _this.changed();
+                       _this.node_selected(null);
                /*    
                    print("DELETE SELECTED?");
                    //_this.view.blockChanges = true;
index 303ee06..76bd895 100644 (file)
@@ -101,6 +101,27 @@ public enum JsRender.NodePropType
                        
                };
        }
+       public bool can_have_opt_list()
+       {
+               switch (this) {
+                       case RAW:               
+                       case METHOD : 
+                       case SIGNAL :   
+                       case SPECIAL :
+                       case LISTENER :
+                       case NONE:  
+                       case CTOR:   
+                               return false;
+                       case USER :     
+                       case PROP: 
+                               return true;
+                       default: 
+                               return false;
+               }
+               
+       
+       }
+       
        public static NodePropType nameToType(string str)
        {
                foreach(var np in alltypes()) {
index 1dd08c6..5866770 100644 (file)
@@ -20,7 +20,7 @@ namespace Palete {
                        global::Gtk.TextIter begin, end ,  pos;
 
                        if (!context.get_bounds(out begin, out end)) {
-                               return false;
+                               return true;
                        }
                        var line = end.get_line();
                        var offset =  end.get_line_offset();
@@ -43,7 +43,8 @@ namespace Palete {
                                display.append(new global::Gtk.Label(str));
                                return true;
                        } 
-                       return false;
+                       // return false seems to crash things.
+                       return true;
                }
                public bool populate (GtkSource.HoverContext context, GtkSource.HoverDisplay display) throws Error
                {