4 public errordomain Error {
11 public class Usage : Object
13 public Gee.ArrayList<string> left;
14 public Gee.ArrayList<string> right;
15 public Usage(Gee.ArrayList<string> ileft, Gee.ArrayList<string> iright)
20 public bool leftHas(string s)
22 for(var i = 0 ; i < this.left.size; i++) {
23 var m = this.left.get(i);
27 if (!m.contains(":")) {
30 var ar = m.split(":");
44 static Gee.HashMap<string,Palete>? cache = null;
46 public static Palete factory(string xtype)
49 cache = new Gee.HashMap<string,Palete>();
51 if (cache.get(xtype) != null) {
52 return cache.get(xtype);
56 cache.set(xtype, new Gtk());
59 cache.set(xtype, new Roo());
62 throw new Error.INVALID_TYPE("invalid argument to Palete factory");
64 return cache.get(xtype);
68 public abstract class Palete : Object
74 public Gee.ArrayList<Usage> map;
83 //map : false, // array of mappings left: [] , right : []
85 //items : false, // the tree of nodes.
90 string guessName(JsRender.Node ar) throws Error // turns the object into full name.
92 throw new Error.NEED_IMPLEMENTING("xxx. guessName needs implimenting");
98 * gather a list of potentional objects that can be added..
102 listChildren: function (existing) {
103 existing = existing || [];
104 // existing.push('*top'); // always have top
106 console.log("GATHER LIST? " + this.map.length);
109 function addRight(right) {
110 right.forEach(function(r) {
111 if (ret.indexOf(r) > -1) {
118 this.map.forEach(function(m) {
120 m.left.forEach( function(left) {
123 var l = left.replace(/:.*$/, '');
124 // print("chk:" + l + " in " + existing.join(','));
125 if (existing.indexOf(l) > -1) {
128 //return true; // no more needed..
135 // console.dump(ret);
145 public string[] getChildList(string in_rval)
148 if (this.map == null) {
153 var rval = in_rval == "" ? "*top" : in_rval;
155 // should be a bit more than this..
156 // -> it should look for all elements that inherit
158 var rt = new Gee.ArrayList<string>();
159 for (var i = 0; i < this.map.size; i++) {
160 var m = this.map.get(i);
162 if (!m.leftHas(rval)) {
165 print("found LEFT, adding right\n");
167 for(var ii =0; ii < m.right.size; ii++) {
168 var l = m.right.get(ii);
170 if (rt.index_of(l) > -1) {
173 //print("ADD " + string.joinv(", ", ret) + "\n");
180 print ("drop list for %s is:\n%s\n", rval, string.joinv("\n", ret));
181 //console.log("DROP LIST:");
188 public string[] getDropList(string rval)
191 if (this.map == null) {
196 // should be a bit more than this..
197 // -> it should look for all elements that inherit
199 var rt = new Gee.ArrayList<string>();
200 for (var i = 0; i < this.map.size; i++) {
201 var m = this.map.get(i);
203 if (m.right.index_of(rval) < 0) {
206 //print("found RIGHT, adding left\n");
208 for(var ii =0; ii < m.left.size; ii++) {
209 var l = m.left.get(ii);
211 if (rt.index_of(l) > -1) {
214 //print("ADD " + string.joinv(", ", ret) + "\n");
221 print ("drop list for %s is:\n%s\n", rval, string.joinv("\n", ret));
222 //console.log("DROP LIST:");
231 findType : function (data, prop, value)
233 if (prop[0] == '|') {
236 return typeof(value);
240 findOptions : function(ename)
242 switch(ename.toLowerCase()) {
244 return [ 'true', 'false' ];
245 // everything else does not have options.
253 console.log("OOPS: = unknown type: " + ename);
257 confirmCanAdd: function(parent, child) {
258 // confirms that one obj can be added to another.
259 // returns true, for items, or list of properties that can hold it..
263 getDefaultPack: function(pname, cname) {
267 public void saveTemplate (string name, JsRender.Node data)
271 // store it in user's directory..
272 var appdir = GLib.Environment.get_home_dir() + "/.Builder";
275 if (!GLib.FileUtils.test(appdir+ "/" + gn, GLib.FileTest.IS_DIR)) {
276 GLib.File.new_for_path (appdir+ "/" + gn).make_directory ();
279 GLib.FileUtils.set_contents(appdir+ "/" + gn + "/" + name + ".json", data.toJsonString());
284 * list templates - in home directory (and app dir in future...)
285 * @param {String} name - eg. Gtk.Window..
286 * @return {Array} list of templates available..
289 public GLib.List<string> listTemplates (JsRender.Node node)
294 var ret = new GLib.List<string>();
295 var dir= GLib.Environment.get_home_dir() + "/.Builder/" + gn;
296 if (!GLib.FileUtils.test(dir, GLib.FileTest.IS_DIR)) {
303 var f = File.new_for_path(dir);
305 var file_enum = f.enumerate_children(GLib.FileAttribute.STANDARD_DISPLAY_NAME, GLib.FileQueryInfoFlags.NONE, null);
308 while ((next_file = file_enum.next_file(null)) != null) {
309 var n = next_file.get_display_name();
310 if (!Regex.match_simple ("\\.json$", n)) {
313 ret.append( dir + "/" + n);
319 public JsRender.Node? loadTemplate(string path)
322 var pa = new Json.Parser();
323 pa.load_from_file(path);
324 var node = pa.get_root();
326 if (node.get_node_type () != Json.NodeType.OBJECT) {
329 var obj = node.get_object ();
331 var ret = new JsRender.Node();
334 ret.loadFromJson(obj, 1);
335 ret.ref(); // not sure if needed -- but we had a case where ret became uninitialized?
339 public void loadUsageFile (string fname) {
344 print("Palete Load called\n");
346 if (!FileUtils.test (fname, FileTest.EXISTS)) {
347 throw new Error.MISSING_FILE(fname + " not found");
350 FileUtils.get_contents(fname, out raw);
352 var data = raw.split("\n");
354 var cfg = new Gee.ArrayList<Usage>();
355 var left = new Gee.ArrayList<string>();
356 var right = new Gee.ArrayList<string>();
358 for (var i = 0; i < data.length; i++) {
359 var d = data[i].strip();
360 //print("READ " + d + "\n");
364 Regex.match_simple ("^\\s+$", d)
366 Regex.match_simple ("^\\s*/", d)
371 if (Regex.match_simple ("^left:", d)) {
374 cfg.add(new Usage( left, right));
376 left = new Gee.ArrayList<string>();
377 right = new Gee.ArrayList<string>();
380 if (Regex.match_simple ("^right:", d)) {
385 //print("add left: " + d + "\n");
389 //print("add Right: " + d + "\n");
395 cfg.add(new Usage( left, right));
400 public string validateCode(string code, string language)
402 if (language == "javascript") {
411 public abstract void fillPack(JsRender.Node node,JsRender.Node parent);
412 public abstract void load();
413 public abstract Gee.HashMap<string,GirObject> getPropertiesFor(string ename, string type);
414 public abstract GirObject? getClass(string ename);