X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=src%2FJsRender%2FNodeToVala.vala;h=1350c0dc62488d255f644f711f0900df62e6a7c1;hb=HEAD;hp=d87a3e798bf1e790e033fd786d009a1a607f22bd;hpb=859f794572a8dc2536fce93d5bb5136108e8434a;p=app.Builder.js diff --git a/src/JsRender/NodeToVala.vala b/src/JsRender/NodeToVala.vala index d87a3e798..1350c0dc6 100644 --- a/src/JsRender/NodeToVala.vala +++ b/src/JsRender/NodeToVala.vala @@ -1,8 +1,8 @@ /** * - * Code to convert node tree to Javascript... + * Code to convert node tree to Vala... * - * usage : x = (new JsRender.NodeToJs(node)).munge(); + * usage : x = (new JsRender.NodeToVala(node)).munge(); * * * @@ -63,10 +63,13 @@ public class JsRender.NodeToVala : Object { // initialize line data.. node.line_start = this.cur_line; - node.proplines = new Gee.HashMap(); - node.listenlines = Gee.HashMap(); - - + node.line_end = this.cur_line; + node.lines = new Gee.ArrayList(); + node.line_map = new Gee.HashMap(); + if (parent == null) { + node.node_lines = new Gee.ArrayList(); + node.node_lines_map = new Gee.HashMap(); + } } @@ -188,29 +191,29 @@ public class JsRender.NodeToVala : Object { public void addLine(string str= "") { this.cur_line++; + //this.ret += "/*%d*/ ".printf(this.cur_line-1) + str + "\n"; this.ret += str + "\n"; } public void addMultiLine(string str= "") { - this.cur_line++; + this.cur_line += str.split("\n").length; - this.ret += str + "\n"; + //this.ret += "/*%d*/ ".printf(l) + str + "\n"; + this.ret += str + "\n"; } - addMultiLine + public void globalVars() { if (this.depth > 0) { return; } - // Global Vars.. + // Global Vars..??? when did this get removed..? //this.ret += this.inpad + "public static " + this.xcls + " " + this.node.xvala_id+ ";\n\n"; - this.addLine("%sstatic %s _%s;".printf(this.inpad, this.xcls, this.node.xvala_id)); + this.addLine(this.inpad + "static " + this.xcls + " _" + this.node.xvala_id+ ";"); this.addLine(); - //this.ret += this.inpad + "static " + this.xcls + " _" + this.node.xvala_id+ ";\n\n"; - - + } void classHeader() @@ -219,12 +222,16 @@ public class JsRender.NodeToVala : Object { // class header.. // class xxx { WrappedGtk el; } this.node.line_start = this.cur_line; - this.addLine(inpad + "public class " + this.xcls + " : Object \n" + this.inpad + "{"); + + this.top.node.setNodeLine(this.cur_line, this.node); + + this.addLine(inpad + "public class " + this.xcls + " : Object"); + this.addLine(this.inpad + "{"); this.addLine(this.pad + "public " + this.cls + " el;"); - this.addLine(this.pad + "private " + this.top.xcls + " _this;)"; + this.addLine(this.pad + "private " + this.top.xcls + " _this;"); this.addLine(); @@ -237,7 +244,7 @@ public class JsRender.NodeToVala : Object { return; } this.addLine(pad + "public static " + xcls + " singleton()"); - this.addLine(this.pad + "{") + this.addLine(this.pad + "{"); this.addLine(this.ipad + "if (_" + this.node.xvala_id + " == null) {"); this.addLine(this.ipad + " _" + this.node.xvala_id + "= new "+ this.xcls + "();"); // what about args? this.addLine(this.ipad + "}"); @@ -314,7 +321,7 @@ public class JsRender.NodeToVala : Object { } if (vv[0] == "@") { - this.node.proplines.set(k, this.cur_line); + this.node.setLine(this.cur_line, "p", k); this.addLine(this.pad + "public signal" + k.substring(1) + " " + iter.get_value() + ";"); this.ignore(k); @@ -338,8 +345,8 @@ public class JsRender.NodeToVala : Object { } this.myvars.add(k); - - this.node.proplines.set(k, this.cur_line); + this.node.setLine(this.cur_line, "p", k); + this.addLine(this.pad + "public " + (k[0] == '$' || k[0] == '#' ? k.substring(2) : k ) + ";"); @@ -357,13 +364,13 @@ public class JsRender.NodeToVala : Object { } var iter = this.node.items.list_iterator(); while (iter.next()) { - var ci = iter.get(); + var ci = iter.get(); if (ci.xvala_id[0] != '+') { continue; // skip generation of children? } - this.node.proplines.set(k, this.cur_line); + this.addLine(this.pad + "public " + ci.xvala_xcls + " " + ci.xvala_id.substring(1) + ";"); @@ -397,7 +404,7 @@ public class JsRender.NodeToVala : Object { if (this.depth < 1) { // top level - does not pass the top level element.. - this.addLine(this.pad + "public " + this.xcls + "(" + cargs_str +")") + this.addLine(this.pad + "public " + this.xcls + "(" + cargs_str +")"); this.addLine(this.pad + "{"); } else { @@ -413,7 +420,7 @@ public class JsRender.NodeToVala : Object { */ void addUnderThis() { - // public static? + // public static? if (depth < 1) { this.addLine( this.ipad + "_this = this;"); return; @@ -456,7 +463,7 @@ public class JsRender.NodeToVala : Object { } */ if (this.node.has("* ctor")) { - this.node.proplines.set("* ctor", this.curline); + this.node.setLine(this.cur_line, "p", "* ctor"); this.addLine(this.ipad + "this.el = " + this.node.get("* ctor")+ ";"); return; } @@ -504,12 +511,13 @@ public class JsRender.NodeToVala : Object { args += v; } - this.node.proplines.set("* xtype", this.curline); + this.node.setLine(this.cur_line, "p", "* xtype"); + this.addLine(this.ipad + "this.el = new " + cls + "( "+ string.joinv(", ",args) + " );") ; return; } - this.node.proplines.set("* xtype", this.curline); + this.node.setLine(this.cur_line, "p", "* xtype");; this.addLine(this.ipad + "this.el = new " + this.cls + "();"); @@ -563,12 +571,14 @@ public class JsRender.NodeToVala : Object { return; } // what are the properties of this class??? - this.ret += "\n" + this.ipad + "// set gobject values\n"; + this.addLine(); + this.addLine(this.ipad + "// set gobject values"); + var iter = cls.props.map_iterator(); while (iter.next()) { var p = iter.get_key(); - print("Check Write %s\n", p); + //print("Check Write %s\n", p); if (!this.node.has(p)) { continue; } @@ -602,7 +612,7 @@ public class JsRender.NodeToVala : Object { } - this.ret += "%sthis.el.%s = %s;\n".printf(ipad,p,v); // // %s, iter.get_value().type); + this.addLine("%sthis.el.%s = %s;".printf(ipad,p,v)); // // %s, iter.get_value().type); // got a property.. @@ -646,7 +656,7 @@ public class JsRender.NodeToVala : Object { } // create the element.. this.addLine(this.ipad + "var child_" + "%d".printf(i) + " = new " + ci.xvala_xcls + - "( _this " + xargs + ");" ; + "( _this " + xargs + ");" ); // this is only needed if it does not have an ID??? this.addLine(this.ipad + "child_" + "%d".printf(i) +".ref();"); // we need to reference increase unnamed children... @@ -696,7 +706,8 @@ public class JsRender.NodeToVala : Object { this.addLine(); this.addLine(ipad + "// init method"); this.addLine(); - this.node.proplines.set("init", this.curline); + this.node.setLine(this.cur_line, "p", "init"); + this.addMultiLine(ipad + this.padMultiline(ipad, this.node.get("init")) ); } @@ -715,11 +726,12 @@ public class JsRender.NodeToVala : Object { while (iter.next()) { var k = iter.get_key(); var v = iter.get_value(); - this.node.listenlines.set(k, this.curline); - this.addMultiLine(this.ipad + "this.el." + k + ".connect( " + + + this.node.setLine(this.cur_line, "l", k); + this.addMultiLine(this.ipad + "this.el." + k + ".connect( " + this.padMultiline(this.ipad,v) +");"); - } + } } void addEndCtor() { @@ -792,7 +804,7 @@ public class JsRender.NodeToVala : Object { // function in the format of {type} (args) { .... } var kk = k.substring(2); var vv = iter.get_value(); - this.node.proplines.set(k, this.curline); + this.node.setLine(this.cur_line, "p", k); this.addMultiLine(this.pad + "public " + kk + " " + this.padMultiline(this.pad, vv));; @@ -801,14 +813,16 @@ public class JsRender.NodeToVala : Object { void iterChildren() { - this.node.line_end = this.curline; + this.node.line_end = this.cur_line; + this.node.sortLines(); + if (this.depth > 0) { this.addLine(this.inpad + "}"); } var iter = this.node.items.list_iterator(); - var i = -1; + while (iter.next()) { this.addMultiLine(this.mungeChild(iter.get())); }