3 <?xml version="1.0" encoding="UTF-8"?>
4 <!-- Generated with glade 3.18.3 -->
6 <requires lib="gtk+" version="3.12"/>
7 <object class="GtkBox" id="box1">
8 <property name="visible">True</property>
9 <property name="can_focus">False</property>
10 <property name="orientation">vertical</property>
12 <object class="GtkButton" id="button1">
13 <property name="label" translatable="yes">button</property>
14 <property name="visible">True</property>
15 <property name="can_focus">True</property>
16 <property name="receives_default">True</property>
19 <property name="expand">False</property>
20 <property name="fill">True</property>
21 <property name="position">0</property>
28 <object class="GtkToggleButton" id="togglebutton1">
29 <property name="label" translatable="yes">togglebutton</property>
30 <property name="visible">True</property>
31 <property name="can_focus">True</property>
32 <property name="receives_default">True</property>
35 <property name="expand">False</property>
36 <property name="fill">True</property>
37 <property name="position">2</property>
43 public class JsRender.NodeToGlade : Object {
47 Gee.ArrayList<string> els;
48 //Gee.ArrayList<string> skip;
49 Gee.HashMap<string,string> ar_props;
50 public static int vcnt = 0;
52 public NodeToGlade( Node node, string pad)
56 this.els = new Gee.ArrayList<string>();
57 //this.skip = new Gee.ArrayList<string>();
58 this.ar_props = new Gee.HashMap<string,string>();
62 public string munge ( )
68 var cls = this.node.fqn().replace(".", "");
71 // things we can not do yet...
72 case "GtkDialog": // top level.. - named and referenced
73 case "GtkAboutDialog":
74 case "GtkMessageDialog":
75 case "GtkWindow": // top level.. - named and referenced
76 res = this.mungeOuter(true);
79 res = this.mungeOuter(false);
87 return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
88 <!-- Generated with appBuilder 4.1 -->
90 <requires lib=\"gtk+\" version=\"3.12\"/>
91 <!-- <requires lib=\"gtksourceview\" version=\"3.0\"/> -->
98 public string mungeChild(string pad , Node cnode, bool with_packing = false)
100 var x = new NodeToGlade(cnode, pad);
101 return x.mungeNode(with_packing);
104 public string mungeNode(bool with_packing)
107 var cls = this.node.fqn().replace(".", "");
109 var b = new global::Gtk.Builder();
111 var gtype = b.get_type_from_name(cls);
112 print("Type: %s ?= %s\n", this.node.fqn(), gtype.name());
116 var ns = this.node.fqn().split(".")[0];
117 if (ns == "Clutter") {
120 //if (ns == "GtkClutter") {
123 if (ns == "WebKit") {
127 // things we can not do yet...
128 /*case "GtkDialog": // top level.. - named and referenced
129 case "GtkAboutDialog":
130 case "GtkWindow": // top level.. - named and referenced
131 return this.mungeWindow();
134 if (this.node.items.size > 0) {
135 return this.mungeChild(pad + " " , this.node.items.get(0), false );
139 //case "GtkView": // SourceView?
140 case "GtkTreeStore": // top level.. - named and referenced
141 case "GtkListStore": // top level.. - named and referenced
142 case "GtkTreeViewColumn": // part of liststore?!?!
143 case "GtkMenu": // top level..
144 case "GtkCellRendererText":
145 case "GtkSourceBuffer":
146 case "GtkClutterActor"://fixme..
147 ///case "GtkClutterEmbed"://fixme..
152 var id = this.node.uid();
153 var ret = @"$pad<object class=\"$cls\" id=\"$id\">\n";
155 var props = Palete.Gir.factoryFqn(this.node.fqn()).props;
156 //var props = Palete.factory("Gtk").getPropertiesFor(this.node.fqn(), "props");
158 var pviter = props.map_iterator();
159 while (pviter.next()) {
161 // print("Check: " +cls + "::(" + pviter.get_value().propertyof + ")" + pviter.get_key() + " " );
163 // skip items we have already handled..
164 if (!this.node.has(pviter.get_key())) {
167 var k = pviter.get_key();
168 var val = GLib.Markup.escape_text(this.node.get(pviter.get_key()).strip());
169 ret += @"$pad <property name=\"$k\">$val</property>\n"; // es
178 pack = this.packString();
184 if (this.node.items.size < 1) {
185 return ret + @"$pad</object>\n" + pack;
188 for (var i = 0; i < this.node.items.size; i++ ) {
190 var add = this.mungeChild(pad + " " , this.node.items.get(i) , true);
191 if (add.length < 1) {
195 ret += @"$pad <child>\n";
197 ret += @"$pad </child>\n";
200 return ret + @"$pad</object>\n" + pack;
208 public string packString()
214 // pack is part of the parent element..
216 string[] pk= { "add" };
217 var pfqn = "Gtk.Box";
220 if (this.node.props.get("* pack") == null) {
223 pk = this.node.get("* pack").split(",");
225 if (this.node.props.get("* pack") != null) {
226 pk = this.node.get("* pack").split(",");
234 if (pfqn == "Gtk.ScrolledWindow") {
237 var p_parts =pfqn.split(".");
241 var gir = Palete.Gir.factory(ns);
242 var cls = gir.classes.get(p_parts[1]);
243 var mdef = cls.methods.get(pk[0]);
245 print("could not find method : %s\n", pk[0]);
249 var generator = new Json.Generator ();
250 var n = new Json.Node(Json.NodeType.OBJECT);
251 n.set_object(mdef.toJSON());
252 generator.set_root(n);
253 generator.indent = 4;
254 generator.pretty = true;
256 print(generator.to_data(null));
262 pbody += @"$pad <property name=\"pack_type\">start</property>\n";
266 pbody += @"$pad <property name=\"pack_type\">start</property>\n";
270 //pbody += @"$pad <property name=\"pack_type\">start</property>\n";
271 pbody += @"$pad <property name=\"expand\">True</property>\n";
272 pbody += @"$pad <property name=\"fill\">True</property>\n";
273 //pbody += @"$pad <property name=\"position\">1</property>\n";
274 var pack = @"$pad<packing>\n" +
275 string.joinv("", pbody) +
280 print ("set_model not handled yet..");
284 print ("unknown pack type: %s", pk[0]);
291 for (var i = 2; i < mdef.paramset.params.size; i++) {
293 if (poff > (pk.length-1)) {
297 var key = mdef.paramset.params.get(i).name;
299 pbody += @"$pad <property name=\"$key\">$val</property>\n";
303 if (pbody.length < 1) {
304 /*var generator = new Json.Generator ();
305 var n = new Json.Node(Json.NodeType.OBJECT);
306 n.set_object(mdef.toJSON());
307 generator.set_root(n);
308 generator.indent = 4;
309 generator.pretty = true;
311 print(generator.to_data(null));
313 print("skip - packing - no arguments (" + pk[0] + ")\n");
317 var pack = @"$pad<packing>\n" +
318 string.joinv("", pbody) +
323 public string mungeOuter(bool with_window)
325 var label = this.node.fqn() + ": " +
326 (this.node.has("title") ? this.node.get("title") : "No-title");
330 <object class=\"GtkBox\" id=\"fake-window1\">
331 <property name=\"visible\">True</property>
332 <property name=\"can_focus\">False</property>
333 <property name=\"orientation\">vertical</property>
338 <object class=\"GtkLabel\" id=\"fake-window-label-1\">
339 <property name=\"visible\">True</property>
340 <property name=\"can_focus\">False</property>
341 <property name=\"label\" translatable=\"yes\">" + label + "</property>
344 <property name=\"expand\">False</property>
345 <property name=\"fill\">True</property>
346 <property name=\"position\">0</property>
357 if (this.node.items.size > 0) {
359 children = this.mungeChild(pad + " " , this.node.items.get(0), false);
363 children += (children.length > 0) ? "<packing>
364 <property name=\"expand\">True</property>
365 <property name=\"fill\">True</property>
366 <property name=\"position\">1</property>
369 ret+= (children.length < 1 ) ? "<placeholder/>" : children;
375 ret+= this.mungeNode (true);
384 <object class=\"GtkBox\" id=\"fake-footer\">
385 <property name=\"visible\">True</property>
386 <property name=\"can_focus\">False</property>
395 <property name=\"expand\">False</property>
396 <property name=\"fill\">True</property>
397 <property name=\"position\">2</property>