*/
package jalview.gui;
+import java.awt.Point;
import java.net.URL;
import javax.help.BadIDException;
}
}
- private static final long HALF_A_MO = 500; // half a second
-
- private static long lastOpenedTime = 0L;
+ private static HelpBroker hb;
/**
* Not instantiable
}
/**
- * Show help text in a new window. But do nothing if within half a second of
- * the last invocation.
- *
- * This is a workaround for issue JAL-914 - both Desktop and AlignFrame
- * responding to F1 key, resulting in duplicate help windows opened.
+ * Shows the help window, at the entry specified by the given helpId
*
* @param id
- * TODO
*
* @throws HelpSetException
*/
public static void showHelpWindow(HelpId id) throws HelpSetException
{
- long timeNow = System.currentTimeMillis();
+ ClassLoader cl = Desktop.class.getClassLoader();
+ URL url = HelpSet.findHelpSet(cl, "help/help"); // $NON-NLS-$
+ HelpSet hs = new HelpSet(cl, url);
- if (timeNow - lastOpenedTime > HALF_A_MO)
+ if (hb == null)
{
- lastOpenedTime = timeNow;
- ClassLoader cl = Desktop.class.getClassLoader();
- URL url = HelpSet.findHelpSet(cl, "help/help"); // $NON-NLS-$
- HelpSet hs = new HelpSet(cl, url);
+ /*
+ * create help broker first time (only)
+ */
+ hb = hs.createHelpBroker();
+ }
- HelpBroker hb = hs.createHelpBroker();
- try
- {
- hb.setCurrentID(id.toString());
- } catch (BadIDException bad)
- {
- System.out.println("Bad help link: " + id.toString()
- + ": must match a target in help.jhm");
- throw bad;
- }
- hb.setDisplayed(true);
+ try
+ {
+ hb.setCurrentID(id.toString());
+ } catch (BadIDException bad)
+ {
+ System.out.println("Bad help link: " + id.toString()
+ + ": must match a target in help.jhm");
+ throw bad;
}
+
+ /*
+ * set Help visible - at its current location if it is already shown,
+ * else at a location as determined by the window manager
+ */
+ Point p = hb.getLocation();
+ hb.setLocation(p);
+ hb.setDisplayed(true);
}
+ /**
+ * Show the Help window at the root entry
+ *
+ * @throws HelpSetException
+ */
public static void showHelpWindow() throws HelpSetException
{
showHelpWindow(HelpId.Home);