src/Palete/Roo.vala
[app.Builder.js] / src / Palete / Roo.vala
1 namespace Palete {
2
3         
4 /*      
5         
6         
7     public class Introspect.El : Object
8     {
9         public enum eltype { 
10             NS,
11             CLASS,
12             METHOD,
13             PROP
14         }
15                 
16             
17         public eltype type;
18     }
19
20 */
21     public class Roo : Palete {
22                 
23                 
24         public Roo()
25         {
26
27
28             
29             base();
30             this.name = "Roo";
31                           
32         }
33
34                 Gee.HashMap<string,GirObject> propsFromJSONArray(string type, Json.Array ar)
35                 {
36
37                         var ret = new Gee.HashMap<string,GirObject>();
38                         
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 );  
43                                  
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") : "";
48                                 if (o.has_member("optvals")) {
49                                         var ar = o.get_array_member("desc");
50                                         
51                                         for (var i = 0; i < ar.get_length(); i++) {
52                                                 prop.optvalues.add(ar.get_string_element(i));
53                                         }
54                                         
55                                         
56                                 
57                                 
58                                 
59                                 //print(type + ":" + name +"\n");
60                                 ret.set(name,prop);
61                         }
62                         return ret;
63                 }
64          
65                 public override void  load () {
66
67                         if (this.classes != null) {
68                                 return;
69                         }
70                         this.loadUsageFile(BuilderApplication.configDirectory() + "/resources/RooUsage.txt");
71                         this.classes = new Gee.HashMap<string,GirObject>();
72
73                                 
74                         var pa = new Json.Parser();
75                         pa.load_from_file(BuilderApplication.configDirectory() + "/resources/roodata.json");
76                         var node = pa.get_root();
77
78                         var clist =  node.get_object().get_object_member("data");
79                                 clist.foreach_member((o , key, value) => {
80                                 //print("cls:" + key+"\n");
81                          
82                                 var cls = new GirObject("class", key);  
83                                 cls.props = this.propsFromJSONArray("prop", value.get_object().get_array_member("props"));
84                                 cls.signals = this.propsFromJSONArray("signal", value.get_object().get_array_member("events"));
85                                 
86                                 this.classes.set(key, cls);
87                         });
88                                 
89                                 
90                         
91                                  
92                 }
93                   
94                         
95                 public string doc(string what) {
96                         return "";
97                         /*var ns = what.split(".")[0];
98
99
100                         
101                         
102                                 var gir =  Gir.factory(ns);
103                                 return   gir.doc(what);
104                                 */
105                                 
106                         //return typeof(this.comments[ns][what]) == 'undefined' ?  '' : this.comments[ns][what];
107                 }
108
109                 // does not handle implements...
110                 public override GirObject? getClass(string ename)
111                 {
112                         this.load();
113                         return this.classes.get(ename);
114                         
115                 }
116                 
117                 public override Gee.HashMap<string,GirObject> getPropertiesFor(string ename, string type)
118                 {
119                         //print("Loading for " + ename);
120                         
121
122                         this.load();
123                                         // if (typeof(this.proplist[ename]) != 'undefined') {
124                                         //print("using cache");
125                                  //   return this.proplist[ename][type];
126                                 //}
127                                 // use introspection to get lists..
128                  
129                         
130                         var cls = this.classes.get(ename);
131                         var ret = new Gee.HashMap<string,GirObject>();
132                         if (cls == null) {
133                                 print("could not find class: %s\n", ename);
134                                 return ret;
135                                 //throw new Error.INVALID_VALUE( "Could not find class: " + ename);
136                 
137                         }
138
139                         //cls.parseProps();
140                         //cls.parseSignals(); // ?? needed for add handler..
141                         //cls.parseMethods(); // ?? needed for ??..
142                         //cls.parseConstructors(); // ?? needed for ??..
143
144                         //cls.overlayParent();
145
146                         switch  (type) {
147                                 
148                                 
149                                 case "props":
150                                         return cls.props;
151                                 case "signals":
152                                         return cls.signals;
153                                 case "methods":
154                                         return ret;
155                                 case "ctors":
156                                         return ret;
157                                 default:
158                                         throw new Error.INVALID_VALUE( "getPropertiesFor called with: " + type);
159                                         //var ret = new Gee.HashMap<string,GirObject>();
160                                         //return ret;
161                         
162                         }
163                 
164         
165                 //cls.overlayInterfaces(gir);
166
167
168                          
169                 }
170                 public string[] getInheritsFor(string ename)
171                 {
172                         string[] ret = {};
173                         var es = ename.split(".");
174                         var gir = Gir.factory(es[0]);
175                         
176                         var cls = gir.classes.get(es[1]);
177                         if (cls == null) {
178                                 return ret;
179                         }
180                         return cls.inheritsToStringArray();
181                         
182
183                 }
184
185
186                 public override void fillPack(JsRender.Node node,JsRender.Node parent)
187                 {   
188
189                          return;
190                 }
191                 /*
192                  *  Pulldown options for type
193                  */
194                 public override bool typeOptions(string key, out string[] opts) 
195                 {
196                         opts = {};
197                         if (key.up() == "BOOL" || key.up() == "BOOLEAN") {
198                                 opts = { "true", "false" };
199                                 return true;
200                          }
201                          return false;
202                          
203                 }
204         
205     }
206 }
207