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                                 
49                                 if (o.has_member("optvals")) {
50                                         var oar = o.get_array_member("desc");
51                                         
52                                         for (var oi = 0; oi < oar.get_length(); oi++) {
53                                                 prop.optvalues.add(oar.get_string_element(oi));
54                                         }
55                                         
56                                 }       
57                                 
58                                 
59                                 
60                                 //print(type + ":" + name +"\n");
61                                 ret.set(name,prop);
62                         }
63                         return ret;
64                 }
65          
66                 public override void  load () {
67
68                         if (this.classes != null) {
69                                 return;
70                         }
71                         this.loadUsageFile(BuilderApplication.configDirectory() + "/resources/RooUsage.txt");
72                         this.classes = new Gee.HashMap<string,GirObject>();
73
74                                 
75                         var pa = new Json.Parser();
76                         pa.load_from_file(BuilderApplication.configDirectory() + "/resources/roodata.json");
77                         var node = pa.get_root();
78
79                         var clist =  node.get_object().get_object_member("data");
80                                 clist.foreach_member((o , key, value) => {
81                                 //print("cls:" + key+"\n");
82                          
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"));
86                                 
87                                 this.classes.set(key, cls);
88                         });
89                                 
90                                 
91                         
92                                  
93                 }
94                   
95                         
96                 public string doc(string what) {
97                         return "";
98                         /*var ns = what.split(".")[0];
99
100
101                         
102                         
103                                 var gir =  Gir.factory(ns);
104                                 return   gir.doc(what);
105                                 */
106                                 
107                         //return typeof(this.comments[ns][what]) == 'undefined' ?  '' : this.comments[ns][what];
108                 }
109
110                 // does not handle implements...
111                 public override GirObject? getClass(string ename)
112                 {
113                         this.load();
114                         return this.classes.get(ename);
115                         
116                 }
117                 
118                 public override Gee.HashMap<string,GirObject> getPropertiesFor(string ename, string type)
119                 {
120                         //print("Loading for " + ename);
121                         
122
123                         this.load();
124                                         // if (typeof(this.proplist[ename]) != 'undefined') {
125                                         //print("using cache");
126                                  //   return this.proplist[ename][type];
127                                 //}
128                                 // use introspection to get lists..
129                  
130                         
131                         var cls = this.classes.get(ename);
132                         var ret = new Gee.HashMap<string,GirObject>();
133                         if (cls == null) {
134                                 print("could not find class: %s\n", ename);
135                                 return ret;
136                                 //throw new Error.INVALID_VALUE( "Could not find class: " + ename);
137                 
138                         }
139
140                         //cls.parseProps();
141                         //cls.parseSignals(); // ?? needed for add handler..
142                         //cls.parseMethods(); // ?? needed for ??..
143                         //cls.parseConstructors(); // ?? needed for ??..
144
145                         //cls.overlayParent();
146
147                         switch  (type) {
148                                 
149                                 
150                                 case "props":
151                                         return cls.props;
152                                 case "signals":
153                                         return cls.signals;
154                                 case "methods":
155                                         return ret;
156                                 case "ctors":
157                                         return ret;
158                                 default:
159                                         throw new Error.INVALID_VALUE( "getPropertiesFor called with: " + type);
160                                         //var ret = new Gee.HashMap<string,GirObject>();
161                                         //return ret;
162                         
163                         }
164                 
165         
166                 //cls.overlayInterfaces(gir);
167
168
169                          
170                 }
171                 public string[] getInheritsFor(string ename)
172                 {
173                         string[] ret = {};
174                         var es = ename.split(".");
175                         var gir = Gir.factory(es[0]);
176                         
177                         var cls = gir.classes.get(es[1]);
178                         if (cls == null) {
179                                 return ret;
180                         }
181                         return cls.inheritsToStringArray();
182                         
183
184                 }
185
186
187                 public override void fillPack(JsRender.Node node,JsRender.Node parent)
188                 {   
189
190                          return;
191                 }
192                 /*
193                  *  Pulldown options for type
194                  */
195                 public override bool typeOptions(string fqn, string key, string type, out string[] opts) 
196                 {
197                         opts = {};
198                         print("get typeOptions %s (%s)%s", fqn, type, key);
199                         if (type.up() == "BOOL" || type.up() == "BOOLEAN") {
200                                 opts = { "true", "false" };
201                                 return true;
202                          }
203                          
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);
207                                  return false;
208                          }
209                          var pr = props.get(key);
210                          if (pr.optvalues.size < 1) {
211                                  return false;
212                          }
213                          string[] ret = {};
214                          for(var i = 0; i < pr.optvalues.size; i++) {
215                                  ret += pr.optvalues.get(i);
216                          }
217                          opts = ret;
218                          
219                          return true;
220                          
221                 }
222         
223     }
224 }
225