void saveVala()
{
- var fn = GLib.Path.get_dirname(this.path) + "/" + this.name + ".vala";
- print("WRITE : " + fn);
- FileUtils.set_contents(fn, this.toValaSource(false));
+ var fn = GLib.Path.get_dirname(this.path) + "/" + this.name + ".vala";
+ print("WRITE : " + fn);
+ FileUtils.set_contents(fn, JsRender.NodeToVala.mungeFile(this));
}
return "http://devel.akbkhome.com/seed/" + cls + ".html";
}
- int vcnt = 0;
-
- Palete.Gtk palete;
- GLib.List<Node> vitems;
- string xvala_xcls;
- public override string toValaSource(bool testcompile)
- {
- var ret = "";
-
-
- this.vcnt = 0;
- //print(JSON.stringify(this.items[0],null,4));
- //print(JSON.stringify(this.items[0],null,4));Seed.quit();
-
-
- this.palete = (Palete.Gtk) Palete.factory("Gtk");
-
- this.vitems = new GLib.List<Node>();
-
- this.toValaName(this.tree);
- // print(JSON.stringify(item,null,4));Seed.quit();
-
- ret += "/* -- to compile\n";
- ret += "valac --pkg gio-2.0 --pkg posix --pkg gtk+-3.0 --pkg libnotify --pkg gtksourceview-3.0 --pkg libwnck-3.0 \\\n";
- //ret += " " + item.xvala_id + ".vala -o /tmp/" + item.xvala_id +"\n";
- ret += " /tmp/" + this.name + ".vala -o /tmp/" + this.name +"\n";
- ret += "*" + "/\n";
- ret += "\n\n";
- if (!testcompile) {
-
- ret += "/* -- to test class\n";
- }
- //
- ret += "static int main (string[] args) {\n";
- ret += " Gtk.init (ref args);\n";
- ret += " new " + this.tree.xvala_xcls +"();\n";
- ret += " " + this.name +".show_all();\n";
- ret += " Gtk.main ();\n";
- ret += " return 0;\n";
- ret += "}\n";
- if (!testcompile) {
- ret += "*" + "/\n";
- }
- ret += "\n\n";
- // print(JSON.stringify(item,null,4));
- ret += this.toValaItem(this.tree,0);
-
- return ret;
-
- }
-
- string toValaNS(Node item)
- {
- var ns = item.get("* xns") ;
- //if (ns == "GtkSource") {
- //return "Gtk.Source.";
- //}
- return ns + ".";
- }
-
- void toValaName(Node item) {
- this.vcnt++;
-
- var cls = this.toValaNS(item) + item.get("xtype");
-
- string id = item.get("id").length > 0 ? item.get("id") : "%s%d".printf(item.get("xtype"), this.vcnt);
-
- var props = this.palete.getPropertiesFor(cls, "props");
-
-
-
- item.xvala_cls = cls;
- item.xvala_xcls = "Xcls_" + id;
- item.xvala_id = item.get("id").length > 0 ? item.get("id") : "";
-
- this.vitems.append(item);
- // loop children..
-
- if (item.items.size < 1) {
- return;
- }
- for(var i =0;i<item.items.size;i++) {
- this.toValaName(item.items.get(i));
- }
-
- }
- string toValaItem(Node item, int depth)
- {
- // print(JSON.stringify(item,null,4));
- var ret = "";
- var inpad = string.nfill((depth+1) *4 , ' ');
-
- var pad = string.nfill((depth+2) * 4, ' ');
- var ipad = string.nfill((depth+3) *4, ' ');
-
- var cls = item.xvala_cls;
-
- var xcls = item.xvala_xcls;
-
- var citems = new Gee.HashMap<string,bool>();
-
- if (depth < 1) {
- // Global Vars..
- ret+= inpad + "public static " + xcls + " " + this.name + ";\n\n";
-
- }
-
- // class header..
- // class xxx { WrappedGtk el; }
- ret += inpad + "public class " + xcls + "\n" + inpad + "{\n";
- ret += pad + "public " + cls + " el;\n";
-
- if (depth < 1) {
-
- ret += pad + "private static " + xcls + " _this;\n\n";
- }
-
-
- // properties??
-
- //public bool paused = false;
- //public static StatusIconA statusicon;
- if (depth < 1) {
- //strbuilder(pad + "public static " + xcls + " _this;\n");
- for(var i=1;i < this.vitems.length(); i++) {
- if (this.vitems.nth_data(i).xvala_id.length > 0) {
- ret += pad + "public " + this.vitems.nth_data(i).xvala_xcls + " " + this.vitems.nth_data(i).xvala_id + ";\n";
- }
- }
-
- }
-
- ret +="\n" + ipad + "// my vars\n";
- var iter = item.props.map_iterator();
- while (iter.next()) {
- var k = iter.get_key();
- var v = iter.get_value();
-
- if (k[0] != '.') {
- continue;
- }
-
- var kk = k.substring(1);
-
- var vv = v.split(":");
- ret += pad + "public " + vv[0] + " " + kk + ";\n";
- citems.set(k, true);
-
- }
- // .vala props..
-
- // ctor..
- ret+="\n" + ipad + "// ctor \n";
- ret+= pad + "public " + xcls + "()\n" + pad + "{\n";
-
- // wrapped ctor..
- // this may need to look up properties to fill in the arguments..
- // introspection does not workk..... - as things like gtkmessagedialog
-
- var ctors = this.palete.getPropertiesFor(cls, "ctors");
-
- // ctors is going to return 'new' or ... ??
- string ctor = item.get("*ctor").length > 0 ? item.get("(ctor") : "new";
-
- var ctor_def = ctors.get(ctor);
-
-
- if (ctor_def.paramset != null) {
-
- var argid = 1;
- var args = new GLib.List<string>();
-
- for (var i = 0;i< ctor_def.paramset.params.size;i++) {
- var val = ctor_def.paramset.params.get(i);
- var nm = val.name;
- // need piter.get_key(); -- string..
- string pv = item.get(nm);
- if (pv.length < 1) {
- // try and find the 'item'....
- Node pvi = item.findProp(nm);
-
- if (pvi == null) {
- ret += "// could not find value for " + nm +"\n";
-
- args.append("null"); // hopefully...
- continue;
- }
- var var_id = "xxx%d".printf( argid++ );
-
- var new_str = this.nodeToValaNew(pvi, ref ret, ref argid , pad );
-
- ret+= pad + "var "+ var_id + " = new " + new_str +"\n";
- args.append(var_id);
- continue;
- }
- // got a string value..
- ret += "// for " + nm + " we have a value of " +
- pv + " converting to " + val.type +"\n";
-
- args.append(this.valueTypeToString(pv, val.type));
-
- }
- ret += ipad + "this.el = new " + cls + "( "+ this.gLibStringListJoin(", ", args) + " );\n" ;
-
- } else {
- ret += ipad + "this.el = new " + cls + "();\n" ;
-
- }
- //var meths = this.palete.getPropertiesFor(item['|xns'] + '.' + item.xtype, 'methods');
- //print(JSON.stringify(meths,null,4));Seed.quit();
-
-
-
- // public static?
- if ( depth < 1) {
- ret += ipad + "_this = this;\n";
- ret += ipad + this.name + " = this;\n";
- } else {
- if (item.xvala_id.length > 0) {
- ret += ipad + "_this." + item.xvala_id + " = this;\n";
-
- }
-
-
- }
- // initialize.. my vars..
- ret += "\n" + ipad + "// my vars\n";
-
- // look for ".****"
- iter = item.props.map_iterator();
- while (iter.next()) {
- var k = iter.get_key();
- if (k[0] != '.') {
- continue;
- }
- var kk = k.substring(1);
- var v = item.get(k);
- var vv = v.split(":");
- if (vv.length < 2) {
- continue;
- }
- ret+= ipad + "this" + k + " = " + vv[1] +";\n";
-
- }
-
-
- // what are the properties of this class???
- ret += "\n" + ipad + "// set gobject values\n";
- var props = this.palete.getPropertiesFor(cls, "props");
-
-
-
- var pviter = props.map_iterator();
- while (pviter.next()) {
-
- // print("Check: " +cls + "::(" + pviter.get_value().propertyof + ")" + pviter.get_key() + " " );
-
- // skip items we have already handled..
- if (!(citems.get(pviter.get_key()) == false)) {
- //print("- skip already handled\n " );
- continue;
- }
- if (item.get(pviter.get_key()).length < 1) {
- //print("- skip not found\n " );
- continue;
- }
-
- var type = pviter.get_value().type;
-
-
-
- ret += ipad + "this.el." + pviter.get_key() + " = " +
- this.valueTypeToString(item.get(pviter.get_key()), type) + ";\n";
-
-
- }
- //code
- // add all the child items..
-
-
- for(var i =0;i<item.items.size;i++) {
- var ci = item.items.get(i);
- var pk = ci.get("pack");
- string[] packing = { "add" };
- if (ci.get("pack").length > 0) {
- packing = ci.get("pack").split(",");
- }
-
-
- ret += ipad + "var child_" + "%d".printf(i) + " = new " + ci.xvala_xcls + "();\n";
-
- ret+= ipad + "this.el." + packing[0] + " ( child_" + "%d".printf(i) + ".el ";
- for (var ii=1;ii<packing.length; ii++) {
- ret+= ii > 1 ? ", " : "";
- ret+= packing[i];
- }
- ret+= ");\n";
-
- }
-
- if (item.get("init").length > 0) {
- var vv = item.get("init").split("\n");
- ret+= ipad + string.joinv("\n" + ipad, vv);
-
- }
-
- //citems['|pack'] = true;
- //citems['|items'] = true;
- //citems['|init'] = true;
-
- if (item.listeners.size > 0) {
- // print(JSON.stringify(item.listeners));Seed.quit();
-
- ret+= "\n" + ipad + "// listeners \n";
- // add all the signal handlers..
- var liter = item.listeners.map_iterator();
- while (liter.next()) {
- var vv = string.joinv("\n" + pad, liter.get_value().split("\n"));
- ret+= ipad + "this.el." + liter.get_key() + ".connect( " + vv + " );\n";
- }
-
- }
-
-
-
-
- // end ctor..
- ret+=pad + "}\n";
-
-
- ret+= "\n" + pad + "// userdefined functions \n";
-
- // user defined functions...
- /*
- for (var k in item) {
- if (typeof(citems[k]) != 'undefined') {
- strbuilder("\n" + pad + "// skip " + k + " - already used \n");
- continue;
- }
- if (k[0] != '|') {
- strbuilder("\n" + pad + "// skip " + k + " - not pipe \n");
- continue;
- }
- // function in the format of {type} (args) { .... }
-
- var v = item[k].split(/\/*--/);
- if (v.length < 2) {
- strbuilder("\n" + pad + "// skip " + k + " - could not find seperator\n");
- continue;
- }
- var vv = v[1].replace('* /', "");
- //print(JSON.stringify(vv));Seed.quit();
- vv = vv.replace(/^\n+/,'');
- vv = vv.replace(/\n+$/,'');
- vv = vv.replace(/\n/g,"\n" + ipad);
-
- vva = vv.split(' ');
- var rtype = vva.shift();
- var body = vva.join(' ');
-
-
- strbuilder(pad + "public " + rtype + " " + k.substring(1) +body + "\n");
-
-
-
- }
- */
-
-
- if (depth > 0) {
- ret+=inpad + "}\n";
- }
- for (var i = 0;i < item.items.size;i++) {
- ret+= this.toValaItem(item.items.get(i), 1);
- }
-
- if (depth < 1) {
- ret+=inpad + "}\n";
- }
- return ret;
- }
-
-
- string nodeToValaNew(Node node, ref string pre_str, ref int id, string pad)
- {
- var ret = "new ";
- ret += node.fqn()+ "(";
- // what are the args required for this type of ctor...
- var ctors = this.palete.getPropertiesFor(node.fqn(), "ctor");
- string ctor = node.get("*ctor").length > 0 ? node.get("(ctor") : "new";
-
-
- var ctor_def = ctors.get(ctor);
-
-
- if (ctor_def.paramset != null) {
- var args = new GLib.List<string>();
- var argid = 1;
-
- for (var i = 0; i < ctor_def.paramset.params.size; i++) {
- // need piter.get_key(); -- string..
- var val = ctor_def.paramset.params.get(i);
- var kn = val.name;
- string pv = node.get(kn);
- if (pv.length < 1) {
- // try and find the 'item'....
- Node pvi = node.findProp(kn);
- if (pvi == null) {
- args.append("null"); // hopefully...
- continue;
- }
- var var_id = "tmp_var_%d".printf( id++ );
- var new_str = this.nodeToValaNew(pvi, ref pre_str, ref id , pad );
- pre_str += pad + "var "+ var_id + " = new " + new_str +"\n";
- args.append(var_id);
- continue;
- }
- // got a string value..
- args.append(this.valueTypeToString(pv, val.type));
-
- }
- return ret + this.gLibStringListJoin(", ", args) + " );\n" ;
-
- }
- return ret + ");\n" ;
-
-
-
- }
-
- string gLibStringListJoin( string sep, GLib.List<string> ar)
- {
- var ret = "";
- for (var i = 0; i < ar.length(); i++) {
- ret += i>0 ? sep : "";
- ret += ar.nth_data(i);
- }
- return ret;
-
- }
-
- string valueTypeToString(string val, string type) {
- switch(type) {
- case "utf8":
- return "\"" + val.escape("") + "\"";
- default:
- return val;
-
- }
-
- }
+