7 public class Introspect.El : Object
21 public class Roo : Palete {
34 Gee.HashMap<string,GirObject> propsFromJSONArray(string type, Json.Array ar)
37 var ret = new Gee.HashMap<string,GirObject>();
39 for (var i =0 ; i < ar.get_length(); i++) {
40 var o = ar.get_object_element(i);
41 var name = o.get_string_member("name");
42 var prop = new GirObject(type, name );
44 prop.type = o.get_string_member("type");
45 prop.doctxt = o.get_string_member("desc");
46 prop.propertyof = o.has_member("memberOf") ? o.get_string_member("memberOf") : "";
47 prop.sig = o.has_member("sig") ? o.get_string_member("sig") : "";
49 if (o.has_member("optvals")) {
50 var oar = o.get_array_member("desc");
52 for (var oi = 0; oi < oar.get_length(); oi++) {
53 prop.optvalues.add(oar.get_string_element(oi));
60 //print(type + ":" + name +"\n");
66 public override void load () {
68 if (this.classes != null) {
71 this.loadUsageFile(BuilderApplication.configDirectory() + "/resources/RooUsage.txt");
72 this.classes = new Gee.HashMap<string,GirObject>();
75 var pa = new Json.Parser();
76 pa.load_from_file(BuilderApplication.configDirectory() + "/resources/roodata.json");
77 var node = pa.get_root();
79 var clist = node.get_object().get_object_member("data");
80 clist.foreach_member((o , key, value) => {
81 //print("cls:" + key+"\n");
83 var cls = new GirObject("class", key);
84 cls.props = this.propsFromJSONArray("prop", value.get_object().get_array_member("props"));
85 cls.signals = this.propsFromJSONArray("signal", value.get_object().get_array_member("events"));
87 this.classes.set(key, cls);
96 public string doc(string what) {
98 /*var ns = what.split(".")[0];
103 var gir = Gir.factory(ns);
104 return gir.doc(what);
107 //return typeof(this.comments[ns][what]) == 'undefined' ? '' : this.comments[ns][what];
110 // does not handle implements...
111 public override GirObject? getClass(string ename)
114 return this.classes.get(ename);
118 public override Gee.HashMap<string,GirObject> getPropertiesFor(string ename, string type)
120 //print("Loading for " + ename);
124 // if (typeof(this.proplist[ename]) != 'undefined') {
125 //print("using cache");
126 // return this.proplist[ename][type];
128 // use introspection to get lists..
131 var cls = this.classes.get(ename);
132 var ret = new Gee.HashMap<string,GirObject>();
134 print("could not find class: %s\n", ename);
136 //throw new Error.INVALID_VALUE( "Could not find class: " + ename);
141 //cls.parseSignals(); // ?? needed for add handler..
142 //cls.parseMethods(); // ?? needed for ??..
143 //cls.parseConstructors(); // ?? needed for ??..
145 //cls.overlayParent();
159 throw new Error.INVALID_VALUE( "getPropertiesFor called with: " + type);
160 //var ret = new Gee.HashMap<string,GirObject>();
166 //cls.overlayInterfaces(gir);
171 public string[] getInheritsFor(string ename)
174 var es = ename.split(".");
175 var gir = Gir.factory(es[0]);
177 var cls = gir.classes.get(es[1]);
181 return cls.inheritsToStringArray();
187 public override void fillPack(JsRender.Node node,JsRender.Node parent)
193 * Pulldown options for type
195 public override bool typeOptions(string fqn, string key, string type, out string[] opts)
198 print("get typeOptions %s (%s)%s", fqn, type, key);
199 if (type.up() == "BOOL" || type.up() == "BOOLEAN") {
200 opts = { "true", "false" };
204 var props = this.getPropertiesFor(fqn, "props");
205 if (!props.has_key(key)) {
206 print("prop %s does not have key %s\n", fqn, key);
209 var pr = props.get(key);
210 if (pr.optvalues.size < 1) {
214 for(var i = 0; i < pr.optvalues.size; i++) {
215 ret += pr.optvalues.get(i);