Statistiques
| Révision :

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

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

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