001    // License: GPL. Copyright 2007 by Immanuel Scholz and others
002    package org.openstreetmap.josm.actions;
003    
004    import static org.openstreetmap.josm.tools.I18n.tr;
005    
006    import java.awt.Component;
007    import java.awt.Point;
008    import java.awt.event.ActionEvent;
009    
010    import javax.swing.AbstractAction;
011    import javax.swing.SwingUtilities;
012    
013    import org.openstreetmap.josm.Main;
014    import org.openstreetmap.josm.gui.help.HelpBrowser;
015    import org.openstreetmap.josm.gui.help.HelpUtil;
016    import org.openstreetmap.josm.tools.ImageProvider;
017    
018    /**
019     * Open a help browser and displays lightweight online help.
020     *
021     */
022    public class HelpAction extends AbstractAction {
023    
024        public HelpAction() {
025            super(tr("Help"), ImageProvider.get("help"));
026            putValue("toolbar", "help");
027        }
028    
029        public void actionPerformed(ActionEvent e) {
030            if (e.getActionCommand() == null) {
031                String topic;
032                if (e.getSource() instanceof Component) {
033                    Component c = SwingUtilities.getRoot((Component)e.getSource());
034                    Point mouse = c.getMousePosition();
035                    if (mouse != null) {
036                        c = SwingUtilities.getDeepestComponentAt(c, mouse.x, mouse.y);
037                        topic = HelpUtil.getContextSpecificHelpTopic(c);
038                    } else {
039                        topic = null;
040                    }
041                } else {
042                    Point mouse = Main.parent.getMousePosition();
043                    topic = HelpUtil.getContextSpecificHelpTopic(SwingUtilities.getDeepestComponentAt(Main.parent, mouse.x, mouse.y));
044                }
045                if (topic == null) {
046                    HelpBrowser.setUrlForHelpTopic("/");
047                } else {
048                    HelpBrowser.setUrlForHelpTopic(topic);
049                }
050            } else {
051                HelpBrowser.setUrlForHelpTopic("/");
052            }
053        }
054    }