+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.gui;
+import jalview.util.BrowserLauncher;
+import jalview.util.Platform;
+
+import java.awt.Point;
+import java.io.IOException;
import java.net.URL;
import javax.help.BadIDException;
import javax.help.HelpSetException;
/**
- * Utility class to show the help documentation window.
+ * Utility class to show the help documentation window
*
* @author gmcarstairs
- *
*/
public class Help
{
+ private static final String HELP_PAGE_ROOT = "http://www.jalview.org/help/";
+
+ /**
+ * Defines selected help targets with links to inbuilt (Java) help page target,
+ * and externally hosted help page. Will need to be maintained manually if help
+ * pages are reorganised in future.
+ */
public enum HelpId
{
- Home("home"), SequenceFeatureSettings("seqfeatures.settings"), StructureViewer(
- "viewingpdbs");
+ Home("home", "help.html"), SequenceFeatureSettings("seqfeatures.settings", "html/features/featuresettings.html"),
+ StructureViewer("viewingpdbs", "html/features/viewingpdbs.html"), PdbFts("pdbfts", "html/features/pdbsequencefetcher.html#pdbfts"),
+ UniprotFts("uniprotfts", "html/features/uniprotsequencefetcher.html#uniprotfts");
private String id;
+
+ private String path;
- private HelpId(String loc)
+ private HelpId(String hepLoc, String htmlPath)
{
- this.id = loc;
+ this.id = hepLoc;
+ this.path = htmlPath;
}
- @Override
- public String toString()
+ String getId()
{
return this.id;
}
- }
- private static final long HALF_A_MO = 500; // half a second
+ String getPath()
+ {
+ return this.path;
+ }
+ }
- 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.
+ * Shows the help window, at the entry specified by the given helpId
*
- * This is a workaround for issue JAL-914 - both Desktop and AlignFrame
- * responding to F1 key, resulting in duplicate help windows opened.
- * @param id TODO
+ * @param id
*
* @throws HelpSetException
*/
public static void showHelpWindow(HelpId id) throws HelpSetException
{
- long timeNow = System.currentTimeMillis();
-
- if (timeNow - lastOpenedTime > HALF_A_MO)
+ if (Platform.isJS())
+ {
+ try
+ {
+ BrowserLauncher.openURL(HELP_PAGE_ROOT + id.getPath());
+ } catch (IOException e)
+ {
+ }
+ }
+ else
+ /**
+ * Java only
+ *
+ * @j2sNative
+ */
{
- lastOpenedTime = timeNow;
+
ClassLoader cl = Desktop.class.getClassLoader();
URL url = HelpSet.findHelpSet(cl, "help/help"); // $NON-NLS-$
HelpSet hs = new HelpSet(cl, url);
- HelpBroker hb = hs.createHelpBroker();
+ if (hb == null)
+ {
+ /*
+ * create help broker first time (only)
+ */
+ hb = hs.createHelpBroker();
+ }
+
try
{
- hb.setCurrentID(id.toString());
+ hb.setCurrentID(id.getId());
} catch (BadIDException bad)
{
- System.out.println("Bad help link: " + id.toString()
+ System.out.println("Bad help link: " + id.getId()
+ ": 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);