// ********************************************************************** // // <copyright> // // BBN Technologies // 10 Moulton Street // Cambridge, MA 02138 // (617) 873-8000 // // Copyright (C) BBNT Solutions LLC. All rights reserved. // // </copyright> // ********************************************************************** // // $Source: // /cvs/distapps/openmap/src/openmap/com/bbn/openmap/gui/MiniBrowser.java,v // $ // $RCSfile: MiniBrowser.java,v $ // $Revision: 1.5 $ // $Date: 2004/10/14 18:05:48 $ // $Author: dietrick $ // // ********************************************************************** package com.bbn.openmap.gui; import java.awt.Frame; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.EmptyStackException; import java.util.Stack; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JEditorPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import javax.swing.text.html.HTMLDocument; import javax.swing.text.html.HTMLFrameHyperlinkEvent; import com.bbn.openmap.util.Debug; /* import edu.stanford.ejalbert.BrowserLauncher; import edu.stanford.ejalbert.exception.BrowserLaunchingInitializingException; import edu.stanford.ejalbert.exception.UnsupportedOperatingSystemException; */ public class MiniBrowser extends OMComponentPanel implements ActionListener { JEditorPane jep; Stack stack; // JButton browserLaunch = null; JButton backButton = null; JButton dismissButton = null; public final static String BackCmd = "back"; public final static String LaunchBrowserCmd = "browser"; public MiniBrowser(String content) { this("text/html", content); } public MiniBrowser(String mimeType, String content) { this(null, mimeType, content); } public MiniBrowser(Frame owner, String mimeType, String content) { WindowSupport ws = init(); push(mimeType, content); ws.displayInWindow(owner, 200, 200, 300, 300); } public MiniBrowser(URL url) { this(null, url); } public MiniBrowser(Frame owner, URL url) { WindowSupport ws = init(); push(url); ws.displayInWindow(owner, 200, 200, 300, 300); } protected WindowSupport init() { stack = new Stack(); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setLayout(gridbag); // Has to happen before first push // browserLaunch = new JButton("Open in Browser"); URL url = this.getClass().getResource("w.gif"); ImageIcon imageIcon = new ImageIcon(url, "Go back"); backButton = new JButton(imageIcon); dismissButton = new JButton("Close"); // //// jep = new JEditorPane(); jep.setEditable(false); jep.addHyperlinkListener(new HyperlinkListener() { public void hyperlinkUpdate(HyperlinkEvent e) { if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { JEditorPane pane = (JEditorPane) e.getSource(); if (e instanceof HTMLFrameHyperlinkEvent) { Debug.message("minibrowser", "processing HTMLFrameHyperlinkEvent"); HTMLFrameHyperlinkEvent evt = (HTMLFrameHyperlinkEvent) e; HTMLDocument doc = (HTMLDocument) pane.getDocument(); doc.processHTMLFrameHyperlinkEvent(evt); } else { Debug.message("minibrowser", "processing HyperlinkEvent"); try { push(e.getURL()); } catch (Throwable t) { t.printStackTrace(); } } } } }); JScrollPane jsp = new JScrollPane(jep, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); c.gridwidth = GridBagConstraints.REMAINDER; c.fill = GridBagConstraints.BOTH; c.anchor = GridBagConstraints.NORTHWEST; c.insets = new Insets(5, 5, 5, 5); c.weightx = 1; c.weighty = 1; gridbag.setConstraints(jsp, c); add(jsp); JPanel buttonPanel = new JPanel(); GridBagLayout gridbag2 = new GridBagLayout(); GridBagConstraints c2 = new GridBagConstraints(); buttonPanel.setLayout(gridbag2); c2.fill = GridBagConstraints.NONE; c2.anchor = GridBagConstraints.WEST; c2.weightx = 0; c2.weighty = 0; backButton.setActionCommand(BackCmd); backButton.addActionListener(this); backButton.setEnabled(false); gridbag2.setConstraints(backButton, c2); buttonPanel.add(backButton); /** * browserLaunch.setActionCommand(LaunchBrowserCmd); * browserLaunch.addActionListener(this); * browserLaunch.setVisible(false); * gridbag2.setConstraints(browserLaunch, c2); * buttonPanel.add(browserLaunch); */ WindowSupport ws = new WindowSupport(this, ""); c2.anchor = GridBagConstraints.EAST; c2.weightx = 1; dismissButton.setActionCommand(WindowSupport.KillWindowCmd); dismissButton.addActionListener(ws); gridbag2.setConstraints(dismissButton, c2); buttonPanel.add(dismissButton); // ////////// c.fill = GridBagConstraints.HORIZONTAL; c.anchor = GridBagConstraints.WEST; c.weightx = 1; c.weighty = 0; c.gridy = 1; gridbag.setConstraints(buttonPanel, c); add(buttonPanel); // Call displayInWindow on this. return ws; } public void actionPerformed(ActionEvent ae) { String command = ae.getActionCommand(); try { if (command == BackCmd) { stack.pop(); ((MiniBrowserPage) stack.peek()).loadInto(jep); if (stack.size() <= 1) { backButton.setEnabled(false); } }/* * else if (command == LaunchBrowserCmd) { ((MiniBrowserPage) * stack.peek()).launchInBrowser(); } */ } catch (EmptyStackException ese) { backButton.setEnabled(false); } catch (IOException ioe) { } } protected void push(URL newPage) { Debug.message("minibrowser", "push(URL)"); push(new MiniBrowserPage(newPage)); } protected void push(String mimeType, String content) { Debug.message("minibrowser", "push(String)"); push(new MiniBrowserPage(mimeType, content)); } protected void push(MiniBrowserPage mbp) { try { mbp.loadInto(jep); stack.push(mbp); if (stack.size() > 1) { backButton.setEnabled(true); } } catch (IOException ioe) { } } /* * protected void enableBrowserLaunch(boolean set) { * browserLaunch.setVisible(set); invalidate(); } */ protected void finalize() { Debug.message("minibrowser", "MiniBrowser getting gc'd"); } public static void display(String content) { display("text/html", content); } public static void display(String mimeType, String content) { display(null, mimeType, content); } public static void display(Frame owner, String mimeType, String content) { new MiniBrowser(owner, mimeType, content); } public static void display(URL url) { display(null, url); } public static void display(Frame owner, URL url) { new MiniBrowser(owner, url); } public static void main(String[] argv) { if (argv.length > 0) { try { new MiniBrowser(new URL(argv[0])); } catch (MalformedURLException murle) { new MiniBrowser("text/html", argv[0]); } } else { new MiniBrowser("text/html", "String link to the <a href=\"http://openmap.bbn.com\">OpenMap</a> web site"); } } public class MiniBrowserPage { String content = null; String mimeType = null; URL url = null; // BrowserLauncher browserLauncher; public MiniBrowserPage(String mt, String stuff) { mimeType = mt; content = stuff; } public MiniBrowserPage(URL page) { url = page; } public void loadInto(JEditorPane jep) throws IOException { if (isURL()) { Debug.message("minibrowser", "loadInto(URL)"); jep.setPage(url); // enableBrowserLaunch(true); jep.updateUI(); } else { Debug.message("minibrowser", "loadInto(String)"); jep.setContentType(mimeType); jep.setText(content); // enableBrowserLaunch(false); jep.updateUI(); } } /** * public void launchInBrowser() { if (isURL()) { try { browserLauncher * = new BrowserLauncher(); * browserLauncher.openURLinBrowser(url.toString()); } catch * (BrowserLaunchingInitializingException e) { // TODO Auto-generated * catch block e.printStackTrace(); } catch * (UnsupportedOperatingSystemException e) { // TODO Auto-generated * catch block e.printStackTrace(); } } } */ public boolean isURL() { return url != null; } } }