Ticket #2779: josm-info-about-element.patch

File josm-info-about-element.patch, 4.5 KB (added by avarab@…, 16 years ago)

Add "Info about Element" feature

  • src/org/openstreetmap/josm/actions/InfoAction.java

     
     1//License: GPL. Copyright 2007 by Immanuel Scholz and others
     2package org.openstreetmap.josm.actions;
     3
     4import static org.openstreetmap.josm.tools.I18n.tr;
     5
     6import java.awt.event.ActionEvent;
     7import java.awt.event.KeyEvent;
     8import java.util.Collection;
     9import java.util.LinkedList;
     10import java.util.regex.Pattern;
     11
     12import javax.swing.JOptionPane;
     13
     14import org.openstreetmap.josm.Main;
     15import org.openstreetmap.josm.data.osm.Node;
     16import org.openstreetmap.josm.data.osm.OsmPrimitive;
     17import org.openstreetmap.josm.data.osm.Relation;
     18import org.openstreetmap.josm.data.osm.Way;
     19import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
     20import org.openstreetmap.josm.tools.OpenBrowser;
     21import org.openstreetmap.josm.tools.Shortcut;
     22
     23public class InfoAction extends JosmAction {
     24
     25    public InfoAction() {
     26        super(tr("Info about Element"), "about",
     27        tr("Display object information about OSM notes, ways and relations."),
     28        Shortcut.registerShortcut("core:information",
     29        tr("Info about Element"), KeyEvent.VK_I, Shortcut.GROUP_HOTKEY), true);
     30    }
     31
     32    /**
     33     * replies the base URL for browsing information about an OSM primitive
     34     *
     35     * @return the base URL, i.e. http://api.openstreetmap.org/browse
     36     */
     37    protected String getBaseURL() {
     38        String baseUrl = Main.pref.get("osm-server.url", "http://api.openstreetmap.org/api");
     39        Pattern pattern = Pattern.compile("/api/?$");
     40        String ret =  pattern.matcher(baseUrl).replaceAll("/browse");
     41        if (ret.equals(baseUrl)) {
     42            System.out.println("WARNING: unexpected format of API base URL. Redirection to information page for OSM primitive will probably fail. API base URL is: " + baseUrl);
     43        }
     44        return ret;
     45    }
     46
     47    public void actionPerformed(ActionEvent e) {
     48        final Collection<Object> sel = new LinkedList<Object>();
     49        final String baseUrl  = getBaseURL();
     50        new AbstractVisitor() {
     51            public void visit(Node n) {
     52                if(n.id <= 0) return;
     53                OpenBrowser.displayUrl(baseUrl + "/node/" + n.id);
     54                sel.add(n);
     55            }
     56
     57            public void visit(Way w) {
     58                if(w.id <= 0) return;
     59                OpenBrowser.displayUrl(baseUrl + "/way/" + w.id);
     60                sel.add(w);
     61            }
     62
     63            public void visit(Relation e) {
     64                if(e.id <= 0) return;
     65                OpenBrowser.displayUrl(baseUrl + "/relation/" + e.id);
     66                sel.add(e);
     67            }
     68
     69            public void visitAll() {
     70                for (OsmPrimitive osm : Main.ds.getSelected())
     71                    osm.visit(this);
     72            }
     73        }.visitAll();
     74
     75        if (sel.isEmpty()) {
     76            JOptionPane.showMessageDialog(Main.parent,
     77            tr("Please select at least one node, way or relation. Only already uploaded elements have information on the server."));
     78                return;
     79        }
     80    }
     81}
  • src/org/openstreetmap/josm/gui/MainMenu.java

     
    3737import org.openstreetmap.josm.actions.ExitAction;
    3838import org.openstreetmap.josm.actions.GpxExportAction;
    3939import org.openstreetmap.josm.actions.HelpAction;
     40import org.openstreetmap.josm.actions.InfoAction;
    4041import org.openstreetmap.josm.actions.HistoryInfoAction;
    4142import org.openstreetmap.josm.actions.JoinNodeWayAction;
    4243import org.openstreetmap.josm.actions.JosmAction;
     
    129130    public final JosmAction mergeNodes = new MergeNodesAction();
    130131    public final JosmAction joinNodeWay = new JoinNodeWayAction();
    131132    public final JosmAction unglueNodes = new UnGlueAction();
     133    public final InfoAction info = new InfoAction();
    132134    public final HistoryInfoAction historyinfo = new HistoryInfoAction();
    133135
    134136    /* Audio menu */
     
    283285        add(toolsMenu, joinNodeWay);
    284286        add(toolsMenu, unglueNodes);
    285287        toolsMenu.addSeparator();
     288        add(toolsMenu, info);
    286289        add(toolsMenu, historyinfo);
    287290
    288291        if (!Main.pref.getBoolean("audio.menuinvisible", false)) {