BrowserWindow.bjs
[app.webkitpdf] / BrowserWindow.vala
1 static BrowserWindow  _BrowserWindow;
2
3 public class BrowserWindow : Object
4 {
5     public Gtk.Window el;
6     private BrowserWindow  _this;
7
8     public static BrowserWindow singleton()
9     {
10         if (_BrowserWindow == null) {
11             _BrowserWindow= new BrowserWindow();
12         }
13         return _BrowserWindow;
14     }
15     public Xcls_view view;
16
17         // my vars (def)
18
19     // ctor
20     public BrowserWindow()
21     {
22         _this = this;
23         this.el = new Gtk.Window( Gtk.WindowType.TOPLEVEL );
24
25         // my vars (dec)
26
27         // set gobject values
28         var child_0 = new Xcls_ScrolledWindow2( _this );
29         child_0.ref();
30         this.el.add (  child_0.el  );
31
32         //listeners
33         this.el.destroy.connect( () => {
34             Gtk.main_quit();
35         });
36         this.el.show.connect( () => {
37                 this.el.resize(1200,500);
38                 this.view.el.load_uri(webkitpdf.opt_url);
39         
40         });
41     }
42
43     // user defined functions
44     public class Xcls_ScrolledWindow2 : Object
45     {
46         public Gtk.ScrolledWindow el;
47         private BrowserWindow  _this;
48
49
50             // my vars (def)
51
52         // ctor
53         public Xcls_ScrolledWindow2(BrowserWindow _owner )
54         {
55             _this = _owner;
56             this.el = new Gtk.ScrolledWindow( null, null );
57
58             // my vars (dec)
59
60             // set gobject values
61             var child_0 = new Xcls_view( _this );
62             child_0.ref();
63             this.el.add (  child_0.el  );
64
65             // init method
66
67             {
68                 this.el.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);
69             }
70         }
71
72         // user defined functions
73     }
74     public class Xcls_view : Object
75     {
76         public WebKit.WebView el;
77         private BrowserWindow  _this;
78
79
80             // my vars (def)
81
82         // ctor
83         public Xcls_view(BrowserWindow _owner )
84         {
85             _this = _owner;
86             _this.view = this;
87             this.el = new WebKit.WebView();
88
89             // my vars (dec)
90
91             // set gobject values
92
93             //listeners
94             this.el.print.connect( (pe) => {
95                 
96                                  print("got callback for print");
97                                 pe.ref();
98                                 pe.failed.connect(() => {
99                                         print("print failed\n");
100                                          Gtk.main_quit();
101                                 
102                                 });
103                                  pe.finished.connect(() => {
104                                         print("print completed\n");
105                                          Gtk.main_quit();
106                                 
107                                 });
108                                 
109                                 //pe.run_dialog(_this.el);
110                                 return false;
111                                 
112                             var list = Gtk.PaperSize.get_paper_sizes(false);
113                             var psetup = new Gtk.PageSetup();
114                             for(var i = 0; i < list.length(); i++ ) {
115                                 var entry = list.nth_data(i).copy();
116                                 if (entry.get_name() == "iso_a2") {
117                                     psetup.set_paper_size(entry);
118                                 }
119                             }
120                                 
121             
122             
123                             var ps = new Gtk.PrintSettings();
124                             ps.set_printer("Print to File");
125                             ps.set("output-file-format", "pdf");
126                             //ps.set("output-uri", "file://" + webkitpdf.opt_target_pdf);
127                             ps.set("output-uri",  webkitpdf.opt_target_pdf);
128             
129                             pe.set_print_settings(ps);
130                             pe.set_page_setup(psetup);
131                             print("Calling Print?\n");
132                             pe.run_dialog(_this.el);
133                             //pe.print();
134                             return false;
135                            
136             });
137             this.el.load_changed.connect( (le) => {
138                          
139                     print("load_changed %d ?= %d\n", le, WebKit.LoadEvent.FINISHED);
140             
141                     if (le != WebKit.LoadEvent.FINISHED) {
142                         return;
143                     }
144                     /*
145                     GLib.Timeout.add_seconds(webkitpdf.opt_delay, () => { 
146                         print("making screenshot\n");
147                         _this.view.el.get_snapshot.begin(
148                                         WebKit.SnapshotRegion.FULL_DOCUMENT, 
149                                         WebKit.SnapshotOptions.NONE, null, (obj, res) => {
150                             var sf = _this.view.el.get_snapshot.end(res);
151             
152                             sf.write_to_png(webkitpdf.opt_target_png);
153                         });
154                         Gtk.main_quit();
155                         return false;
156                     }, GLib.Priority.DEFAULT);
157              */       
158              
159                         print("calling print in %d seconds\n", (int)webkitpdf.opt_delay);
160                     GLib.Timeout.add_seconds(webkitpdf.opt_delay, () => { 
161                                 print("calling print in js\n");
162                                 
163                                  var loop = new MainLoop();
164                                 this.el.run_javascript.begin("print();", null, (obj,res) => {
165                                                 print("calling print in js ended\n");
166                                             this.el.run_javascript.end(res);
167                                             loop.quit();
168                                 });
169                                 loop.run();
170             
171                                 return false;
172                     }, GLib.Priority.DEFAULT);
173              
174             });
175         }
176
177         // user defined functions
178     }
179
180
181 }