source: subversion/applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/actions/ExtractPointAction.java

Last change on this file was 34812, checked in by gerdp, 3 months ago

see #17187:

  • Replace deprecated methods
  • Remove dead code
  • Make Shift+Z (Select last modified nodes) work again + Repated Shift+Z cycles through the commands available in the undo tree + Ignore changes in other layers
  • Make Alt+Shift+Z (Select last modified Ways) work again (same logic as with Shift+Z)
  • fix some javadoc errors


File size: 3.3 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.plugins.utilsplugin2.actions;
3
4import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
5import static org.openstreetmap.josm.tools.I18n.tr;
6
7import java.awt.Point;
8import java.awt.event.ActionEvent;
9import java.awt.event.KeyEvent;
10import java.util.Collection;
11import java.util.LinkedList;
12import java.util.List;
13
14import javax.swing.JOptionPane;
15
16import org.openstreetmap.josm.actions.JosmAction;
17import org.openstreetmap.josm.command.AddCommand;
18import org.openstreetmap.josm.command.ChangeNodesCommand;
19import org.openstreetmap.josm.command.Command;
20import org.openstreetmap.josm.command.MoveCommand;
21import org.openstreetmap.josm.command.SequenceCommand;
22import org.openstreetmap.josm.data.UndoRedoHandler;
23import org.openstreetmap.josm.data.osm.DataSet;
24import org.openstreetmap.josm.data.osm.Node;
25import org.openstreetmap.josm.data.osm.OsmPrimitive;
26import org.openstreetmap.josm.data.osm.Way;
27import org.openstreetmap.josm.gui.MainApplication;
28import org.openstreetmap.josm.gui.Notification;
29import org.openstreetmap.josm.tools.Shortcut;
30
31/**
32 * Extracts node from its ways.
33 */
34public class ExtractPointAction extends JosmAction {
35
36    /**
37     * Constructs a new {@code ExtractPointAction}.
38     */
39    public ExtractPointAction() {
40        super(tr("Extract node"), "extnode",
41                tr("Extracts node from a way"),
42                Shortcut.registerShortcut("tools:extnode", tr("Tool: {0}", "Extract node"),
43                        KeyEvent.VK_J, Shortcut.ALT_SHIFT), true);
44        putValue("help", ht("/Action/ExtractNode"));
45    }
46
47    @Override
48    public void actionPerformed(ActionEvent e) {
49        DataSet ds = getLayerManager().getEditDataSet();
50        Collection<Node> selectedNodes = ds.getSelectedNodes();
51        if (selectedNodes.size() != 1) {
52            new Notification(tr("This tool extracts node from its ways and requires single node to be selected."))
53            .setIcon(JOptionPane.WARNING_MESSAGE).show();
54            return;
55        }
56        Node nd = selectedNodes.iterator().next();
57        Node ndCopy = new Node(nd.getCoor());
58        List<Command> cmds = new LinkedList<>();
59
60        Point p = MainApplication.getMap().mapView.getMousePosition();
61        if (p != null)
62            cmds.add(new MoveCommand(nd, MainApplication.getMap().mapView.getLatLon(p.x, p.y)));
63        List<OsmPrimitive> refs = nd.getReferrers();
64        cmds.add(new AddCommand(ds, ndCopy));
65
66        for (OsmPrimitive pr: refs) {
67            if (pr instanceof Way) {
68                Way w = (Way) pr;
69                List<Node> nodes = w.getNodes();
70                int idx = nodes.indexOf(nd);
71                nodes.set(idx, ndCopy); // replace node with its copy
72                cmds.add(new ChangeNodesCommand(w, nodes));
73            }
74        }
75        if (cmds.size() > 1) UndoRedoHandler.getInstance().add(new SequenceCommand(tr("Extract node from line"), cmds));
76    }
77
78    @Override
79    protected void updateEnabledState() {
80        updateEnabledStateOnCurrentSelection();
81    }
82
83    @Override
84    protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
85        if (selection == null) {
86            setEnabled(false);
87            return;
88        }
89        setEnabled(selection.size() == 1);
90    }
91}
Note: See TracBrowser for help on using the repository browser.