namespace Palete { /* public class Introspect.El : Object { public enum eltype { NS, CLASS, METHOD, PROP } public eltype type; } */ public class Roo : Palete { public Roo() { base(); this.name = "Roo"; } Gee.HashMap propsFromJSONArray(string type, Json.Array ar) { var ret = new Gee.HashMap(); for (var i =0 ; i < ar.get_length(); i++) { var o = ar.get_object_element(i); var name = o.get_string_member("name"); var prop = new GirObject(type, name ); 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") : ""; prop.sig = o.has_member("sig") ? o.get_string_member("sig") : ""; //print(type + ":" + name +"\n"); ret.set(name,prop); } return ret; } Gee.HashMap classes; public override void load () { if (this.classes != null) { return; } this.loadUsageFile(Builder4.Application.configDirectory() + "/resources/RooUsage.txt"); this.classes = new Gee.HashMap(); var pa = new Json.Parser(); pa.load_from_file(Builder4.Application.configDirectory() + "/resources/roodata.json"); var node = pa.get_root(); var clist = node.get_object().get_object_member("data"); clist.foreach_member((o , key, value) => { //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")); this.classes.set(key, cls); }); } public string doc(string what) { return ""; /*var ns = what.split(".")[0]; var gir = Gir.factory(ns); return gir.doc(what); */ //return typeof(this.comments[ns][what]) == 'undefined' ? '' : this.comments[ns][what]; } // does not handle implements... public override GirObject? getClass(string ename) { this.load(); return this.classes.get(ename); } public override Gee.HashMap getPropertiesFor(string ename, string type) { //print("Loading for " + ename); this.load(); // if (typeof(this.proplist[ename]) != 'undefined') { //print("using cache"); // return this.proplist[ename][type]; //} // use introspection to get lists.. var cls = this.classes.get(ename); var ret = new Gee.HashMap(); if (cls == null) { print("could not find class: %s\n", ename); return ret; //throw new Error.INVALID_VALUE( "Could not find class: " + ename); } //cls.parseProps(); //cls.parseSignals(); // ?? needed for add handler.. //cls.parseMethods(); // ?? needed for ??.. //cls.parseConstructors(); // ?? needed for ??.. //cls.overlayParent(); switch (type) { case "props": return cls.props; case "signals": return cls.signals; case "methods": return ret; case "ctors": return ret; default: throw new Error.INVALID_VALUE( "getPropertiesFor called with: " + type); //var ret = new Gee.HashMap(); //return ret; } //cls.overlayInterfaces(gir); } public string[] getInheritsFor(string ename) { string[] ret = {}; var es = ename.split("."); var gir = Gir.factory(es[0]); var cls = gir.classes.get(es[1]); if (cls == null) { return ret; } return cls.inheritsToStringArray(); } public override void fillPack(JsRender.Node node,JsRender.Node parent) { return; } } }