/* * @(#)HelpInterfaceImpl.java */ package jas.util; import java.awt.Window; import java.net.URL; import java.util.Enumeration; //import javax.help.DefaultHelpBroker; //import javax.help.HelpSet; //import javax.help.HelpSetException; //import javax.help.Map.ID; import javax.swing.SwingUtilities; /** * HelpInterfaceImpl implements the HelpInterface. It is the only class which contains * references to javax.help.* Since it is only referred to as a String in a Class.forName * call, this allows the system to function if the help system is missing. * * @author Peter Armstrong * */ class HelpInterfaceImpl implements HelpInterface { HelpInterfaceImpl() throws HelpException { createHelpSet(); } public void showHelpTopic(String helpTopicTarget, Window owner) { showHelpTopic(helpTopicTarget, "TOC", owner); } public void showHelpTopic(String helpTopicTarget, String navigatorView, Window owner) { // try // { // ID id = ID.create(helpTopicTarget, mainHS); // if (id == null) { id = mainHS.getHomeID(); } // // mainHB.setActivationWindow(owner); // mainHB.setCurrentView(navigatorView); // mainHB.setCurrentID(id); // mainHB.setDisplayed(true); // } // catch (Exception eek) // { // Application.getApplication().error("Sorry, the help topic could not be found."); // } } public void modalDialogOpening(final java.awt.Dialog dlg) { // if (debugHelp) System.out.println("modelDialogOpening "+mainHB.isDisplayed()); // It turns out that the modal dialog workaround must be done AFTER the dialog // has become modal. This code seems to do the trick, but how robust is it?? // TODO: If we were smarter, we could keep track of who owned the help broker // before the dialog was opened, and put things back afterwards. // If java were smarter (and allowed multiple independent GUI apps within one // JVM), this would all be unnecessary. // if (mainHB.isDisplayed()) SwingUtilities.invokeLater(new Runnable() // { // public void run() // { // mainHB.setActivationWindow(dlg); // mainHB.setDisplayed(true); // } // }); } public void modalDialogClosing(java.awt.Dialog dlg) { // if (debugHelp) System.out.println("modelDialogClosing "+mainHB.isDisplayed()); // mainHB.setActivationWindow(null); } /** * Find the HelpSet and initialize the main HelpBroker (mainHB). */ private void createHelpSet() throws HelpException { Enumeration e = Application.getApplication().getHelpLocations(); while (e.hasMoreElements()) { // try // { // URL u = (URL) e.nextElement(); // if (debugHelp) System.out.print("Looking for hs at: "+u+" ... "); // mainHS = new HelpSet(null, u); // if (debugHelp) System.out.println("Success"); // break; // } // catch (HelpSetException e1) // { // if (debugHelp) System.out.println("Failed"); // } } // if (mainHS == null) throw new HelpException("No HelpSet found"); // // try // { // mainHB = (DefaultHelpBroker) mainHS.createHelpBroker(); // } // catch (Throwable x) // { // throw new HelpException("Could not create Help Broker",x); // } } // private HelpSet mainHS; // private DefaultHelpBroker mainHB; private final boolean debugHelp = System.getProperty("debugHelp") != null; } class HelpException extends NestedException { HelpException(String s) { super(s); } HelpException(String s, Throwable t) { super(s,t); } }