src/Builder4/DialogPluginWebkit.bjs
[app.Builder.js] / src / Builder4 / DialogPluginWebkit.vala
1 static Xcls_DialogPluginWebkit  _DialogPluginWebkit;
2
3 public class Xcls_DialogPluginWebkit : Object 
4 {
5     public Gtk.Dialog el;
6     private Xcls_DialogPluginWebkit  _this;
7
8     public static Xcls_DialogPluginWebkit singleton()
9     {
10         if (_DialogPluginWebkit == null) {
11             _DialogPluginWebkit= new Xcls_DialogPluginWebkit();
12         }
13         return _DialogPluginWebkit;
14     }
15     public Xcls_webview webview;
16
17         // my vars (def)
18     public string tmpjs;
19
20     // ctor 
21     public Xcls_DialogPluginWebkit()
22     {
23         _this = this;
24         this.el = new Gtk.Dialog();
25
26         // my vars (dec)
27
28         // set gobject values
29         this.el.title = "Add / Edit Component";
30         this.el.default_height = 500;
31         this.el.default_width = 500;
32         this.el.deletable = true;
33         this.el.modal = true;
34         var child_0 = new Xcls_VBox2( _this );
35         child_0.ref();
36         this.el.get_content_area().add (  child_0.el  );
37         var child_1 = new Xcls_Button5( _this );
38         child_1.ref();
39         this.el.add_action_widget (  child_1.el , 3 );
40         var child_2 = new Xcls_Button6( _this );
41         child_2.ref();
42         this.el.add_action_widget (  child_2.el , 0 );
43         var child_3 = new Xcls_Button7( _this );
44         child_3.ref();
45         this.el.add_action_widget (  child_3.el , 1 );
46
47         // listeners 
48         this.el.delete_event.connect( (self, event) => {
49             this.el.hide();
50             return true; 
51             //test  
52         });
53     }
54
55     // user defined functions 
56     public boolean has_plugin (string cls) {
57     
58          return GLib.FileUtils.test(
59                 BuilderApplication.configDirectory() + "/resources/Editors/Editor." + cls + ".js",
60                 GLib.FileTest.IS_REGULAR
61           );
62         
63     
64     
65     }
66     public string show (Gtk.Window ?parent, string text) {// JsRender.Node node) {
67      
68         if (parent  != null) {
69             this.el.set_transient_for(parent);
70             this.el.modal = true;
71         }
72            var db = new JsRender.RooDatabase.from_cfg ("MySQL", "hydra", "root", "");
73          
74         
75          this.el.show_all();
76          var   ret = "";
77         while (true) {
78         
79             var runhtml = "<script type=\"text/javascript\">\n" ;
80             string builderhtml;
81             
82             
83             GLib.FileUtils.get_contents(BuilderApplication.configDirectory() + "/resources/roo.builder.js", out builderhtml);
84     
85             runhtml += builderhtml + "\n";
86             
87             
88                runhtml += "\n" +
89                 "Builder.saveHTML = function() {};\n" + 
90             "Roo.onReady(function() {\n" +
91     
92             "Roo.XComponent.build();\n" +
93             "});\n";
94         
95         
96             
97     
98             var ar = db.readForeignKeys("Person");
99             var  generator = new Json.Generator ();
100             var  root = new Json.Node(Json.NodeType.OBJECT);
101             root.init_object(ar);
102             generator.set_root (root);
103             
104             generator.pretty = true;
105             generator.indent = 4;
106             
107             runhtml += "\n" +
108             " Roo.XComponent.on('buildcomplete', function() {\n" +
109              "    Editor.Roo.grid.Grid.panel.loadData(" + generator.to_data (null) + "); " +
110             "});\n";
111     
112             
113         
114         
115     
116             runhtml += "</script>\n" ;
117     
118             print(runhtml);
119             // fix to make sure they are the same..
120             
121             // need to modify paths
122     
123             string inhtml;
124             
125             GLib.FileUtils.get_contents(
126                 BuilderApplication.configDirectory() + "/resources/roo.builder.html"
127                     , out inhtml);
128             
129             
130             // fetch the json from the database...
131             
132             //print(runhtml);
133             
134             var html = inhtml.replace("</head>", runhtml + // + this.runhtml + 
135                 "<script type=\"text/javascript\" src=\"xhttp://localhost/app.Builder.js/resources/Editors/Editor.Roo.grid.Grid.js\"></script>" + 
136           //      "<script type=\"text/javascript\" src=\"xhttp://localhost" + fc.fname + "\"></script>" +   
137                   //  "<script type=\"text/javascript\">\n" +
138                   //  js_src + "\n" + 
139                   //  "</script>" + 
140                             
141             "</head>");
142             //print("LOAD HTML " + html);
143             
144              //var rootURL = _this.file.project.rootURL;
145        
146             
147             
148             this.webview.el.load_html( html , 
149                 //fixme - should be a config option!
150                 "xhttp://localhost/app.Builder.js/"
151             );
152         
153             
154         
155        
156              var response_id = this.el.run();
157             
158              if (response_id == 1) { // OK...
159                  var loop = new MainLoop();
160                  this.webview.el.run_javascript.begin("Editor.Roo.grid.Grid.panel.toBJS();", null, (obj, res) => {
161       //              print("GOT END?");
162                          this.webview.el.run_javascript.end(res);
163     //                                    print("GOT DATA?");
164                         loop.quit();
165                     });
166                  loop.run();
167         //           print("LOOP END?");
168                  // try and get the resopse...
169                 break;
170              }
171             if (response_id < 1) {
172                 this.el.hide();
173                  return "";
174             }
175             // keep showing...?
176             continue;
177         }
178         
179         // now we save it..
180         this.el.hide();
181         
182         return ret;
183         
184         
185         
186     }
187     public class Xcls_VBox2 : Object 
188     {
189         public Gtk.VBox el;
190         private Xcls_DialogPluginWebkit  _this;
191
192
193             // my vars (def)
194
195         // ctor 
196         public Xcls_VBox2(Xcls_DialogPluginWebkit _owner )
197         {
198             _this = _owner;
199             this.el = new Gtk.VBox( false, 0 );
200
201             // my vars (dec)
202
203             // set gobject values
204             var child_0 = new Xcls_ScrolledWindow3( _this );
205             child_0.ref();
206             this.el.pack_start (  child_0.el , false,true,3 );
207         }
208
209         // user defined functions 
210     }
211     public class Xcls_ScrolledWindow3 : Object 
212     {
213         public Gtk.ScrolledWindow el;
214         private Xcls_DialogPluginWebkit  _this;
215
216
217             // my vars (def)
218
219         // ctor 
220         public Xcls_ScrolledWindow3(Xcls_DialogPluginWebkit _owner )
221         {
222             _this = _owner;
223             this.el = new Gtk.ScrolledWindow( null, null );
224
225             // my vars (dec)
226
227             // set gobject values
228             this.el.expand = true;
229             var child_0 = new Xcls_webview( _this );
230             child_0.ref();
231             this.el.add (  child_0.el  );
232
233             // init method 
234
235             this.el.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);
236         }
237
238         // user defined functions 
239     }
240     public class Xcls_webview : Object 
241     {
242         public WebKit.WebView el;
243         private Xcls_DialogPluginWebkit  _this;
244
245
246             // my vars (def)
247
248         // ctor 
249         public Xcls_webview(Xcls_DialogPluginWebkit _owner )
250         {
251             _this = _owner;
252             _this.webview = this;
253             this.el = new WebKit.WebView();
254
255             // my vars (dec)
256
257             // set gobject values
258
259             // init method 
260
261             {
262                 // this may not work!?
263                 var settings =  this.el.get_settings();
264                 settings.enable_write_console_messages_to_stdout = true;
265                  
266                 var fs= new FakeServer(this.el);
267                 fs.ref();
268                 // this was an attempt to change the url perms.. did not work..
269                 // settings.enable_file_access_from_file_uris = true;
270                 // settings.enable_offline_web_application_cache - true;
271                 // settings.enable_universal_access_from_file_uris = true;
272                
273                  
274                 
275                 
276                 
277             
278                  // FIXME - base url of script..
279                  // we need it so some of the database features work.
280                 this.el.load_html( "Render not ready" , 
281                         //fixme - should be a config option!
282                         // or should we catch stuff and fix it up..
283                         "xhttp://localhost/app.Builder/"
284                 );
285                     
286                     
287                 
288                 
289             }
290
291             // listeners 
292             this.el.script_dialog.connect( (dialog) => {
293                 if (this.el == null) {
294                     return true;
295                 }
296                 
297                  var msg = dialog.get_message();
298                  if (msg.length < 4) {
299                     return false;
300                  }
301                  if (msg.substring(0,4) != "IPC:") {
302                      return false;
303                  }
304                  var ar = msg.split(":", 3);
305                 if (ar.length < 3) {
306                     return false;
307                 }
308                 print("CMD: %s\n",ar[1]);
309                     print("ARGS: %s\n",ar[2]);
310                 switch(ar[1]) {
311                     case "SAVEHTML":
312                       print("%sw",ar[2]);
313                       //  _this.file.saveHTML(ar[2]);
314                         return true;
315                     default:
316                         return true;
317                 }
318                 
319             });
320         }
321
322         // user defined functions 
323     }
324     public class Xcls_Button5 : Object 
325     {
326         public Gtk.Button el;
327         private Xcls_DialogPluginWebkit  _this;
328
329
330             // my vars (def)
331
332         // ctor 
333         public Xcls_Button5(Xcls_DialogPluginWebkit _owner )
334         {
335             _this = _owner;
336             this.el = new Gtk.Button();
337
338             // my vars (dec)
339
340             // set gobject values
341             this.el.label = "Reload";
342         }
343
344         // user defined functions 
345     }
346     public class Xcls_Button6 : Object 
347     {
348         public Gtk.Button el;
349         private Xcls_DialogPluginWebkit  _this;
350
351
352             // my vars (def)
353
354         // ctor 
355         public Xcls_Button6(Xcls_DialogPluginWebkit _owner )
356         {
357             _this = _owner;
358             this.el = new Gtk.Button();
359
360             // my vars (dec)
361
362             // set gobject values
363             this.el.label = "Cancel";
364         }
365
366         // user defined functions 
367     }
368     public class Xcls_Button7 : Object 
369     {
370         public Gtk.Button el;
371         private Xcls_DialogPluginWebkit  _this;
372
373
374             // my vars (def)
375
376         // ctor 
377         public Xcls_Button7(Xcls_DialogPluginWebkit _owner )
378         {
379             _this = _owner;
380             this.el = new Gtk.Button();
381
382             // my vars (dec)
383
384             // set gobject values
385             this.el.label = "OK";
386         }
387
388         // user defined functions 
389     }
390 }