// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.actions; import static org.openstreetmap.josm.gui.help.HelpUtil.ht; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.event.KeyEvent; import java.util.Collection; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.data.notes.Note; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.OsmPrimitiveType; import org.openstreetmap.josm.tools.Shortcut; /** * Display object information about OSM nodes, ways, or relations in web browser. * @since 4408 */ public class InfoWebAction extends AbstractInfoAction { /** * Constructs a new {@code InfoWebAction}. */ public InfoWebAction() { super(tr("Advanced info (web)"), "info", tr("Display object information about OSM nodes, ways, or relations in web browser."), Shortcut.registerShortcut("core:infoweb", tr("Advanced info (web)"), KeyEvent.VK_I, Shortcut.CTRL_SHIFT), true, "action/infoweb", true); putValue("help", ht("/Action/InfoAboutElementsWeb")); } @Override protected String createInfoUrl(Object infoObject) { if (infoObject instanceof OsmPrimitive) { OsmPrimitive primitive = (OsmPrimitive) infoObject; return Main.getBaseBrowseUrl() + '/' + OsmPrimitiveType.from(primitive).getAPIName() + '/' + primitive.getId(); } else if (infoObject instanceof Note) { Note note = (Note) infoObject; return Main.getBaseBrowseUrl() + "/note/" + note.getId(); } else { return null; } } @Override protected void updateEnabledState() { super.updateEnabledState(); updateEnabledStateWithNotes(); } @Override protected void updateEnabledState(Collection selection) { super.updateEnabledState(selection); updateEnabledStateWithNotes(); } private void updateEnabledStateWithNotes() { // Allows enabling if a note is selected, even if no OSM object is selected if (!isEnabled() && Main.isDisplayingMapView() && Main.map.noteDialog.getSelectedNote() != null) { setEnabled(true); } } /** * Called when the note selection has changed. * TODO: make a proper listener mechanism to handle change of note selection * @since 8475 */ public final void noteSelectionChanged() { updateEnabledState(); } }