Statistiques
| Révision :

root / TXM / trunk / org.txm.libs.javafx / swt / JFXBrowser.java @ 3360

Historique | Voir | Annoter | Télécharger (10,66 ko)

1
package snippet;
2

    
3
import java.util.concurrent.Semaphore;
4

    
5
import org.eclipse.swt.SWT;
6
import org.eclipse.swt.SWTError;
7
import org.eclipse.swt.browser.CloseWindowListener;
8
import org.eclipse.swt.browser.LocationEvent;
9
import org.eclipse.swt.browser.LocationListener;
10
import org.eclipse.swt.browser.OpenWindowListener;
11
import org.eclipse.swt.browser.ProgressEvent;
12
import org.eclipse.swt.browser.ProgressListener;
13
import org.eclipse.swt.browser.StatusTextListener;
14
import org.eclipse.swt.browser.TitleListener;
15
import org.eclipse.swt.browser.VisibilityWindowAdapter;
16
import org.eclipse.swt.events.KeyEvent;
17
import org.eclipse.swt.events.KeyListener;
18
import org.eclipse.swt.events.MouseEvent;
19
import org.eclipse.swt.events.MouseListener;
20
import org.eclipse.swt.graphics.Point;
21
import org.eclipse.swt.layout.GridData;
22
import org.eclipse.swt.layout.GridLayout;
23
import org.eclipse.swt.widgets.Composite;
24
import org.eclipse.swt.widgets.Display;
25
import org.eclipse.swt.widgets.Event;
26
import org.eclipse.swt.widgets.Label;
27
import org.eclipse.swt.widgets.Listener;
28
import org.eclipse.swt.widgets.ProgressBar;
29
import org.eclipse.swt.widgets.Shell;
30
import org.eclipse.swt.widgets.Text;
31
import org.eclipse.swt.widgets.ToolBar;
32
import org.eclipse.swt.widgets.ToolItem;
33

    
34
import javafx.application.Platform;
35
import javafx.embed.swt.FXCanvas;
36
import javafx.scene.Group;
37
import javafx.scene.Scene;
38
import javafx.scene.paint.Color;
39
import javafx.scene.web.WebView;
40

    
41
/**
42
 * WebView (webkit) wrapper.
43
 * not finished, see work to be done in org.eclipse.swt.browser.Webkit.class to make this class fully operational
44
 * 
45
 * @author mdecorde
46
 *
47
 */
