src/Palete/Palete.vala
[app.Builder.js] / src / Palete / Roo.vala
index 93fa2dd..37d2d99 100644 (file)
@@ -33,7 +33,7 @@ namespace Palete {
                          
         }
 
-               Gee.HashMap<string,GirObject> propsFromJSONArray(string type, Json.Array ar)
+               Gee.HashMap<string,GirObject> propsFromJSONArray(string type, Json.Array ar, GirObject cls)
                {
 
                        var ret = new Gee.HashMap<string,GirObject>();
@@ -46,6 +46,9 @@ namespace Palete {
                                prop.type        = o.get_string_member("type");
                                prop.doctxt  = o.get_string_member("desc");
                                prop.propertyof = o.has_member("memberOf") ? o.get_string_member("memberOf") : "";
+                               if (prop.propertyof.length < 1)  {
+                                       prop.propertyof = cls.name;
+                               }
                                prop.sig = o.has_member("sig") ? o.get_string_member("sig") : "";
                                
                                if (o.has_member("optvals")  ) {
@@ -83,8 +86,11 @@ namespace Palete {
                                //print("cls:" + key+"\n");
                         
                                var cls = new GirObject("class", key);  
-                               cls.props = this.propsFromJSONArray("prop", value.get_object().get_array_member("props"));
-                               cls.signals = this.propsFromJSONArray("signal", value.get_object().get_array_member("events"));
+                               cls.props = this.propsFromJSONArray("prop", value.get_object().get_array_member("props"),cls);
+                               cls.signals = this.propsFromJSONArray("signal", value.get_object().get_array_member("events"),cls);
+                               if (value.get_object().has_member("methods")) {
+                                       cls.methods = this.propsFromJSONArray("method", value.get_object().get_array_member("methods"),cls);
+                               }
                                
                                this.classes.set(key, cls);
                        });
@@ -224,7 +230,7 @@ namespace Palete {
                }
                public override  List<SourceCompletionItem> suggestComplete(
                                JsRender.JsRender file,
-                               JsRender.Node node,
+                               JsRender.Node? node,
                                string proptype, 
                                string key,
                                string complete_string
@@ -250,9 +256,11 @@ namespace Palete {
                                        
                                }
                                if (complete_string != "Roo" && "Roo".index_of(complete_string,0) == 0 ) { // should we ignore exact matches... ???
-                                       ret.append(new SourceCompletionItem ("Roo", "Roo", null, "Roo library"));
+                                       ret.append(new SourceCompletionItem ("Roo - A Roo class", "Roo", null, "Roo library"));
+                               }
+                               if (complete_string != "_this" && "_this".index_of(complete_string,0) == 0 ) { // should we ignore exact matches... ???
+                                       ret.append(new SourceCompletionItem ("_this - the top level element", "_this", null, "Top level element"));
                                }
-
                                return ret;
                        }
                        // got at least one ".".
@@ -299,6 +307,9 @@ namespace Palete {
                                                        }
                                                        return ret;
                                                }
+                                               
+                                               
+                                               
                                                // check methods?? - we do not export that at present..
                                                return ret;      //no idea...
                                        }
@@ -352,9 +363,27 @@ namespace Palete {
                                }
                                print("matching property");
                                
+                               
+                               
+                               var citer = cls.methods.map_iterator();
+                               while (citer.next()) {
+                                       var prop = citer.get_value();
+                                       // does the name start with ...
+                                       if (parts[i].length > 0 && prop.name.index_of(parts[i],0) != 0) {
+                                               continue;
+                                       }
+                                       // got a matching property...
+                                       // return type?
+                                       ret.append(new SourceCompletionItem (
+                                                        prop.name + prop.sig + " :  ("+ prop.propertyof + ")", 
+                                                       prevbits + prop.name + "(", 
+                                                       null, 
+                                                       prop.doctxt));
+                               }
+                               
                                // get the properties / methods and subclasses.. of cls..
                                // we have cls.. - see if the string matches any of the properties..
-                               var citer = cls.props.map_iterator();
+                               citer = cls.props.map_iterator();
                                while (citer.next()) {
                                        var prop = citer.get_value();
                                        // does the name start with ...
@@ -364,7 +393,7 @@ namespace Palete {
                                        // got a matching property...
                                        
                                        ret.append(new SourceCompletionItem (
-                                                        prop.name + " : " + prop.type + " ("+ prop.memberOf + ")", 
+                                                        prop.name + " : " + prop.type + " ("+ prop.propertyof + ")", 
                                                        prevbits + prop.name, 
                                                        null, 
                                                        prop.doctxt));