Ticket #5745: SelectWayNodes.diff

File SelectWayNodes.diff, 5.0 KB (added by vetinari+osm@…, 15 years ago)

diff to latest SVN

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

     
     1// License: GPL. Copyright 2010 by Hanno Hecker
     2package org.openstreetmap.josm.actions;
     3
     4import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
     5import static org.openstreetmap.josm.tools.I18n.tr;
     6import static org.openstreetmap.josm.tools.I18n.trn;
     7
     8import java.awt.event.ActionEvent;
     9import java.awt.event.KeyEvent;
     10import java.util.ArrayList;
     11import java.util.Collection;
     12import java.util.Collections;
     13import java.util.HashSet;
     14import java.util.LinkedList;
     15import java.util.List;
     16
     17import javax.swing.JOptionPane;
     18import javax.swing.JPanel;
     19
     20import org.openstreetmap.josm.Main;
     21import org.openstreetmap.josm.command.AddCommand;
     22import org.openstreetmap.josm.command.ChangeCommand;
     23import org.openstreetmap.josm.command.Command;
     24import org.openstreetmap.josm.command.SequenceCommand;
     25import org.openstreetmap.josm.data.osm.Node;
     26import org.openstreetmap.josm.data.osm.OsmPrimitive;
     27import org.openstreetmap.josm.data.osm.Relation;
     28import org.openstreetmap.josm.data.osm.RelationMember;
     29import org.openstreetmap.josm.data.osm.Way;
     30import org.openstreetmap.josm.gui.MapView;
     31import org.openstreetmap.josm.tools.Shortcut;
     32
     33/**
     34 * Select all nodes of a selected way.
     35 *
     36 */
     37
     38public class SelectWayNodes extends JosmAction {
     39
     40    private Node selectedNode;
     41    private ArrayList<Node> selectedNodes;
     42
     43    /**
     44     * Create a new SelectWayNodesAction
     45     */
     46    public SelectWayNodes() {
     47        super(tr("Select Way Nodes"), null, tr("Select all nodes of a selected way."),
     48                Shortcut.registerShortcut("tools:selectwaynodes", tr("Tool: {0}", tr("Select Way Nodes")), KeyEvent.VK_N, Shortcut.GROUP_EDIT), true);
     49        putValue("help", ht("/Action/SelectWayNodes"));
     50    }
     51
     52    /**
     53     * Called when the action is executed.
     54     *
     55     * This method does some checking on the selection and calls the matching selectWayNodes method.
     56     */
     57    public void actionPerformed(ActionEvent e) {
     58        Collection<OsmPrimitive> selection = getCurrentDataSet().getSelected();
     59
     60        String errMsg = null;
     61        for (OsmPrimitive p : selection) {
     62            if (p instanceof Way) {
     63                Way w = (Way) p;
     64                if (!w.isUsable() || w.getNodesCount() < 1) {
     65                    continue;
     66                }
     67                selectWayNodes(w);
     68            }
     69            else if (p instanceof Node) {
     70                Node n = (Node) p;
     71                if (selectedNodes == null) {
     72                    selectedNodes = new ArrayList<Node>();
     73                }
     74                selectedNodes.add(n);
     75            }
     76        }
     77           
     78        getCurrentDataSet().setSelected(selectedNodes);
     79        selectedNodes = null;
     80    }
     81
     82    private void selectWayNodes(Way w) {
     83       
     84        for (Node n : w.getNodes()) {
     85            if (selectedNodes == null) {
     86                selectedNodes = new ArrayList<Node>();
     87            }
     88            selectedNodes.add(n);
     89        }
     90    }
     91
     92    @Override
     93    protected void updateEnabledState() {
     94        if (getCurrentDataSet() == null) {
     95            setEnabled(false);
     96        } else {
     97            updateEnabledState(getCurrentDataSet().getSelected());
     98        }
     99    }
     100
     101    @Override
     102    protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
     103        setEnabled(selection != null && !selection.isEmpty());
     104    }
     105}
  • src/org/openstreetmap/josm/gui/MainMenu.java

     
    6666import org.openstreetmap.josm.actions.SaveAction;
    6767import org.openstreetmap.josm.actions.SaveAsAction;
    6868import org.openstreetmap.josm.actions.SelectAllAction;
     69import org.openstreetmap.josm.actions.SelectWayNodes;
    6970import org.openstreetmap.josm.actions.ShowStatusReportAction;
    7071import org.openstreetmap.josm.actions.SimplifyWayAction;
    7172import org.openstreetmap.josm.actions.SplitWayAction;
     
    169170    public final JosmAction simplifyWay = new SimplifyWayAction();
    170171    public final JosmAction joinAreas = new JoinAreasAction();
    171172    public final JosmAction createMultipolygon = new CreateMultipolygonAction();
     173    public final JosmAction selectWayNodes = new SelectWayNodes();
    172174
    173175    /* Audio menu */
    174176    public final JosmAction audioPlayPause = new AudioPlayPauseAction();
     
    337339        toolsMenu.addSeparator();
    338340        add(toolsMenu, joinAreas);
    339341        add(toolsMenu, createMultipolygon);
     342        add(toolsMenu, selectWayNodes);
    340343
    341344        if (!Main.pref.getBoolean("audio.menuinvisible", false)) {
    342345            audioMenu = addMenu(marktr("Audio"), KeyEvent.VK_A, defaultMenuPos, ht("/Menu/Audio"));