Fix #7299 - tooltip on tree - show all props in order
authorAlan <alan@roojs.com>
Wed, 6 Jul 2022 11:05:46 +0000 (19:05 +0800)
committerAlan <alan@roojs.com>
Wed, 6 Jul 2022 11:05:46 +0000 (19:05 +0800)
src/Builder4/GladeView.bjs
src/Builder4/GladeView.vala
src/JsRender/Node.vala

index cbecb53..83fb0f0 100644 (file)
          "xtype" : "Button"
         }
        ],
-       "xtype" : "ButtonBox"
+       "listeners" : {
+        "delete_event" : [
+         "(event) => {",
+         "",
+         "\treturn bool;",
+         "}",
+         ""
+        ]
+       },
+       "xtype" : "ButtonBox",
+       "| void test1" : [
+        "() {",
+        "",
+        "}"
+       ]
       }
      ],
      "xtype" : "Box"
index c123515..d9718ba 100644 (file)
@@ -154,9 +154,18 @@ public class GladeView : Object
             var child_0 = new Xcls_Button7( _this );
             child_0.ref();
             this.el.add(  child_0.el );
+
+            //listeners
+            this.el.delete_event.connect( (event) => {
+            
+               return bool;
+            });
         }
 
         // user defined functions
+        public void test1 () {
+        
+        }
     }
     public class Xcls_Button7 : Object
     {
index 3503558..1866b91 100644 (file)
@@ -717,46 +717,85 @@ public class JsRender.Node : Object {
        public string nodeTip()
        {
                var ret = this.nodeTitle(true);
+               var spec = "";
                var funcs = "";
                var props = "";
                var listen = "";
-               var iter = this.props.map_iterator();
-               while (iter.next()) {
-                       var i =  iter.get_key().strip();
-                       var val = iter.get_value().val.strip();
-                       if (val == null || val.length < 1) {
-                               continue;
-                       }
-                       if ( i[0] != '|') {
-                               props += "\n\t<b>" + 
-                                       GLib.Markup.escape_text(i) +"</b> : " + 
-                                       GLib.Markup.escape_text(val.split("\n")[0]);
-                                
-                               continue;
-                       }
+               var signals = "";
+               var uprops = "";
+               // sort?
                
-                       //if (i == "* init") { 
-                       //      continue;
-                       //}
+               var keys = new  Gee.ArrayList<string>();
+               foreach(var k in this.props.keys) {
+                       keys.add(k);
+               }
+               keys.sort((a,b) => {
+                        return Posix.strcmp(a, b);
+               
+               });
+               
+               
+               foreach(var pk in keys) {
+                        
+                       var prop = this.props.get(pk);
+                       var i = prop.name.strip();
+                       
+                       switch(prop.ptype) {
+                               case PROP: 
+                               case RAW: // should they be the same?
+                               
+                                       props += "\n\t<b>" + 
+                                               GLib.Markup.escape_text(i) +"</b> : " + 
+                                               GLib.Markup.escape_text(prop.val.split("\n")[0]);
+                                               
+                                       break;
+                                       
+                       
+                               
+                               case METHOD :
+                                       funcs += "\n\t<b>" + 
+                                               GLib.Markup.escape_text(i.substring(1)).strip() +"</b> : " + 
+                                               GLib.Markup.escape_text(prop.val.split("\n")[0]);
+                                       break;
+                                       
+                                
+                               case USER : // user defined.
+                                       uprops += "\n\t<b>" + 
+                                               GLib.Markup.escape_text(i) +"</b> : " + 
+                                               GLib.Markup.escape_text(prop.val.split("\n")[0]);
+                                       break;
+                                       
+                               case SPECIAL : // * prop| args | ctor | init
+                                       spec += "\n\t<b>" + 
+                                               GLib.Markup.escape_text(i) +"</b> : " + 
+                                               GLib.Markup.escape_text(prop.val.split("\n")[0]);
+                                       break;
+                                       
+                               case LISTENER : return  "";  // always raw...
+                               // not used
+                               default:
+                                       break;;
                        
-                       if (Regex.match_simple("^\\s*function", val)) { 
-                               funcs += "\n\t<b>" + 
-                                       GLib.Markup.escape_text(i.substring(1)).strip() +"</b> : " + 
-                                       GLib.Markup.escape_text(val.split("\n")[0]);
-                               continue;
-                       }
-                       if (Regex.match_simple("^\\s*\\(", val)) {
-                               funcs += "\n\t<b>" + GLib.Markup.escape_text(i.substring(1)).strip() +
-                                       "</b> : " + 
-                                       GLib.Markup.escape_text(val.split("\n")[0]);
-                               continue;
                        }
+                        
                        
                }
-               iter = this.listeners.map_iterator();
-               while (iter.next()) {
-                       var i =  iter.get_key().strip();
-                       var val = iter.get_value().val.strip();
+               
+               keys = new  Gee.ArrayList<string>();
+               foreach(var k in this.listeners.keys) {
+                       keys.add(k);
+               }
+               keys.sort((a,b) => {
+                        return Posix.strcmp(a, b);
+               
+               });
+               
+               foreach(var pk in keys) {
+                        
+                       var prop = this.listeners.get(pk);
+                       var i =  prop.name.strip();
+                       
+                       var val = prop.val.strip();
                        if (val == null || val.length < 1) {
                                continue;
                        }
@@ -769,13 +808,22 @@ public class JsRender.Node : Object {
                
                if (props.length > 0) {
                        ret+="\n\nProperties:" + props;
+               }
+               if (uprops.length > 0) {
+                       ret+="\n\nUser defined Properties:" + uprops;
                } 
+               
+               
                if (funcs.length > 0) {
                        ret+="\n\nMethods:" + funcs;
                } 
                if (listen.length > 0) {
                        ret+="\n\nListeners:" + listen;
                } 
+               if (spec.length > 0) {
+                       ret+="\n\nSpecial:" + spec;
+               } 
+               
                return ret;
 
        }