|
18 | 18 | */ |
19 | 19 | package org.netbeans.html.boot.fx; |
20 | 20 |
|
| 21 | +import java.util.ArrayList; |
| 22 | +import java.util.List; |
21 | 23 | import java.util.logging.Level; |
22 | 24 | import java.util.logging.Logger; |
| 25 | +import javafx.beans.value.ChangeListener; |
| 26 | +import javafx.beans.value.ObservableValue; |
23 | 27 | import javafx.scene.web.WebEngine; |
| 28 | +import javafx.scene.web.WebView; |
| 29 | +import javafx.stage.Stage; |
24 | 30 | import netscape.javascript.JSObject; |
25 | 31 |
|
26 | 32 | /** This is an implementation package - just |
|
31 | 37 | * |
32 | 38 | * @author Jaroslav Tulach |
33 | 39 | */ |
34 | | -public final class FXConsole { |
| 40 | +public final class FXConsole implements ChangeListener<String> { |
35 | 41 | static final Logger LOG = Logger.getLogger(FXConsole.class.getName()); |
36 | | - |
37 | | - private FXConsole() { |
| 42 | + private String title; |
| 43 | + final WebView view; |
| 44 | + final Stage stage; |
| 45 | + |
| 46 | + private static final List<FXConsole> all = new ArrayList<FXConsole>(); |
| 47 | + |
| 48 | + FXConsole(WebView view, Stage stage) { |
| 49 | + all.add(this); |
| 50 | + this.view = view; |
| 51 | + this.stage = stage; |
38 | 52 | } |
39 | 53 |
|
40 | | - static void register(WebEngine eng) { |
| 54 | + void register(WebEngine eng) { |
41 | 55 | JSObject fn = (JSObject) eng.executeScript("" |
42 | | - + "(function(attr, l, c) {" |
43 | | - + " window.console[attr] = function(msg) { c.log(l, msg); };" |
| 56 | + + "(function(attr, l, FXConsole) {\n" |
| 57 | + + " window.console[attr] = function(msg) {\n" |
| 58 | + + " FXConsole.log(l, msg);\n" |
| 59 | + + " };" |
44 | 60 | + "})" |
45 | 61 | ); |
46 | | - FXConsole c = new FXConsole(); |
47 | | - c.registerImpl(fn, "log", Level.INFO); |
48 | | - c.registerImpl(fn, "info", Level.INFO); |
49 | | - c.registerImpl(fn, "warn", Level.WARNING); |
50 | | - c.registerImpl(fn, "error", Level.SEVERE); |
| 62 | + registerImpl(fn, "log", Level.INFO); |
| 63 | + registerImpl(fn, "info", Level.INFO); |
| 64 | + registerImpl(fn, "warn", Level.WARNING); |
| 65 | + registerImpl(fn, "error", Level.SEVERE); |
51 | 66 | } |
52 | | - |
| 67 | + |
53 | 68 | private void registerImpl(JSObject eng, String attr, Level l) { |
54 | | - eng.call("call", null, attr, l, this); |
| 69 | + eng.call("call", new Object[] { null, attr, l, this }); |
| 70 | + } |
| 71 | + |
| 72 | + void observeWebViewTitle() { |
| 73 | + view.getEngine().titleProperty().addListener(this); |
| 74 | + this.changed(null, null, null); |
| 75 | + } |
| 76 | + |
| 77 | + @Override |
| 78 | + public void changed(ObservableValue<? extends String> ov, String t, String t1) { |
| 79 | + title = view.getEngine().getTitle(); |
| 80 | + if (title != null) { |
| 81 | + stage.setTitle(title); |
| 82 | + } |
55 | 83 | } |
56 | | - |
| 84 | + |
| 85 | + // called from JavaScript |
57 | 86 | public void log(Level l, String msg) { |
58 | 87 | LOG.log(l, msg); |
59 | 88 | } |
|
0 commit comments