root / TXM / trunk / org.txm.libs.javafx / swt / JFXBrowser.java @ 3527
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 |
} |