YAVHelp.java

/*
 * Copyright (c) 2002 Sun Microsystems, Inc. All  Rights Reserved.
 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 
 * -Redistributions of source code must retain the above copyright
 *  notice, this list of conditions and the following disclaimer.
 
 * -Redistribution in binary form must reproduct the above copyright
 *  notice, this list of conditions and the following disclaimer in
 *  the documentation and/or other materials provided with the distribution.
 
 * Neither the name of Sun Microsystems, Inc. or the names of contributors
 * may be used to endorse or promote products derived from this software
 * without specific prior written permission.
 
 * This software is provided "AS IS," without a warranty of any kind. ALL
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
 * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
 * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT
 * BE LIABLE FOR ANY DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT
 * OF OR RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS
 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
 * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
 * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
 * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN
 * IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 
 * You acknowledge that Software is not designed, licensed or intended for
 * use in the design, construction, operation or maintenance of any nuclear
 * facility.
 */


/* leicht Modifiziert von Robin Quast 2004 für die Benutzung in YAV
 * Yet another visualiser http://www.robinquast.de
 *
 * Ursprüngliche Klasse aus dem JDK Demo Verzeichnis:
 * @(#)MetalworksHelp.java  1.9 02/06/13
 */

import javax.swing.*;
import java.awt.*;
import java.net.URL;
import java.net.MalformedURLException;
import java.io.*;
import javax.swing.text.*;
import javax.swing.event.*;


public class YAVHelp 
extends JScrollPane 
implements HyperlinkListener {
  
    JEditorPane html;

    public YAVHelp() {
  try {
      File f = new File ("help/index.html");
      String s = f.getAbsolutePath();
      s = "file:"+s;
      URL url = new URL(s);
      html = new JEditorPane(s);
      html.setEditable(false);
      html.addHyperlinkListener(this);

      JViewport vp = getViewport();
      vp.add(html);
  catch (MalformedURLException e) {
      System.out.println("Malformed URL: " + e);
  catch (IOException e) {
      System.out.println("IOException: " + e);
  }  
    }

    /**
     * Notification of a change relative to a 
     * hyperlink.
     */
    public void hyperlinkUpdate(HyperlinkEvent e) {
  if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
      linkActivated(e.getURL());
  }
    }

    /**
     * Follows the reference in an
     * link.  The given url is the requested reference.
     * By default this calls <a href="#setPage">setPage</a>,
     * and if an exception is thrown the original previous
     * document is restored and a beep sounded.  If an 
     * attempt was made to follow a link, but it represented
     * a malformed url, this method will be called with a
     * null argument.
     *
     @param u the URL to follow
     */
    protected void linkActivated(URL u) {
  Cursor c = html.getCursor();
  Cursor waitCursor = Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR);
  html.setCursor(waitCursor);
  SwingUtilities.invokeLater(new PageLoader(u, c));
    }

    /**
     * temporary class that loads synchronously (although
     * later than the request so that a cursor change
     * can be done).
     */
    class PageLoader implements Runnable {
  
  PageLoader(URL u, Cursor c) {
      url = u;
      cursor = c;
  }

        public void run() {
      if (url == null) {
    // restore the original cursor
    html.setCursor(cursor);

    // PENDING(prinz) remove this hack when 
    // automatic validation is activated.
    Container parent = html.getParent();
    parent.repaint();
      else {
    Document doc = html.getDocument();
    try {
        html.setPage(url);
    catch (IOException ioe) {
        html.setDocument(doc);
        getToolkit().beep();
    finally {
        // schedule the cursor to revert after
        // the paint has happended.
        url = null;
        SwingUtilities.invokeLater(this);
    }
      }
  }

  URL url;
  Cursor cursor;
    }

}