001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.actions;
003
004import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
005import static org.openstreetmap.josm.tools.I18n.tr;
006
007import java.awt.event.ActionEvent;
008import java.awt.event.KeyEvent;
009
010import org.openstreetmap.josm.data.osm.OsmData;
011import org.openstreetmap.josm.tools.Shortcut;
012
013/**
014 * User action to select all primitives in the current dataset.
015 */
016public class SelectAllAction extends JosmAction {
017
018    /**
019     * Constructs a new {@code SelectAllAction}.
020     */
021    public SelectAllAction() {
022        super(tr("Select All"), "selectall", tr("Select all undeleted objects in the data layer. This selects incomplete objects too."),
023                Shortcut.registerShortcut("system:selectall", tr("Edit: {0}", tr("Select All")), KeyEvent.VK_A, Shortcut.CTRL), true);
024        setHelpId(ht("/Action/SelectAll"));
025    }
026
027    @Override
028    public void actionPerformed(ActionEvent e) {
029        if (!isEnabled())
030            return;
031        OsmData<?, ?, ?, ?> ds = getLayerManager().getActiveData();
032        // Do not use method reference before the Java 11 migration
033        // Otherwise we face a compiler bug, see below:
034        // https://bugs.openjdk.java.net/browse/JDK-8141508
035        // https://bugs.openjdk.java.net/browse/JDK-8142476
036        // https://bugs.openjdk.java.net/browse/JDK-8191655
037        ds.setSelected(ds.getPrimitives(t -> t.isSelectable()));
038    }
039
040    /**
041     * Refreshes the enabled state
042     */
043    @Override
044    protected void updateEnabledState() {
045        setEnabled(getLayerManager().getActiveData() != null);
046    }
047}