Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.ui / src / main / java / org / gvsig / webbrowser / jfx / JFXWebBrowser.java @ 46903

History | View | Annotate | Download (4.5 KB)

1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.webbrowser.jfx;
7

    
8
import java.net.URL;
9
import java.text.MessageFormat;
10
import javafx.application.Platform;
11
import javafx.beans.value.ChangeListener;
12
import javafx.beans.value.ObservableValue;
13
import javafx.concurrent.Worker;
14
import javafx.embed.swing.JFXPanel;
15
import javafx.event.EventHandler;
16
import javafx.scene.Scene;
17
import javafx.scene.web.WebEngine;
18
import javafx.scene.web.WebEvent;
19
import javafx.scene.web.WebView;
20
import javax.swing.JComponent;
21
import org.gvsig.webbrowser.WebBrowserPanel;
22

    
23
/**
24
 *
25
 * @author jjdelcerro
26
 */
27
class JFXWebBrowser extends JFXPanel implements WebBrowserPanel.WebBrowser {
28
    
29
    private static final long serialVersionUID = 3021277085276506035L;
30
    private WebView view;
31
    private WebEngine engine;
32
    private Scene scene;
33
    private final WebBrowserPanel webBrowserPanel;
34

    
35
    private class MyEventHandler implements EventHandler<WebEvent<String>> {
36

    
37
        @Override
38
        public void handle(WebEvent<String> event) {
39
            if (event.getEventType() == WebEvent.STATUS_CHANGED) {
40
                String s = event.getData();
41
                if (s == null) {
42
                    webBrowserPanel.setURLText("");
43
                } else {
44
                    webBrowserPanel.setURLText(s);
45
                }
46
            }
47
        }
48
    }
49

    
50
    private class MyChangeListener implements ChangeListener<Worker.State> {
51

    
52
        @Override
53
        public void changed(ObservableValue<? extends Worker.State> ov, Worker.State oldState, Worker.State newState) {
54
            if (newState == Worker.State.SUCCEEDED) {
55
                webBrowserPanel.setURLText(engine.getLocation());
56
            }
57
        }
58
    }
59

    
60
    public JFXWebBrowser(WebBrowserPanel webBrowserPanel) {
61
        this.webBrowserPanel = webBrowserPanel;
62
        this.view = null;
63
        this.engine = null;
64
        this.scene = null;
65
        Platform.runLater(new Runnable() {
66
            @Override
67
            public void run() {
68
                createScene();
69
            }
70
        });
71
        Platform.setImplicitExit(false);
72
    }
73

    
74
    private void createScene() {
75
        this.view = new WebView();
76
        this.engine = this.view.getEngine();
77
        this.engine.setOnStatusChanged(new MyEventHandler());
78
        this.engine.getLoadWorker().stateProperty().addListener(new MyChangeListener());
79
        this.engine.setJavaScriptEnabled(true);
80
        this.scene = new Scene(this.view);
81
        this.setScene(this.scene);
82
    }
83

    
84
    private void load(URL url) {
85
        this.engine.load(url.toString());
86
        this.revalidate();
87
    }
88

    
89
    private void loadContent(String content, String contentType) {
90
        this.engine.loadContent(content, contentType);
91
        this.revalidate();
92
    }
93

    
94
    private void goHistory(int index) {
95
        this.engine.getHistory().go(index);
96
    }
97

    
98
    public void setPage(final URL url) {
99
        Platform.runLater(new Runnable() {
100
            @Override
101
            public void run() {
102
                load(url);
103
            }
104
        });
105
    }
106

    
107
    public void setContent(final String content, final String contentType) {
108
        Platform.runLater(new Runnable() {
109
            @Override
110
            public void run() {
111
                loadContent(content, contentType);
112
            }
113
        });
114
    }
115

    
116
    public void goPrevious() {
117
        Platform.runLater(new Runnable() {
118
            @Override
119
            public void run() {
120
                goHistory(-1);
121
            }
122
        });
123
    }
124

    
125
    public void goNext() {
126
        Platform.runLater(new Runnable() {
127
            @Override
128
            public void run() {
129
                goHistory(1);
130
            }
131
        });
132
    }
133

    
134
    public String getPage() {
135
        return this.engine.getLocation();
136
    }
137

    
138
    public String getTitle() {
139
        return this.engine.getTitle();
140
    }
141

    
142
    public Object executeScript(String js) {
143
        Object r = this.engine.executeScript(js);
144
        return r;
145
    }
146

    
147
    public void find(final String text, final boolean backwards) {
148
        try {
149
            Platform.runLater(new Runnable() {
150
                @Override
151
                public void run() {
152
                    String script = MessageFormat.format("window.find(\"{0}\",false,{1},true)", text, backwards ? "true" : "false");
153
                }
154
            });
155
        } catch (Throwable th) {
156
        }
157
    }
158
    
159
    @Override
160
    public JComponent asJComponent() {
161
        return this;
162
    }
163
}