48
public class JFXBrowser extends FXCanvas {
49
        
50
        protected static final String NOMEDIA = ""; //$NON-NLS-1$
51
        
52
        private WebView jfxBrowser;
53
        
54
        // private GLComposite videoComposite;
55
        
56
        public WebView getEmbeddedMediaPlayer() {
57
                return jfxBrowser;
58
        }
59
        
60
        Semaphore s = new Semaphore(1);
61
        
62
        // private FXCanvas fxCanvas;
63
        
64
        Point previousP;
65
        
66
        public JFXBrowser(Composite parent, int style) {
67
                super(parent, style);
68
                GridLayout gl = new GridLayout(1, true);
69
                gl.horizontalSpacing = 0;
70
                this.setLayout(gl);
71
                
72
                // THE PLAYER
73
                // if (RuntimeUtil.isMac()) {
74
                // try {
75
                // LibC.INSTANCE.setenv("VLC_PLUGIN_PATH", "/Applications/VLC.app/Contents/MacOS/plugins", 1);
76
                // }
77
                // catch (Exception ex) {
78
                // ex.printStackTrace();
79
                // }
80
                // }
81
                // videoComposite = new GLComposite(this, SWT.NONE, "Video");
82
                GridData gdata = new GridData(SWT.FILL, SWT.FILL, true, true);
83
                this.setLayoutData(gdata);
84
                jfxBrowser = null;
85
                
86
                this.addListener(SWT.Resize, new Listener() {
87
                        
88
                        @Override
89
                        public void handleEvent(Event e) {
90
                                resizeView();
91
                        }
92
                });
93
                
94
                // fxCanvas = new FXCanvas(videoComposite, SWT.BORDER);
95
                // GridData gdata2 = new GridData(SWT.FILL, SWT.FILL, true, true);
96
                // fxCanvas.setLayoutData(gdata2);
97
                
98
                initializeBrowser();
99
        }
100
        
101
        // @Override
102
        // public void addMouseListener(MouseListener listener) {
103
        // // jfxBrowser.setOnMousePressed(new EventHandler<MouseEvent>() {
104
        // //
105
        // // @Override
106
        // // public void handle(MouseEvent event) {
107
        // // // TODO Auto-generated method stub
108
        // //
109
        // // }
110
        // // });
111
        // fxCanvas.addMouseListener(listener);
112
        // }
113
        
114
        protected void resizeView() {
115
                if (jfxBrowser != null) {
116
                        Point p = this.getSize();
117
                        // if (previousP == null || (p.x != previousP.x && p.y != previousP.y)) { // ensure size changed
118
                        jfxBrowser.setPrefHeight(p.y);
119
                        // jfxBrowser.setMaxWidth(p.x);
120
                        jfxBrowser.setPrefWidth(p.x);
121
                        previousP = p;
122
                        // }
123
                }
124
        }
125
        
126
        private Group group;
127
        
128
        private Scene scene;
129
        
130
        protected boolean initializeBrowser() {
131
                
132
                Platform.setImplicitExit(false);
133
                jfxBrowser = new WebView();
134
                
135
                group = new Group(jfxBrowser);
136
                
137
                // scene = new Scene(group, Color.rgb(fxCanvas.getBackground().getRed(), fxCanvas.getBackground().getGreen(), fxCanvas.getBackground().getBlue()));
138
                scene = new Scene(group, Color.rgb(0, 0, 0));
139
                
140
                this.setScene(jfxBrowser.getScene());
141
                
142
                return true;
143
        }
144
        
145
        public boolean back() {
146
                try {
147
                        jfxBrowser.getEngine().getHistory().go(-1);
148
                        return true;
149
                }
150
                catch (Exception e) {
151
                        return false;
152
                }
153
        }
154
        
155
        public boolean forward() {
156
                try {
157
                        jfxBrowser.getEngine().getHistory().go(1);
158
                        return true;
159
                }
160
                catch (Exception e) {
161
                        return false;
162
                }
163
        }
164
        
165
        public void stop() {
166
                // jfxBrowser.getEngine().canc();
167
                System.out.println("TODO JFXBrowser.stop...");
168
        }
169
        
170
        public void refresh() {
171
                jfxBrowser.getEngine().reload();
172
        }
173
        
174
        public void setUrl(String url) {
175
                jfxBrowser.getEngine().load(url);
176
        }
177
        
178
        public void addProgressListener(ProgressListener progressListener) {
179
                // TODO Auto-generated method stub
180
                System.out.println("TODO JFXBrowser.addProgressListener(" + progressListener + ")");
181
        }
182
        
183
        public void addStatusTextListener(StatusTextListener listener) {
184
                // TODO Auto-generated method stub
185
                System.out.println("TODO JFXBrowser.addStatusTextListener(" + listener + ")");
186
        }
187
        
188
        public void addLocationListener(LocationListener locationListener) {
189
                // TODO Auto-generated method stub
190
                System.out.println("TODO JFXBrowser.addLocationListener(" + locationListener + ")");
191
        }
192
        
193
        public void addOpenWindowListener(OpenWindowListener listener) {
194
                // TODO Auto-generated method stub
195
                System.out.println("TODO JFXBrowser.addOpenWindowListener(" + listener + ")");
196
        }
197
        
198
        public void addVisibilityWindowListener(VisibilityWindowAdapter visibilityWindowAdapter) {
199
                // TODO Auto-generated method stub
200
                System.out.println("TODO JFXBrowser.addVisibilityWindowListener(" + visibilityWindowAdapter + ")");
201
        }
202
        
203
        public void addCloseWindowListener(CloseWindowListener listener) {
204
                // TODO Auto-generated method stub
205
                System.out.println("TODO JFXBrowser.addCloseWindowListener(" + listener + ")");
206
        }
207
        
208
        public void addTitleListener(TitleListener listener) {
209
                // TODO Auto-generated method stub
210
                System.out.println("TODO JFXBrowser.addTitleListener(" + listener + ")");
211
        }
212
        
213
        public void removeLocationListener(LocationListener locationListener) {
214
                // TODO Auto-generated method stub
215
                System.out.println("TODO JFXBrowser.removeLocationListener(" + locationListener + ")");
216
        }
217
        
218
        public static void main(String[] args) {
219
                Display display = new Display();
220
                final Shell shell = new Shell(display);
221
                shell.setText("Snippet 128");
222
                GridLayout gridLayout = new GridLayout();
223
                gridLayout.numColumns = 3;
224
                shell.setLayout(gridLayout);
225
                ToolBar toolbar = new ToolBar(shell, SWT.NONE);
226
                ToolItem itemBack = new ToolItem(toolbar, SWT.PUSH);
227
                itemBack.setText("Back");
228
                ToolItem itemForward = new ToolItem(toolbar, SWT.PUSH);
229
                itemForward.setText("Forward");
230
                ToolItem itemStop = new ToolItem(toolbar, SWT.PUSH);
231
                itemStop.setText("Stop");
232
                ToolItem itemRefresh = new ToolItem(toolbar, SWT.PUSH);
233
                itemRefresh.setText("Refresh");
234
                ToolItem itemGo = new ToolItem(toolbar, SWT.PUSH);
235
                itemGo.setText("Go");
236
                
237
                GridData data = new GridData();
238
                data.horizontalSpan = 3;
239
                toolbar.setLayoutData(data);
240
                
241
                Label labelAddress = new Label(shell, SWT.NONE);
242
                labelAddress.setText("Address");
243
                
244
                final Text location = new Text(shell, SWT.BORDER);
245
                data = new GridData();
246
                data.horizontalAlignment = GridData.FILL;
247
                data.horizontalSpan = 2;
248
                data.grabExcessHorizontalSpace = true;
249
                location.setLayoutData(data);
250
                
251
                final JFXBrowser browser;
252
                try {
253
                        browser = new JFXBrowser(shell, SWT.NONE);
254
                }
255
                catch (SWTError e) {
256
                        System.out.println("Could not instantiate Browser: " + e.getMessage());
257
                        display.dispose();
258
                        return;
259
                }
260
                data = new GridData();
261
                data.horizontalAlignment = GridData.FILL;
262
                data.verticalAlignment = GridData.FILL;
263
                data.horizontalSpan = 3;
264
                data.grabExcessHorizontalSpace = true;
265
                data.grabExcessVerticalSpace = true;
266
                browser.setLayoutData(data);
267
                
268
                final Label status = new Label(shell, SWT.NONE);
269
                data = new GridData(GridData.FILL_HORIZONTAL);
270
                data.horizontalSpan = 2;
271
                status.setLayoutData(data);
272
                
273
                final ProgressBar progressBar = new ProgressBar(shell, SWT.NONE);
274
                data = new GridData();
275
                data.horizontalAlignment = GridData.END;
276
                progressBar.setLayoutData(data);
277
                
278
                /* event handling */
279
                Listener listener = event -> {
280
                        ToolItem item = (ToolItem) event.widget;
281
                        String string = item.getText();
282
                        if (string.equals("Back"))
283
                                browser.back();
284
                        else if (string.equals("Forward"))
285
                                browser.forward();
286
                        else if (string.equals("Stop"))
287
                                browser.stop();
288
                        else if (string.equals("Refresh"))
289
                                browser.refresh();
290
                        else if (string.equals("Go"))
291
                                browser.setUrl(location.getText());
292
                };
293
                browser.addProgressListener(new ProgressListener() {
294
                        
295
                        @Override
296
                        public void changed(ProgressEvent event) {
297
                                if (event.total == 0) return;
298
                                int ratio = event.current * 100 / event.total;
299
                                progressBar.setSelection(ratio);
300
                        }
301
                        
302
                        @Override
303
                        public void completed(ProgressEvent event) {
304
                                progressBar.setSelection(0);
305
                        }
306
                });
307
                
308
                browser.addLocationListener(new LocationListener() {
309
                        
310
                        @Override
311
                        public void changing(LocationEvent event) {}
312
                        
313
                        @Override
314
                        public void changed(LocationEvent event) {
315
                                if (event.top) location.setText(event.location);
316
                        }
317
                });
318
                // browser.addLocationListener(LocationListener.changed(event -> {
319
                // if (event.top) location.setText(event.location);
320
                // }));
321
                itemBack.addListener(SWT.Selection, listener);
322
                itemForward.addListener(SWT.Selection, listener);
323
                itemStop.addListener(SWT.Selection, listener);
324
                itemRefresh.addListener(SWT.Selection, listener);
325
                itemGo.addListener(SWT.Selection, listener);
326
                location.addListener(SWT.DefaultSelection, e -> browser.setUrl(location.getText()));
327
                
328
                browser.addMouseListener(new MouseListener() {
329
                        
330
                        @Override
331
                        public void mouseUp(MouseEvent e) {
332
                                System.out.println("M UP");
333
                        }
334
                        
335
                        @Override
336
                        public void mouseDown(MouseEvent e) {
337
                                System.out.println("M DOWN");
338
                        }
339
                        
340
                        @Override
341
                        public void mouseDoubleClick(MouseEvent e) {
342
                                System.out.println("M DCLICK");
343
                        }
344
                });
345
                
346
                browser.addKeyListener(new KeyListener() {
347
                        
348
                        @Override
349
                        public void keyReleased(KeyEvent e) {}
350
                        
351
                        @Override
352
                        public void keyPressed(KeyEvent e) {
353
                                System.out.println("K " + e);
354
                        }
355
                });
356
                
357
                shell.open();
358
                // browser.setUrl("http://eclipse.org");
359
                
360
                while (!shell.isDisposed()) {
361
                        if (!display.readAndDispatch())
362
                                display.sleep();
363
                }
364
                display.dispose();
365
        }
366
        
367
        public WebView getWebView() {
368
                return this.jfxBrowser;
369
        }
370
        
371
        public String getUrl() {
372
                return jfxBrowser.getEngine().getLocation();
373
        }
374
        
375
        public boolean isBackEnabled() {
376
                return jfxBrowser.getEngine().getHistory().getCurrentIndex() > 0;
377
        }
378
        
379
        public boolean isForwardEnabled() {
380
                return jfxBrowser.getEngine().getHistory().getCurrentIndex() < jfxBrowser.getEngine().getHistory().getEntries().size();
381
        }
382
        
383
        public boolean setUrl(String url, String postData, String[] headers) {
384
                // TODO Auto-generated method stub
385
                jfxBrowser.getEngine().load(url);
386
                return true;
387
        }
388
}