package org.geogebra.desktop.gui.dialog;
import java.awt.Dimension;
import java.awt.event.WindowEvent;
import javax.swing.SwingUtilities;
import org.geogebra.common.move.ggtapi.operations.OpenFromGGTOperation;
import org.geogebra.common.util.debug.Log;
import org.geogebra.desktop.main.AppD;
import org.w3c.dom.events.Event;
import javafx.embed.swing.JFXPanel;
import javafx.event.EventHandler;
import javafx.scene.web.WebEvent;
/**
* A dialog for searching and opening materials from GeoGebraTube This dialog
* will show a web view that opens a special version of the search dialog from
* GeoGebraTube
*
* @author stefan
*
*/
public class OpenFromGGTDialogD extends WebViewDialog {
private static final long serialVersionUID = 1L;
/**
* @param app
* The app of type AppD
*/
public OpenFromGGTDialogD(AppD app) {
super(app, true);
app.initOpenFromGGTEventFlow();
createGUI();
}
private void createGUI() {
setTitle(app.getLocalization().getMenu("OpenFromGeoGebraTube"));
setResizable(true);
getContentPane().setPreferredSize(new Dimension(700, 700));
String url = app.getOpenFromGGTOperation()
.generateOpenFromGGTURL(OpenFromGGTOperation.APP_TYPE.DESKTOP);
JFXPanel fxPanel1 = createWebView(url);
add(fxPanel1);
pack();
setLocationRelativeTo(app.getFrame());
}
@Override
protected void onPageLoaded() {
super.onPageLoaded();
/**
* Add an alert handler that listens to the alert call that passes the
* URL of the material to open to this webview
*/
getWebEngine().setOnAlert(new EventHandler<WebEvent<String>>() {
@Override
public void handle(WebEvent<String> event) {
String url = event.getData();
if (url != null && url.startsWith("EXT: ")) {
app.showURLinBrowser(url.substring(5));
} else if (url != null && url.startsWith("OPEN: ")) {
openURL(url.substring(5));
}
}
});
// Listen to hyperlink clicks to open them in an external browser
addHyperlinkListener();
}
/**
* Load the material from the given GGT URL and close the dialog
*
* @param url
* The URL of the material to load
*/
void openURL(final String url) {
Log.debug("Opening material from URL: " + url);
// Close the dialog
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
OpenFromGGTDialogD.this.dispatchEvent(new WindowEvent(
OpenFromGGTDialogD.this, WindowEvent.WINDOW_CLOSING));
// Load the URL
app.getGuiManager().loadURL(url);
}
});
}
@Override
void onHyperlinkClicked(String href, String absoluteURL, String domainName,
Event ev) {
Log.debug("Link clicked: " + href);
if (!href.contains("/page/")) {
ev.preventDefault();
// Open each hyperlink click in an external browser
app.showURLinBrowser(absoluteURL);
}
}
}