From: Alan Knowles Date: Sat, 2 Mar 2024 06:03:57 +0000 (+0800) Subject: Fix #8062 - fix new file node selection issue X-Git-Url: http://git.roojs.org/?p=roobuilder;a=commitdiff_plain;h=73e9074e50b95c4af807abd9ba1bb9b9494024f8 Fix #8062 - fix new file node selection issue --- diff --git a/src/Builder4/PopoverAddObject.bjs b/src/Builder4/PopoverAddObject.bjs index 20d4cd825..5bc09712c 100644 --- a/src/Builder4/PopoverAddObject.bjs +++ b/src/Builder4/PopoverAddObject.bjs @@ -241,10 +241,24 @@ "\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);", diff --git a/src/Builder4/PopoverAddObject.vala b/src/Builder4/PopoverAddObject.vala index 83490c23d..3d0c33631 100644 --- a/src/Builder4/PopoverAddObject.vala +++ b/src/Builder4/PopoverAddObject.vala @@ -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); diff --git a/src/Builder4/WindowLeftProps.bjs b/src/Builder4/WindowLeftProps.bjs index c59b667f3..5b2cd5978 100644 --- a/src/Builder4/WindowLeftProps.bjs +++ b/src/Builder4/WindowLeftProps.bjs @@ -889,8 +889,11 @@ " ", " 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;", diff --git a/src/Builder4/WindowLeftProps.vala b/src/Builder4/WindowLeftProps.vala index e46a22a30..1200d93b4 100644 --- a/src/Builder4/WindowLeftProps.vala +++ b/src/Builder4/WindowLeftProps.vala @@ -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; diff --git a/src/Builder4/WindowLeftTree.bjs b/src/Builder4/WindowLeftTree.bjs index a4deaf644..9bf616275 100644 --- a/src/Builder4/WindowLeftTree.bjs +++ b/src/Builder4/WindowLeftTree.bjs @@ -617,6 +617,7 @@ "\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?", " ", " }", @@ -885,6 +886,7 @@ { "$ xns" : "Gtk", "* prop" : "model", + "bool can_unselect" : true, "id" : "selmodel", "items" : [ { @@ -944,10 +946,16 @@ "\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;", diff --git a/src/Builder4/WindowLeftTree.vala b/src/Builder4/WindowLeftTree.vala index a878cbace..70b5349fb 100644 --- a/src/Builder4/WindowLeftTree.vala +++ b/src/Builder4/WindowLeftTree.vala @@ -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; diff --git a/src/JsRender/NodeProp.vala b/src/JsRender/NodeProp.vala index 303ee06f4..76bd895c5 100644 --- a/src/JsRender/NodeProp.vala +++ b/src/JsRender/NodeProp.vala @@ -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()) { diff --git a/src/Palete/HoverProvider.vala b/src/Palete/HoverProvider.vala index 1dd08c62c..586677004 100644 --- a/src/Palete/HoverProvider.vala +++ b/src/Palete/HoverProvider.vala @@ -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 {