source: subversion/applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/selection/SelectModWaysAction.java

Last change on this file was 34932, checked in by gerdp, 4 weeks ago

fix #17483: respect active filters in select actions provided by utilsplugin2

File size: 3.1 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.plugins.utilsplugin2.selection;
3
4import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
5import static org.openstreetmap.josm.tools.I18n.tr;
6
7import java.awt.event.ActionEvent;
8import java.awt.event.KeyEvent;
9import java.util.Collection;
10import java.util.HashSet;
11import java.util.Set;
12
13import org.openstreetmap.josm.actions.JosmAction;
14import org.openstreetmap.josm.command.Command;
15import org.openstreetmap.josm.data.UndoRedoHandler;
16import org.openstreetmap.josm.data.osm.DataSet;
17import org.openstreetmap.josm.data.osm.OsmPrimitive;
18import org.openstreetmap.josm.data.osm.Way;
19import org.openstreetmap.josm.tools.Shortcut;
20
21/**
22 * Select last modified ways.
23 */
24public class SelectModWaysAction extends JosmAction {
25    private Command lastCmd;
26
27    public SelectModWaysAction() {
28        super(tr("Select last modified ways"), "selmodways",
29                tr("Select last modified ways"),
30                Shortcut.registerShortcut("tools:selmodways", tr("Tool: {0}", "Select last modified ways"),
31                        KeyEvent.VK_Z, Shortcut.ALT_SHIFT), true);
32        putValue("help", ht("/Action/SelectLastModifiedWays"));
33    }
34
35    @Override
36    public void actionPerformed(ActionEvent e) {
37        DataSet ds = getLayerManager().getEditDataSet();
38        if (ds != null) {
39            ds.clearSelection(ds.getSelectedNodes());
40            Command cmd;
41
42            if (UndoRedoHandler.getInstance().commands == null) return;
43            int num = UndoRedoHandler.getInstance().commands.size();
44            if (num == 0) return;
45            int k = 0, idx;
46            // check if executed again, we cycle through all available commands
47            if (lastCmd != null && !ds.getSelectedWays().isEmpty()) {
48                idx = UndoRedoHandler.getInstance().commands.lastIndexOf(lastCmd);
49            } else {
50                idx = num;
51            }
52
53            Set<Way> ways = new HashSet<>(10);
54            do {  //  select next history element
55                if (idx > 0) idx--; else idx = num-1;
56                cmd = UndoRedoHandler.getInstance().commands.get(idx);
57                if (cmd.getAffectedDataSet() == ds) {
58                    Collection<? extends OsmPrimitive> pp = cmd.getParticipatingPrimitives();
59                    ways.clear();
60                    for (OsmPrimitive p : pp) {
61                        // find all affected ways
62                        if (p instanceof Way && !p.isDeleted() && !p.isDisabled())
63                            ways.add((Way) p);
64                    }
65                    if (!ways.isEmpty() && !ds.getSelectedWays().containsAll(ways)) {
66                        ds.setSelected(ways);
67                        lastCmd = cmd; // remember last used command and last selection
68                        return;
69                    }
70                }
71                k++;
72            } while (k < num); // try to find previous command if this affects nothing
73            lastCmd = null;
74        }
75    }
76
77    @Override
78    protected void updateEnabledState() {
79        setEnabled(getLayerManager().getEditDataSet() != null);
80    }
81}
Note: See TracBrowser for help on using the repository browser.