Ticket #20624: 20624.patch

File 20624.patch, 3.8 KB (added by GerdP, 3 years ago)
  • src/org/openstreetmap/josm/actions/CopyUrlAction.java

     
     1// License: GPL. For details, see LICENSE file.
     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.Collections;
     10import java.util.stream.Collectors;
     11
     12import org.openstreetmap.josm.data.osm.DataSet;
     13import org.openstreetmap.josm.data.osm.OsmPrimitive;
     14import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     15import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
     16import org.openstreetmap.josm.spi.preferences.Config;
     17import org.openstreetmap.josm.tools.Shortcut;
     18
     19/**
     20 * User action to copy the URL of one or several object(s) to the clipboard.
     21 * @since xxx
     22 */
     23public class CopyUrlAction extends JosmAction {
     24
     25    /**
     26     * Constructs a new {@code CopyCoordinatesAction}.
     27     */
     28    public CopyUrlAction() {
     29        super(tr("Copy URLs"), "copy",
     30                tr("Copy URLs of selected objects to clipboard."),
     31                Shortcut.registerShortcut("copy:urls", tr("Edit: {0}", tr("Copy URLs")),
     32                        KeyEvent.CHAR_UNDEFINED, Shortcut.NONE),
     33                false);
     34        setToolbarId("copy/urls");
     35    }
     36
     37    @Override
     38    public void actionPerformed(ActionEvent ae) {
     39        final String base =Config.getUrls().getBaseBrowseUrl() + '/';
     40        String string = getSelected().stream()
     41                .filter(p -> !p.isNew())
     42                .map(p -> base + OsmPrimitiveType.from(p).getAPIName() + '/' + p.getOsmId())
     43                .collect(Collectors.joining("\n"));
     44        ClipboardUtils.copyString(string);
     45    }
     46
     47    @Override
     48    protected void updateEnabledState() {
     49        setEnabled(!getSelected().isEmpty());
     50    }
     51
     52    @Override
     53    protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
     54        updateEnabledState();
     55    }
     56
     57    private Collection<OsmPrimitive> getSelected() {
     58        DataSet ds = getLayerManager().getActiveDataSet();
     59        if (ds == null) {
     60            return Collections.emptyList();
     61        } else {
     62            return ds.getSelected();
     63        }
     64    }
     65}
  • src/org/openstreetmap/josm/gui/MainMenu.java

     
    3939import org.openstreetmap.josm.actions.CombineWayAction;
    4040import org.openstreetmap.josm.actions.CopyAction;
    4141import org.openstreetmap.josm.actions.CopyCoordinatesAction;
     42import org.openstreetmap.josm.actions.CopyUrlAction;
    4243import org.openstreetmap.josm.actions.CreateCircleAction;
    4344import org.openstreetmap.josm.actions.CreateMultipolygonAction;
    4445import org.openstreetmap.josm.actions.DeleteAction;
     
    214215    public final RedoAction redo = new RedoAction();
    215216    /** Edit / Copy */
    216217    public final CopyAction copy = new CopyAction();
     218    /** Edit / Copy URLs*/
     219    public final CopyUrlAction copyUrl = new CopyUrlAction();
    217220    /** Edit / Copy Coordinates */
    218221    public final JosmAction copyCoordinates = new CopyCoordinatesAction();
    219222    /** Edit / Paste */
     
    767770        editMenu.addSeparator();
    768771        add(editMenu, copy);
    769772        add(editMenu, copyCoordinates, true);
     773        add(editMenu, copyUrl, true);
    770774        add(editMenu, paste);
    771775        add(editMenu, pasteAtSource, true);
    772776        add(editMenu, pasteTags);