Fix #7250 - better handling of adding properties
[roobuilder] / src / Builder4 / DialogTemplateSelect.bjs
1 {
2  "build_module" : "builder",
3  "items" : [
4   {
5    "$ modal" : true,
6    "$ xns" : "Gtk",
7    "default_height" : 200,
8    "default_width" : 400,
9    "items" : [
10     {
11      "$ pack" : "get_content_area().add ",
12      "$ xns" : "Gtk",
13      "Gtk.Orientation orientation" : "Gtk.Orientation.VERTICAL",
14      "items" : [
15       {
16        "$ xns" : "Gtk",
17        "* pack" : "pack_start,false,false,0",
18        "Gtk.Orientation orientation" : "Gtk.Orientation.HORIZONTAL",
19        "gint margin" : 3,
20        "items" : [
21         {
22          "$ xns" : "Gtk",
23          "* pack" : "pack_start,false,false",
24          "label" : "Select Template : ",
25          "xtype" : "Label"
26         },
27         {
28          "$ xns" : "Gtk",
29          "* init" : "this.el.add_attribute(_this.cellrenderer.el , \"markup\", 1 );",
30          "* pack" : "add",
31          "id" : "combo",
32          "items" : [
33           {
34            "$ xns" : "Gtk",
35            "* pack" : "pack_start,true",
36            "id" : "cellrenderer",
37            "xtype" : "CellRendererText"
38           },
39           {
40            "$ columns" : "typeof(string),typeof(string)",
41            "$ xns" : "Gtk",
42            "* pack" : "set_model",
43            "id" : "model",
44            "n_columns" : 2,
45            "xtype" : "ListStore",
46            "| void loadData" : [
47             "  (GLib.List<string> data) {",
48             "    this.el.clear();                                    ",
49             "    Gtk.TreeIter iter;",
50             "    var el = this.el;",
51             "    ",
52             "   /// el.append(out iter);",
53             "    ",
54             "     ",
55             "   // el.set_value(iter, 0, \"\");",
56             "   // el.set_value(iter, 1, \"aaa  - Just add Element - aaa\");",
57             "    ",
58             "    for (var i = 0; i < data.length();i++) {",
59             "    ",
60             "",
61             "        el.append(out iter);",
62             "        var str = data.nth_data(i);",
63             "        var fn = Path.get_basename (str);",
64             "        fn.replace(\".json\", \"\");",
65             "        ",
66             "        el.set_value(iter, 0, str);",
67             "        el.set_value(iter, 1, fn);",
68             "        ",
69             "    }",
70             "    this.el.set_sort_column_id(1, Gtk.SortType.ASCENDING);          ",
71             "                                     ",
72             "}",
73             ""
74            ]
75           }
76          ],
77          "xtype" : "ComboBox"
78         }
79        ],
80        "xtype" : "Box"
81       },
82       {
83        "$ xns" : "Gtk",
84        "* pack" : "pack_start,false,false,0",
85        "Gtk.Orientation orientation" : "Gtk.Orientation.HORIZONTAL",
86        "gint margin" : 3,
87        "items" : [
88         {
89          "$ xns" : "Gtk",
90          "* pack" : "pack_start,false,false",
91          "label" : "Select Database Table : ",
92          "xtype" : "Label"
93         },
94         {
95          "$ xns" : "Gtk",
96          "* init" : "this.el.add_attribute(_this.dbcellrenderer.el , \"markup\", 1 );",
97          "* pack" : "add",
98          "id" : "dbcombo",
99          "items" : [
100           {
101            "$ xns" : "Gtk",
102            "* pack" : "pack_start,true",
103            "id" : "dbcellrenderer",
104            "xtype" : "CellRendererText"
105           },
106           {
107            "$ columns" : "typeof(string),typeof(string)",
108            "$ xns" : "Gtk",
109            "* pack" : "set_model",
110            "id" : "dbmodel",
111            "n_columns" : 2,
112            "xtype" : "ListStore",
113            "| void loadData" : [
114             "  (Gee.ArrayList<string> data) {",
115             "    this.el.clear();                                    ",
116             "    Gtk.TreeIter iter;",
117             "    var el = this.el;",
118             "    ",
119             "   /// el.append(out iter);",
120             "    ",
121             "     ",
122             "   // el.set_value(iter, 0, \"\");",
123             "   // el.set_value(iter, 1, \"aaa  - Just add Element - aaa\");",
124             "",
125             "    el.append(out iter);",
126             "",
127             "    ",
128             "    el.set_value(iter, 0, \"\");",
129             "    el.set_value(iter, 1, \"-- select a table --\");",
130             "    ",
131             "    ",
132             "    for (var i = 0; i < data.size;i++) {",
133             "    ",
134             "",
135             "        el.append(out iter);",
136             "        ",
137             "        el.set_value(iter, 0, data.get(i));",
138             "        el.set_value(iter, 1, data.get(i));",
139             "        ",
140             "    }",
141             "     this.el.set_sort_column_id(0, Gtk.SortType.ASCENDING);          ",
142             "                                     ",
143             "}",
144             ""
145            ]
146           }
147          ],
148          "xtype" : "ComboBox"
149         }
150        ],
151        "xtype" : "Box"
152       }
153      ],
154      "xtype" : "Box"
155     },
156     {
157      "$ xns" : "Gtk",
158      "* pack" : "add_action_widget,0",
159      "label" : "Cancel",
160      "xtype" : "Button"
161     },
162     {
163      "$ xns" : "Gtk",
164      "* pack" : "add_action_widget,1",
165      "label" : "Just add it",
166      "xtype" : "Button"
167     },
168     {
169      "$ xns" : "Gtk",
170      "* pack" : "add_action_widget,2",
171      "label" : "OK",
172      "xtype" : "Button"
173     }
174    ],
175    "listeners" : {
176     "delete_event" : [
177      "  (self, event)  =>{",
178      "    this.el.hide();",
179      "    return true;",
180      "}"
181     ]
182    },
183    "title" : "Add an Object",
184    "xtype" : "Dialog",
185    "| JsRender.Node? show" : [
186     " (Xcls_MainWindow mwindow, Palete.Palete pal, JsRender.Node node, Project.Project project) {",
187     "    ",
188     "    this.el.show_all();",
189     "    var opts = pal.listTemplates(node);",
190     "    if (opts.length() < 1) {",
191     "        this.el.hide();",
192     "        return node;",
193     "    }",
194     "    this.el.set_attached_to( mwindow.el);",
195     "    this.el.set_transient_for( mwindow.el);",
196     "    ",
197     "    //opts.unshift({ path: '' , name :'Just add Element' });",
198     "     _this.model.loadData(opts);",
199     "     _this.combo.el.set_active(-1);",
200     "     ",
201     "     ",
202     "     var db =  new Palete.RooDatabase.from_project(project);",
203     "     _this.dbmodel.loadData(db.readTablesGee());",
204     "     ",
205     "     var plug = mwindow.windowstate.webkit_plugin;",
206     "     ",
207     "     _this.dbcombo.el.set_active(-1);",
208     "     ",
209     "     ",
210     "   ",
211     "    var res = this.el.run();",
212     "    this.el.hide();    ",
213     "    //var ix = _this.combo.el.get_active();",
214     "    if (res < 1 ) {",
215     "        return null; // 0 = cancel.",
216     "    }",
217     "    if (res < 2 ) {",
218     "        return node; // 1 = just add it..",
219     "    }",
220     "    ",
221     "    // have they selected a table??",
222     "    ",
223     "   Gtk.TreeIter iter; ",
224     "    Value vfname;   ",
225     "    if (_this.dbcombo.el.get_active_iter (out iter)) {    ",
226     "         this.dbmodel.el.get_value (iter, 0, out vfname);",
227     "         if (((string)vfname).length > 0 && plug.has_plugin(node.fqn())) {",
228     "            var json_str = plug.show(mwindow.el, project, node.fqn(), (string)vfname);",
229     "            print(\"json_str = %s\\n\", json_str);",
230     "            if (json_str.length < 1) {",
231     "",
232     "                return node;",
233     "            }",
234     "            var pa = new Json.Parser();",
235     "            try {",
236     "",
237     "\t        pa.load_from_data(json_str);",
238     "\t    } catch(Error e) {",
239     "\t        return node;",
240     "\t    }",
241     "\t    var new_node = pa.get_root();",
242     "    ",
243     "\t    if (new_node.get_node_type () != Json.NodeType.OBJECT) {",
244     "\t\t    return node;",
245     "\t    }",
246     "\t    var obj = new_node.get_object ();",
247     "",
248     "\t    var ret = new JsRender.Node();",
249     "",
250     "\t    ret.loadFromJson(obj, 1);",
251     "\t    return ret;",
252     "         }",
253     "        ",
254     "    }",
255     "",
256     "    if (!_this.combo.el.get_active_iter (out iter)) {",
257     "",
258     "        return node; // nothing selected...",
259     "    }",
260     "   ",
261     "    this.model.el.get_value (iter, 0, out vfname);",
262     "    ",
263     "    ",
264     "    return pal.loadTemplate((string)vfname);",
265     "",
266     "}",
267     ""
268    ]
269   }
270  ],
271  "modOrder" : "",
272  "name" : "DialogTemplateSelect",
273  "parent" : "",
274  "path" : "/home/alan/gitlive/roobuilder/src/Builder4/DialogTemplateSelect.bjs",
275  "permname" : "",
276  "title" : ""
277 }