Fix #8046 - meson generation option (so we can edit the language server..)
[roobuilder] / src / Builder4 / ValaProjectSettingsPopover.bjs
1 {
2  "build_module" : "builder",
3  "gen_extended" : false,
4  "items" : [
5   {
6    "# Project.Gtk project" : "null",
7    "# Project.GtkValaSettings? selected_target" : "null",
8    "# Xcls_MainWindow window" : "null",
9    "# bool cg_loading" : false,
10    "# bool done" : false,
11    "$ Project.Callback doneObj" : "null",
12    "$ xns" : "Gtk",
13    "bool modal" : true,
14    "items" : [
15     {
16      "$ xns" : "Gtk",
17      "* prop" : "titlebar",
18      "* title" : "Edit Project Details",
19      "items" : [
20       {
21        "$ xns" : "Gtk",
22        "* prop" : "title_widget",
23        "string label" : "Change Vala  Compile settings",
24        "xtype" : "Label"
25       }
26      ],
27      "xtype" : "HeaderBar"
28     },
29     {
30      "$ xns" : "Gtk",
31      "* pack" : "set_child",
32      "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL",
33      "bool hexpand" : true,
34      "bool vexpand" : true,
35      "items" : [
36       {
37        "$ xns" : "Gtk",
38        "bool vexpand" : true,
39        "id" : "notebook",
40        "items" : [
41         {
42          "$ xns" : "Gtk",
43          "* pack" : false,
44          "id" : "label_global",
45          "utf8 label" : "Global",
46          "xtype" : "Label"
47         },
48         {
49          "$ xns" : "Gtk",
50          "* pack" : false,
51          "id" : "label_targets",
52          "utf8 label" : "Targets",
53          "xtype" : "Label"
54         },
55         {
56          "$ xns" : "Gtk",
57          "* pack" : "append_page,_this.label_global.el",
58          "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL",
59          "gboolean homogeneous" : false,
60          "items" : [
61           {
62            "$ xns" : "Gtk",
63            "Gtk.Orientation orientation" : "Gtk.Orientation.HORIZONTAL",
64            "int spacing" : 10,
65            "items" : [
66             {
67              "$ xns" : "Gtk",
68              "Gtk.Align halign" : "Gtk.Align.START",
69              "bool hexpand" : false,
70              "utf8 label" : "Compile flags:",
71              "xtype" : "Label"
72             },
73             {
74              "$ xns" : "Gtk",
75              "id" : "compile_flags",
76              "listeners" : {
77               "changed" : [
78                "() => {",
79                "    ",
80                "   _this.project.compile_flags = this.el.buffer.text;",
81                "   _this.project.save();",
82                "//    _this.project.save();",
83                "",
84                "}"
85               ]
86              },
87              "utf8 placeholder_text" : "eg. -g --valasrc $BASEDIR ",
88              "xtype" : "Entry"
89             },
90             {
91              "$ xns" : "Gtk",
92              "id" : "generate_meson",
93              "listeners" : {
94               "activate" : [
95                "( ) => {",
96                "",
97                "\t_this.project.generate_meson = this.el.active;",
98                "}",
99                "\t"
100               ]
101              },
102              "string label" : "Generate Meson",
103              "xtype" : "CheckButton"
104             }
105            ],
106            "xtype" : "Box"
107           },
108           {
109            "$ xns" : "Gtk",
110            "Gtk.Orientation orientation" : "Gtk.Orientation.HORIZONTAL",
111            "int spacing" : 10,
112            "items" : [
113             {
114              "$ xns" : "Gtk",
115              "Gtk.Align halign" : "Gtk.Align.START",
116              "bool hexpand" : false,
117              "utf8 label" : "Version:",
118              "xtype" : "Label"
119             },
120             {
121              "$ xns" : "Gtk",
122              "id" : "version",
123              "listeners" : {
124               "changed" : [
125                "() => {",
126                "    ",
127                "   _this.project.version = this.el.buffer.text;",
128                "   _this.project.save();",
129                "//    _this.project.save();",
130                "",
131                "}"
132               ]
133              },
134              "utf8 placeholder_text" : "eg. 1.5",
135              "xtype" : "Entry"
136             },
137             {
138              "$ xns" : "Gtk",
139              "Gtk.Align halign" : "Gtk.Align.START",
140              "bool hexpand" : false,
141              "utf8 label" : "Licence:",
142              "xtype" : "Label"
143             },
144             {
145              "$ xns" : "Gtk",
146              "id" : "licence",
147              "listeners" : {
148               "changed" : [
149                "() => {",
150                "    ",
151                "   _this.project.licence = this.el.buffer.text;",
152                "   _this.project.save();",
153                "//    _this.project.save();",
154                "",
155                "}"
156               ]
157              },
158              "utf8 placeholder_text" : "eg. LGPL",
159              "xtype" : "Entry"
160             }
161            ],
162            "xtype" : "Box"
163           },
164           {
165            "$ xns" : "Gtk",
166            "Gtk.PolicyType hscrollbar_policy" : "Gtk.PolicyType.AUTOMATIC",
167            "Gtk.PolicyType vscrollbar_policy" : "Gtk.PolicyType.AUTOMATIC",
168            "bool has_frame" : true,
169            "bool hexpand" : true,
170            "bool vexpand" : true,
171            "id" : "vapi_scroll",
172            "items" : [
173             {
174              "$ xns" : "Gtk",
175              "* prop" : "child",
176              "items" : [
177               {
178                "$ xns" : "Gtk",
179                "* prop" : "model",
180                "items" : [
181                 {
182                  "$ xns" : "Gtk",
183                  "* prop" : "model",
184                  "items" : [
185                   {
186                    "$ xns" : "Gtk",
187                    "* prop" : "model",
188                    "items" : [
189                     {
190                      "$ xns" : "GLib",
191                      "* prop" : "model",
192                      "GLib.Type item_type" : "typeof(Project.VapiSelection)",
193                      "id" : "vapimodel",
194                      "xtype" : "ListStore"
195                     },
196                     {
197                      "$ xns" : "Gtk",
198                      "* prop" : "sorter",
199                      "items" : [
200                       {
201                        "$ xns" : "Gtk",
202                        "* prop" : "expression",
203                        "GLib.Type this_type" : "typeof(Project.VapiSelection)",
204                        "string property_name" : "sortkey",
205                        "xtype" : "PropertyExpression"
206                       }
207                      ],
208                      "xtype" : "StringSorter"
209                     }
210                    ],
211                    "xtype" : "SortListModel"
212                   },
213                   {
214                    "$ xns" : "Gtk",
215                    "* prop" : "filter",
216                    "id" : "vapi_filter",
217                    "items" : [
218                     {
219                      "$ xns" : "Gtk",
220                      "* prop" : "expression",
221                      "GLib.Type this_type" : "typeof(Project.VapiSelection)",
222                      "string property_name" : "sortkey",
223                      "xtype" : "PropertyExpression"
224                     }
225                    ],
226                    "xtype" : "StringFilter"
227                   }
228                  ],
229                  "xtype" : "FilterListModel"
230                 }
231                ],
232                "xtype" : "NoSelection"
233               },
234               {
235                "$ xns" : "Gtk",
236                "* pack" : "append_column",
237                "bool expand" : true,
238                "items" : [
239                 {
240                  "$ xns" : "Gtk",
241                  "* prop" : "factory",
242                  "listeners" : {
243                   "bind" : [
244                    "(listitem) => {",
245                    " ",
246                    "\tvar lbl = (Gtk.Label)  ((Gtk.ListItem)listitem).get_child();",
247                    "\t   ",
248                    "\tvar item = (Project.VapiSelection)  ((Gtk.ListItem)listitem).get_item();",
249                    "",
250                    "\titem.bind_property(\"name\",",
251                    "                lbl, \"label\",",
252                    "           GLib.BindingFlags.SYNC_CREATE);",
253                    "",
254                    "\t  ",
255                    "}",
256                    ""
257                   ],
258                   "setup" : [
259                    "(item) => {",
260                    "\t//var j = (JsRender.JsRender) item;",
261                    "\tvar gi = (Gtk.ListItem)item;",
262                    "\t ",
263                    "\tvar lbl = new Gtk.Label(\"\");",
264                    "\tlbl.halign = Gtk.Align.START;",
265                    "\tgi.set_child(lbl);",
266                    "",
267                    "",
268                    "",
269                    "}",
270                    ""
271                   ]
272                  },
273                  "xtype" : "SignalListItemFactory"
274                 }
275                ],
276                "string title" : "Vapi Package",
277                "xtype" : "ColumnViewColumn"
278               },
279               {
280                "$ xns" : "Gtk",
281                "* pack" : "append_column",
282                "items" : [
283                 {
284                  "$ xns" : "Gtk",
285                  "* prop" : "factory",
286                  "listeners" : {
287                   "bind" : [
288                    "(listitem) => {",
289                    "\t //GLib.debug(\"listitme is is %s\", ((Gtk.ListItem)listitem).get_type().name());",
290                    "\t",
291                    "\t",
292                    "\t",
293                    "\t//var expand = (Gtk.TreeExpander) ((Gtk.ListItem)listitem).get_child();",
294                    "\tvar btn = (Gtk.CheckButton)  ((Gtk.ListItem)listitem).get_child();",
295                    "\t  ",
296                    " ",
297                    "\tvar vs = (Project.VapiSelection)((Gtk.ListItem)listitem).get_item();",
298                    "",
299                    "\t//GLib.debug(\"change  %s to %s\", lbl.label, np.name);",
300                    "",
301                    "\tbtn.active = vs.selected; ",
302                    "\t",
303                    "\tvs.btn = btn;",
304                    " \t// bind image...",
305                    " \t",
306                    "}"
307                   ],
308                   "setup" : [
309                    "",
310                    "(listitem) => {",
311                    "",
312                    "\tvar btn = new Gtk.CheckButton();",
313                    " ",
314                    "\t((Gtk.ListItem)listitem).set_child(btn);",
315                    "\t",
316                    "\tbtn.toggled.connect(() =>  {",
317                    "\t ",
318                    "\t\tvar jr = (Project.VapiSelection) ((Gtk.ListItem)listitem).get_item();",
319                    "\t\tjr.selected = btn.active;",
320                    "\t});",
321                    "}",
322                    ""
323                   ]
324                  },
325                  "xtype" : "SignalListItemFactory"
326                 }
327                ],
328                "string title" : "use",
329                "xtype" : "ColumnViewColumn"
330               }
331              ],
332              "xtype" : "ColumnView"
333             }
334            ],
335            "xtype" : "ScrolledWindow"
336           },
337           {
338            "$ xns" : "Gtk",
339            "id" : "vapi_search",
340            "listeners" : {
341             "search_changed" : [
342              "( ) => {",
343              "",
344              " _this.vapi_filter.el.set_search(this.el.get_text());",
345              " ",
346              "}",
347              ""
348             ]
349            },
350            "string placeholder_text" : "Search Libraries (Vapi)",
351            "uint search_delay" : 500,
352            "xtype" : "SearchEntry"
353           }
354          ],
355          "xtype" : "Box"
356         },
357         {
358          "$ xns" : "Gtk",
359          "* pack" : "append_page,_this.label_targets.el",
360          "Gtk.Orientation orientation" : "Gtk.Orientation.HORIZONTAL",
361          "bool vexpand" : true,
362          "gint position" : 300,
363          "items" : [
364           {
365            "$ xns" : "Gtk",
366            "* pack" : "set_end_child",
367            "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL",
368            "gboolean homogeneous" : false,
369            "id" : "set_vbox",
370            "items" : [
371             {
372              "$ xns" : "Gtk",
373              "bool vexpand" : true,
374              "items" : [
375               {
376                "$ xns" : "Gtk",
377                "* prop" : "child",
378                "id" : "treeview",
379                "items" : [
380                 {
381                  "$ xns" : "Gtk",
382                  "* prop" : "model",
383                  "id" : "treeselmodel",
384                  "items" : [
385                   {
386                    "$ xns" : "Gtk",
387                    "* prop" : "model",
388                    "items" : [
389                     {
390                      "$ xns" : "Gtk",
391                      "* init" : [
392                       "{",
393                       "\t//this.el.set_sorter(new Gtk.TreeListRowSorter(_this.treeview.el.sorter));",
394                       "}",
395                       ""
396                      ],
397                      "* prop" : "model",
398                      "id" : "treelistsort",
399                      "items" : [
400                       {
401                        "$ xns" : "Gtk",
402                        "* prop" : "model",
403                        "Gtk.TreeListModelCreateModelFunc create_func" : [
404                         "(item) => {",
405                         "\t//GLib.debug(\"liststore got %s\", item.get_type().name());",
406                         "\treturn ((JsRender.JsRender)item).childfiles;",
407                         "} "
408                        ],
409                        "bool autoexpand" : true,
410                        "bool passthrough" : false,
411                        "id" : "treelistmodel",
412                        "items" : [
413                         {
414                          "$ xns" : "GLib",
415                          "* prop" : "root",
416                          "GLib.Type item_type" : "typeof(JsRender.JsRender)",
417                          "id" : "treemodel",
418                          "xtype" : "ListStore"
419                         }
420                        ],
421                        "xtype" : "TreeListModel"
422                       },
423                       {
424                        "$ xns" : "Gtk",
425                        "* prop" : "sorter",
426                        "items" : [
427                         {
428                          "$ xns" : "Gtk",
429                          "* prop" : "sorter",
430                          "items" : [
431                           {
432                            "$ xns" : "Gtk",
433                            "* prop" : "expression",
434                            "GLib.Type this_type" : "typeof(JsRender.JsRender)",
435                            "string property_name" : "name",
436                            "xtype" : "PropertyExpression"
437                           }
438                          ],
439                          "xtype" : "StringSorter"
440                         }
441                        ],
442                        "xtype" : "TreeListRowSorter"
443                       }
444                      ],
445                      "xtype" : "SortListModel"
446                     },
447                     {
448                      "$ xns" : "Gtk",
449                      "* prop" : "filter",
450                      "Gtk.CustomFilterFunc match_func" : [
451                       "(item) => { ",
452                       "\t",
453                       "\tvar tr = ((Gtk.TreeListRow)item).get_item();",
454                       "\t//GLib.debug(\"filter %s\", tr.get_type().name());",
455                       "\tvar j =  (JsRender.JsRender) tr;",
456                       "\tif (j.xtype == \"Gtk\") {",
457                       "\t\treturn true;",
458                       "\t}",
459                       "\tif (j.xtype != \"Dir\") {",
460                       "\t\treturn j.path.has_suffix(\".vala\") ||  j.path.has_suffix(\".c\");",
461                       "\t}",
462                       "\t// dirs..",
463                       "\t ",
464                       "\tfor (var i =0 ; i < j.childfiles.n_items; i++) {",
465                       "\t\tvar f = (JsRender.JsRender) j.childfiles.get_item(i);",
466                       "\t\tif (f.xtype == \"Gtk\") {",
467                       "\t\t\treturn true;",
468                       "\t\t}",
469                       "\t\tif (f.path.has_suffix(\".vala\") ||  f.path.has_suffix(\".c\")) {",
470                       "\t\t\treturn true;",
471                       "\t\t}",
472                       "\t}",
473                       "\treturn false;",
474                       "",
475                       "}"
476                      ],
477                      "xtype" : "CustomFilter"
478                     }
479                    ],
480                    "xtype" : "FilterListModel"
481                   }
482                  ],
483                  "xtype" : "SingleSelection"
484                 },
485                 {
486                  "$ xns" : "Gtk",
487                  "* init" : [
488                   "{",
489                   "\t this.el.set_sorter(  new Gtk.StringSorter(",
490                   "\t \tnew Gtk.PropertyExpression(typeof(JsRender.JsRender), null, \"name\")",
491                   " \t));",
492                   "\t\t;",
493                   "\t\t",
494                   "}",
495                   ""
496                  ],
497                  "* pack" : "append_column",
498                  "bool expand" : true,
499                  "bool resizable" : true,
500                  "id" : "name",
501                  "items" : [
502                   {
503                    "$ xns" : "Gtk",
504                    "* prop" : "factory",
505                    "listeners" : {
506                     "bind" : [
507                      "(listitem) => {",
508                      "\t //GLib.debug(\"listitme is is %s\", ((Gtk.ListItem)listitem).get_type().name());",
509                      "\t",
510                      "\t",
511                      "\t",
512                      "\t//var expand = (Gtk.TreeExpander) ((Gtk.ListItem)listitem).get_child();",
513                      "\tvar expand = (Gtk.TreeExpander)  ((Gtk.ListItem)listitem).get_child();",
514                      "\t  ",
515                      " ",
516                      "\tvar lbl = (Gtk.Label) expand.child;",
517                      "\t",
518                      "\t if (lbl.label != \"\") { // do not update",
519                      "\t \treturn;",
520                      " \t}",
521                      "\t",
522                      "",
523                      "\tvar lr = (Gtk.TreeListRow)((Gtk.ListItem)listitem).get_item();",
524                      "\tvar jr = (JsRender.JsRender) lr.get_item();",
525                      "\t//GLib.debug(\"change  %s to %s\", lbl.label, np.name);",
526                      "\tlbl.label = jr.name; // for dir's we could hsow the sub path..",
527                      "\tlbl.tooltip_markup = jr.path;",
528                      "\t ",
529                      "    expand.set_hide_expander(  jr.childfiles.n_items < 1);",
530                      " \texpand.set_list_row(lr);",
531                      " ",
532                      "  \texpand.set_hide_expander(  jr.xtype != \"Dir\" );",
533                      " \t expand.set_list_row(lr);",
534                      " ",
535                      " \t// bind image...",
536                      " \t",
537                      "}",
538                      ""
539                     ],
540                     "setup" : [
541                      "(listitem) => {",
542                      "\t",
543                      "\tvar expand = new Gtk.TreeExpander();",
544                      "\t ",
545                      "\texpand.set_indent_for_depth(true);",
546                      "\texpand.set_indent_for_icon(true);",
547                      "\t ",
548                      "\tvar lbl = new Gtk.Label(\"\");",
549                      "\tlbl.use_markup = true;",
550                      "\t",
551                      "\t",
552                      " \tlbl.justify = Gtk.Justification.LEFT;",
553                      " \tlbl.xalign = 0;",
554                      "",
555                      " ",
556                      "\texpand.set_child(lbl);",
557                      "\t((Gtk.ListItem)listitem).set_child(expand);",
558                      "\t((Gtk.ListItem)listitem).activatable = false;",
559                      "}",
560                      ""
561                     ]
562                    },
563                    "xtype" : "SignalListItemFactory"
564                   }
565                  ],
566                  "string title" : "Other Files",
567                  "xtype" : "ColumnViewColumn"
568                 },
569                 {
570                  "$ xns" : "Gtk",
571                  "* pack" : "append_column",
572                  "items" : [
573                   {
574                    "$ xns" : "Gtk",
575                    "* prop" : "factory",
576                    "listeners" : {
577                     "bind" : [
578                      "(listitem) => {",
579                      "\t //GLib.debug(\"listitme is is %s\", ((Gtk.ListItem)listitem).get_type().name());",
580                      "\t",
581                      "\t",
582                      "\t",
583                      "\t//var expand = (Gtk.TreeExpander) ((Gtk.ListItem)listitem).get_child();",
584                      "\tvar btn = (Gtk.CheckButton)  ((Gtk.ListItem)listitem).get_child();",
585                      "\t  ",
586                      " ",
587                      "\tvar lr = (Gtk.TreeListRow)((Gtk.ListItem)listitem).get_item();",
588                      "\tvar jr = (JsRender.JsRender) lr.get_item();",
589                      "\t//GLib.debug(\"change  %s to %s\", lbl.label, np.name);",
590                      "",
591                      "\t//btn.active = jr.compile_group_selected;",
592                      "\tbtn.active = _this.selected_target.has_file(jr);",
593                      "\t",
594                      " \t//jr.bind_property(\"compile_group_selected\",",
595                      "    //                btn, \"active\",",
596                      "    //               GLib.BindingFlags.BIDIRECTIONAL); ",
597                      " \t// bind image...",
598                      " \t",
599                      "}"
600                     ],
601                     "setup" : [
602                      "(listitem) => {",
603                      "",
604                      "\tvar btn = new Gtk.CheckButton();",
605                      " ",
606                      "\t((Gtk.ListItem)listitem).set_child(btn);",
607                      "\t",
608                      "\tbtn.toggled.connect(() =>  {",
609                      "\t \tif (_this.cg_loading) {",
610                      "\t \t\treturn;",
611                      " \t\t}",
612                      "\t\tvar lr = (Gtk.TreeListRow)((Gtk.ListItem)listitem).get_item();",
613                      "\t\tvar jr = (JsRender.JsRender) lr.get_item();",
614                      "\t\tjr.compile_group_selected = btn.active;",
615                      "\t\t",
616                      "\t\t",
617                      "\t});",
618                      "}",
619                      ""
620                     ]
621                    },
622                    "xtype" : "SignalListItemFactory"
623                   }
624                  ],
625                  "string title" : "use",
626                  "xtype" : "ColumnViewColumn"
627                 }
628                ],
629                "xtype" : "ColumnView"
630               }
631              ],
632              "xtype" : "ScrolledWindow"
633             }
634            ],
635            "xtype" : "Box"
636           },
637           {
638            "$ xns" : "Gtk",
639            "* prop" : "start_child",
640            "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL",
641            "int spacing" : 0,
642            "items" : [
643             {
644              "$ xns" : "Gtk",
645              "Gtk.Orientation orientation" : "Gtk.Orientation.HORIZONTAL",
646              "bool hexpand" : true,
647              "int spacing" : 0,
648              "items" : [
649               {
650                "$ xns" : "Gtk",
651                "bool hexpand" : true,
652                "listeners" : {
653                 "clicked" : [
654                  "()  => {",
655                  "    ",
656                  "       if (_this.project.compilegroups.has_key(\"NEW GROUP\")) {",
657                  "        return;",
658                  "    }",
659                  "    var cg = new Project.GtkValaSettings(_this.project, \"NEW GROUP\");",
660                  "    _this.project.compilegroups.set(cg.name, cg);",
661                  "     _this.project.loadTargetsIntoStore(_this.target_model.el);",
662                  "     //  select it.. ?? should load it??",
663                  "     for(var i =0;i < _this.target_model.el.n_items; i++) {",
664                  "     \tvar ncg = (Project.GtkValaSettings) _this.target_model.el.get_item(i);",
665                  "     \tif (ncg.name == cg.name) {",
666                  "     \t\t_this.target_sel.el.selected = i;",
667                  "     \t\t_this.target_sel.selectTarget(cg);",
668                  "     \t\tbreak;",
669                  " \t\t}",
670                  "\t} ",
671                  "\t",
672                  "\t",
673                  "\t ",
674                  "}"
675                 ]
676                },
677                "utf8 label" : "Add Compile Target",
678                "xtype" : "Button"
679               },
680               {
681                "$ xns" : "Gtk",
682                "bool hexpand" : true,
683                "listeners" : {
684                 "clicked" : [
685                  "()  => {",
686                  "    // load the new values.",
687                  "\tif (_this.target_sel.el.selected == Gtk.INVALID_LIST_POSITION) {",
688                  "\t\tGLib.debug(\"nothing selected\");",
689                  "\t\treturn;",
690                  "\t}",
691                  "\t",
692                  "\t ",
693                  "\t// add the directory..",
694                  "\tvar cg = (Project.GtkValaSettings) _this.target_model.el.get_item(_this.target_sel.el.selected);",
695                  "\t ",
696                  "\t ",
697                  "\tGLib.debug(\"remove: %s\\n\", cg.name);",
698                  "\tif (!_this.project.compilegroups.unset(cg.name)) {",
699                  "\t\tGLib.debug(\"remove failed\");",
700                  "\t}",
701                  " \t_this.project.loadTargetsIntoStore(_this.target_model.el);",
702                  "}"
703                 ]
704                },
705                "utf8 label" : "Remove Target",
706                "xtype" : "Button"
707               }
708              ],
709              "xtype" : "Box"
710             },
711             {
712              "$ xns" : "Gtk",
713              "* init" : [
714               "{  ",
715               "this.el.set_policy (Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);",
716               "",
717               "}",
718               ""
719              ],
720              "bool vexpand" : true,
721              "items" : [
722               {
723                "$ xns" : "Gtk",
724                "* prop" : "child",
725                "items" : [
726                 {
727                  "$ xns" : "Gtk",
728                  "* prop" : "model",
729                  "id" : "target_sel",
730                  "items" : [
731                   {
732                    "$ xns" : "GLib",
733                    "* prop" : "model",
734                    "GLib.Type item_type" : "typeof(Project.GtkValaSettings)",
735                    "id" : "target_model",
736                    "xtype" : "ListStore"
737                   }
738                  ],
739                  "listeners" : {
740                   "selection_changed" : [
741                    "(position, n_items) => {",
742                    "",
743                    "\t ",
744                    "\t// load the new values.",
745                    "\tif (this.el.selected == Gtk.INVALID_LIST_POSITION) {",
746                    "\t\tthis.selectTarget(null);",
747                    "\t\treturn;",
748                    "\t}",
749                    "\tthis.selectTarget(null);",
750                    "\t",
751                    " ",
752                    "",
753                    "\t// add the directory..",
754                    "\tvar cg = (Project.GtkValaSettings) _this.target_model.el.get_item(this.el.selected);",
755                    "\t",
756                    "\tthis.selectTarget(cg);",
757                    "   ",
758                    "}",
759                    ""
760                   ]
761                  },
762                  "xtype" : "SingleSelection",
763                  "| void selectTarget" : [
764                   "(Project.GtkValaSettings? cg) {",
765                   "// load the new values",
766                   "\t _this.selected_target = cg;  ",
767                   "\t _this.project.active_cg = cg;",
768                   "\t ",
769                   "",
770                   "\tif (cg == null) {",
771                   "\t\t ",
772                   "\t\t_this.set_vbox.el.hide();\t",
773                   "\t\t_this.set_vboxb.el.hide();\t",
774                   "\t\treturn;",
775                   "\t}",
776                   "\t",
777                   "\t",
778                   "\t_this.set_vbox.el.show();",
779                   "\t_this.set_vboxb.el.show();",
780                   "\t// add the directory..",
781                   " ",
782                   "\t ",
783                   "\t GLib.debug(\"loading dirs into project list\");",
784                   "\t cg.loading_ui = true;",
785                   "\t _this.cg_loading = true;",
786                   "",
787                   "\t  _this.treeview.el.set_model(new Gtk.SingleSelection(null));",
788                   "\t  _this.project.loadDirsIntoStore(_this.treemodel.el);",
789                   " \t  _this.treeview.el.set_model(_this.treeselmodel.el);",
790                   "\t  ",
791                   "\t cg.loading_ui = false;",
792                   "\t ",
793                   "\t _this.cg_loading = false;",
794                   "\t GLib.debug(\"Set name to %s\", cg.name);",
795                   "\t ",
796                   " \t_this.build_name.el.buffer.set_text(cg.name.data);",
797                   " \t_this.build_as_library.el.active = cg.is_library;",
798                   " ",
799                   "\t_this.build_execute_args.el.buffer.set_text(  cg.execute_args.data );",
800                   " ",
801                   "}",
802                   ""
803                  ]
804                 },
805                 {
806                  "$ xns" : "Gtk",
807                  "* pack" : "append_column",
808                  "bool expand" : true,
809                  "items" : [
810                   {
811                    "$ xns" : "Gtk",
812                    "* prop" : "factory",
813                    "listeners" : {
814                     "bind" : [
815                      "(listitem) => {",
816                      " ",
817                      "\tvar lbl = (Gtk.Label)  ((Gtk.ListItem)listitem).get_child();",
818                      "\t   ",
819                      "\tvar item = (Project.GtkValaSettings)  ((Gtk.ListItem)listitem).get_item();",
820                      "",
821                      "\titem.bind_property(\"name\",",
822                      "                lbl, \"label\",",
823                      "           GLib.BindingFlags.SYNC_CREATE);",
824                      "",
825                      "\t  ",
826                      "}",
827                      ""
828                     ],
829                     "setup" : [
830                      "(item) => {",
831                      "\t//var j = (JsRender.JsRender) item;",
832                      "\tvar gi = (Gtk.ListItem)item;",
833                      "\t ",
834                      "\tvar lbl = new Gtk.Label(\"\");",
835                      "\tlbl.halign = Gtk.Align.START;",
836                      "\tgi.set_child(lbl);",
837                      "",
838                      "",
839                      "",
840                      "}",
841                      ""
842                     ]
843                    },
844                    "xtype" : "SignalListItemFactory"
845                   }
846                  ],
847                  "string title" : "Build Target",
848                  "xtype" : "ColumnViewColumn"
849                 }
850                ],
851                "xtype" : "ColumnView"
852               }
853              ],
854              "xtype" : "ScrolledWindow"
855             },
856             {
857              "$ xns" : "Gtk",
858              "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL",
859              "id" : "set_vboxb",
860              "int spacing" : 0,
861              "items" : [
862               {
863                "$ xns" : "Gtk",
864                "utf8 label" : "Build Name (executable name)",
865                "xtype" : "Label"
866               },
867               {
868                "# bool in_insert" : false,
869                "$ xns" : "Gtk",
870                "* init" : [
871                 "",
872                 "var ed = (this.el.get_delegate() as Gtk.Editable);",
873                 "if (ed != null) {",
874                 "\ted.insert_text.connect((text, length, ref position) => {",
875                 "\t\tif (this.in_insert) {",
876                 "\t\t\treturn;",
877                 "\t\t}",
878                 "\t\tGLib.debug(\"got insert text %s\", text);",
879                 "\t\t",
880                 "\t\tvar nt = \"\";",
881                 "\t\tfor(var i = 0;i < text.length; i++){ ",
882                 "\t\t\tif (Posix.isupper(text[i]) ||Posix.islower(text[i])  ) {",
883                 "\t\t\t\tnt +=  text[i].to_string();",
884                 "\t\t\t}\t",
885                 "\t\t}",
886                 "\t\tif (nt.length < 1) {",
887                 "\t\t\tGLib.Signal.stop_emission_by_name(ed, \"insert_text\");",
888                 "\t\t\treturn;",
889                 "\t\t}",
890                 "",
891                 "\t\tthis.in_insert = true;",
892                 "\t ",
893                 "\t\tthis.el.insert_text(nt,nt.length, ref position);",
894                 "\t\tthis.in_insert = false;",
895                 "\t\tGLib.Signal.stop_emission_by_name(ed, \"insert_text\");",
896                 "\t});",
897                 "",
898                 "}"
899                ],
900                "id" : "build_name",
901                "listeners" : {
902                 "changed" : [
903                  "()  => {",
904                  "\tif (_this.selected_target == null) {",
905                  "\t\treturn;",
906                  "\t}",
907                  "\tvar name = this.el.text;",
908                  "\t// name ischanging.. probably always..",
909                  "\tif (_this.selected_target.name != name) {",
910                  "\t\t_this.project.compilegroups.unset(_this.selected_target.name);",
911                  "\t\t_this.project.compilegroups.set(name, _this.selected_target);",
912                  "\t}",
913                  "",
914                  "\t_this.selected_target.name = this.el.buffer.text;",
915                  "}"
916                 ],
917                 "insert_text" : [
918                  "(text, length, ref position) => {",
919                  "\tif (this.in_insert) {",
920                  "\t\treturn;",
921                  "\t}",
922                  "\tGLib.debug(\"got insert text %s\", text);",
923                  "\t",
924                  "\tvar nt = \"\";",
925                  "\tfor(var i = 0;i < text.length; i++){ ",
926                  "\t\tif (Posix.isalpha(text[i])) {",
927                  "\t\t\tnt +=  text[i].to_string();",
928                  "\t\t}\t",
929                  "\t}",
930                  "\tif (nt.length < 1) {",
931                  "\t\treturn;",
932                  "\t}",
933                  "",
934                  "\tthis.in_insert = true;",
935                  " ",
936                  "\tthis.el.insert_text(text,length, ref position);",
937                  "\tthis.in_insert = false;",
938                  "}",
939                  ""
940                 ]
941                },
942                "xtype" : "Entry"
943               },
944               {
945                "$ xns" : "Gtk",
946                "utf8 label" : "test argments - when run after a build",
947                "xtype" : "Label"
948               },
949               {
950                "$ xns" : "Gtk",
951                "id" : "build_execute_args",
952                "listeners" : {
953                 "changed" : [
954                  "() => {",
955                  "    if (_this.selected_target == null) {",
956                  "        return;",
957                  "    }",
958                  "    _this.selected_target.execute_args = this.el.buffer.text;",
959                  "    ",
960                  "}"
961                 ]
962                },
963                "string placeholder_text" : "eg.  -f somefile -g ",
964                "xtype" : "Entry"
965               },
966               {
967                "$ xns" : "Gtk",
968                "id" : "build_as_library",
969                "listeners" : {
970                 "notify[\"active\"]" : [
971                  "() => {",
972                  "    if (_this.selected_target == null) {",
973                  "        return;",
974                  "    }",
975                  "    _this.selected_target.is_library = this.el.active;",
976                  "    ",
977                  "}",
978                  ""
979                 ]
980                },
981                "string label" : "build as library",
982                "xtype" : "CheckButton"
983               }
984              ],
985              "xtype" : "Box"
986             }
987            ],
988            "xtype" : "Box"
989           }
990          ],
991          "xtype" : "Paned"
992         }
993        ],
994        "xtype" : "Notebook"
995       },
996       {
997        "$ Gtk.Orientation orientation" : "Gtk.Orientation.HORIZONTAL",
998        "$ xns" : "Gtk",
999        "bool hexpand" : true,
1000        "int margin_bottom" : 4,
1001        "int margin_end" : 4,
1002        "int margin_start" : 4,
1003        "int margin_top" : 4,
1004        "items" : [
1005         {
1006          "$ xns" : "Gtk",
1007          "listeners" : {
1008           "clicked" : [
1009            "() => { ",
1010            "",
1011            "  _this.done = true;",
1012            "    _this.el.hide(); ",
1013            "}"
1014           ]
1015          },
1016          "string label" : "Cancel",
1017          "xtype" : "Button"
1018         },
1019         {
1020          "$ xns" : "Gtk",
1021          "bool hexpand" : true,
1022          "string label" : "",
1023          "xtype" : "Label"
1024         },
1025         {
1026          "$ xns" : "Gtk",
1027          "css_classes" : "{ \"suggested-action\" }",
1028          "id" : "save_btn",
1029          "listeners" : {
1030           "clicked" : [
1031            "( ) =>  { ",
1032            "",
1033            " ",
1034            "_this.project.save(); ",
1035            " ",
1036            "\t// what about .js ?",
1037            "_this.done = true;",
1038            "_this.el.hide();",
1039            "if (_this.doneObj != null) {",
1040            "\t_this.doneObj.call(_this.project);",
1041            "}",
1042            " ",
1043            "   ",
1044            "}"
1045           ]
1046          },
1047          "string label" : "Save",
1048          "xtype" : "Button"
1049         }
1050        ],
1051        "xtype" : "Box"
1052       }
1053      ],
1054      "xtype" : "Box"
1055     }
1056    ],
1057    "listeners" : {
1058     "close_request" : [
1059      "( ) => {",
1060      "\tif (!this.done) {",
1061      "\t\treturn true;",
1062      "\t}",
1063      "\treturn false;",
1064      "\t",
1065      "}",
1066      ""
1067     ],
1068     "hide" : [
1069      "() => {",
1070      "\t  if (!this.done) {",
1071      "    _this.el.show();",
1072      "  }",
1073      "}"
1074     ]
1075    },
1076    "uint border_width" : 0,
1077    "xtype" : "Window",
1078    "| void save" : [
1079     "()  {",
1080     "    this.project.save(); ",
1081     "}"
1082    ],
1083    "| void show" : [
1084     "(Gtk.Window pwin, Project.Gtk project, Project.Callback? doneObj) {",
1085     "     ",
1086     "    //print(\"ValaProjectSettings show\\n\");",
1087     "    this.doneObj = doneObj;",
1088     "    this.project=  project;",
1089     "\t ",
1090     "    this.compile_flags.el.buffer.set_text(",
1091     "    \tproject.compile_flags.data",
1092     "\t);",
1093     "   this.version.el.buffer.set_text(",
1094     "    \tproject.version.data",
1095     "\t);",
1096     "\t  this.licence.el.buffer.set_text(",
1097     "    \tproject.licence.data",
1098     "\t); ",
1099     "    project.loadVapiIntoStore(_this.vapimodel.el);",
1100     "     GLib.Timeout.add(500, () => {",
1101     " \t\t this.vapi_scroll.el.vadjustment.value  = 0;\t ",
1102     "\t     return false;",
1103     "     });",
1104     "    ",
1105     "   this.generate_meson.el.active = this.project.generate_meson;",
1106     " \t",
1107     " \tproject.loadTargetsIntoStore(this.target_model.el);",
1108     "\t",
1109     " \t_this.target_sel.el.selected = Gtk.INVALID_LIST_POSITION;",
1110     "\t_this.target_sel.selectTarget(null);",
1111     "//\tGtk.Allocation rect;",
1112     "\t//btn.get_allocation(out rect);",
1113     " //   this.el.set_pointing_to(rect);",
1114     " this.el.application = pwin.application; // ??? make it modal?",
1115     "\t this.el.set_transient_for(pwin);",
1116     "\t ",
1117     "\t// window + header?",
1118     "\t// print(\"SHOWALL - POPIP\\n\");",
1119     "\tthis.el.set_size_request(800,800);",
1120     "\tthis.el.show();",
1121     "\tthis.notebook.el.page = 0; // first page.",
1122     "\t",
1123     "\t//this.view.el.grab_focus();",
1124     "",
1125     "}",
1126     ""
1127    ]
1128   }
1129  ],
1130  "name" : "ValaProjectSettingsPopover"
1131 }