/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package Sirius.navigator.ui; import javafx.application.Platform; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Worker.State; import javafx.embed.swing.JFXPanel; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.layout.BorderPane; import javafx.scene.layout.Pane; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import org.apache.log4j.Logger; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.events.Event; import org.w3c.dom.events.EventListener; import org.w3c.dom.events.EventTarget; import org.w3c.dom.html.HTMLAnchorElement; import java.awt.event.ActionListener; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; import de.cismet.tools.BrowserLauncher; import de.cismet.tools.gui.FXWebViewPanel; /** * An implementation of DescriptionPane which uses JavaFX WebKit Component to render XHTML content. * * @author daniel * @version $Revision$, $Date$ */ public class DescriptionPaneFX extends DescriptionPane { //~ Static fields/initializers --------------------------------------------- private static FXWebViewPanel browserPanel; private static final Logger LOG = Logger.getLogger(DescriptionPaneFX.class); //~ Instance fields -------------------------------------------------------- private JPopupMenu popupMenu; private JMenuItem mnuItem_openInExternalBrowser; // private NavigatorJsBridgeImpl bridge = new NavigatorJsBridgeImpl(); //~ Constructors ----------------------------------------------------------- /** * Creates a new DescriptionPaneFX object. */ public DescriptionPaneFX() { Platform.setImplicitExit(false); browserPanel = new FXWebViewPanel(); add(browserPanel, "html"); popupMenu = new JPopupMenu(); mnuItem_openInExternalBrowser = new JMenuItem(org.openide.util.NbBundle.getMessage( DescriptionPaneFS.class, "DescriptionPaneFS.btn_openInSystemBrowser.text"), new javax.swing.ImageIcon( getClass().getResource("/Sirius/navigator/ui/world.png"))); mnuItem_openInExternalBrowser.addActionListener(new ActionListener() { @Override public void actionPerformed(final java.awt.event.ActionEvent e) { final WebEngine webEng = browserPanel.getWebEngine(); if (webEng != null) { final String pageURI = webEng.getLocation(); if ((pageURI != null) && (pageURI.trim().length() > 0)) { try { de.cismet.tools.BrowserLauncher.openURL(pageURI); } catch (Exception ex) { LOG.error("Couldn't open URI '" + pageURI + "' in external browser.", ex); } } } } }); popupMenu.add(mnuItem_openInExternalBrowser); browserPanel.add(popupMenu); browserPanel.addMouseListener(new PopupListener(popupMenu)); } //~ Methods ---------------------------------------------------------------- @Override public void setPageFromURI(final String page) { browserPanel.loadUrl(page); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { DescriptionPaneFX.this.invalidate(); DescriptionPaneFX.this.repaint(); } }); } @Override public void setPageFromContent(final String page) { browserPanel.loadContent(page); } @Override public void setPageFromContent(final String page, final String baseURL) { browserPanel.loadContent(page); } }