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