001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.actions;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.awt.event.ActionEvent;
007import java.awt.event.KeyEvent;
008
009import org.openstreetmap.josm.data.osm.DataSet;
010import org.openstreetmap.josm.tools.Shortcut;
011
012/**
013 * This allows to select a sequence of non-branching connected ways.
014 *
015 * @author Marko Mäkelä
016 */
017public class SelectNonBranchingWaySequencesAction extends JosmAction {
018
019    /**
020     * Creates a new {@link SelectNonBranchingWaySequencesAction}
021     */
022    public SelectNonBranchingWaySequencesAction() {
023        super(tr("Non-branching way sequences"),
024                "way-select",
025                tr("Select non-branching sequences of ways"),
026                Shortcut.registerShortcut("wayselector:wayselect", tr("Selection: {0}", tr("Non-branching way sequences")),
027                    KeyEvent.VK_W, Shortcut.SHIFT),
028                true);
029    }
030
031    @Override
032    public void actionPerformed(ActionEvent ev) {
033        DataSet ds = getLayerManager().getActiveDataSet();
034        SelectNonBranchingWaySequences ws = new SelectNonBranchingWaySequences(ds.getSelectedWays());
035        ws.extend(ds);
036    }
037
038    @Override
039    protected boolean listenToSelectionChange() {
040        return false;
041    }
042
043    /**
044     * Update the enabled state of the action when something in
045     * the JOSM state changes, i.e. when a layer is removed or added.
046     */
047    @Override
048    protected void updateEnabledState() {
049        setEnabled(getLayerManager().getActiveDataSet() != null);
050    }
051}