source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/layer/DuplicateAction.java@ 12396

Last change on this file since 12396 was 11505, checked in by Don-vip, 7 years ago

add non-regression unit test for #4539

  • Property svn:eol-style set to native
File size: 2.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.layer;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.event.ActionEvent;
7
8import javax.swing.AbstractAction;
9
10import org.openstreetmap.josm.Main;
11import org.openstreetmap.josm.data.osm.DataSet;
12import org.openstreetmap.josm.gui.dialogs.IEnabledStateUpdating;
13import org.openstreetmap.josm.gui.dialogs.LayerListDialog.LayerListModel;
14import org.openstreetmap.josm.gui.help.HelpUtil;
15import org.openstreetmap.josm.gui.layer.Layer;
16import org.openstreetmap.josm.gui.layer.OsmDataLayer;
17import org.openstreetmap.josm.tools.CheckParameterUtil;
18import org.openstreetmap.josm.tools.ImageProvider;
19
20/**
21 * The action to duplicate the given selected layer into another layer.
22 */
23public final class DuplicateAction extends AbstractAction implements IEnabledStateUpdating {
24 private transient Layer layer;
25 private final LayerListModel model;
26
27 /**
28 * Constructs a new {@code DuplicateAction}.
29 * @param layer the layer
30 * @param model layer list model
31 * @throws IllegalArgumentException if {@code layer} is null
32 */
33 public DuplicateAction(Layer layer, LayerListModel model) {
34 this(model);
35 CheckParameterUtil.ensureParameterNotNull(layer, "layer");
36 this.layer = layer;
37 updateEnabledState();
38 }
39
40 /**
41 * Constructs a new {@code DuplicateAction}.
42 * @param model layer list model
43 */
44 public DuplicateAction(LayerListModel model) {
45 this.model = model;
46 putValue(NAME, tr("Duplicate"));
47 putValue(SMALL_ICON, ImageProvider.get("dialogs", "duplicatelayer"));
48 putValue(SHORT_DESCRIPTION, tr("Duplicate this layer"));
49 putValue("help", HelpUtil.ht("/Dialog/LayerList#DuplicateLayer"));
50 updateEnabledState();
51 }
52
53 private static void duplicate(Layer layer) {
54 if (layer instanceof OsmDataLayer) {
55 String newName = LayerListTransferHandler.suggestNewLayerName(layer.getName(), Main.getLayerManager().getLayers());
56 OsmDataLayer oldLayer = (OsmDataLayer) layer;
57 Main.getLayerManager().addLayer(new OsmDataLayer(new DataSet(oldLayer.data), newName, null));
58 }
59 }
60
61 @Override
62 public void actionPerformed(ActionEvent e) {
63 if (layer != null) {
64 duplicate(layer);
65 } else {
66 duplicate(model.getSelectedLayers().get(0));
67 }
68 }
69
70 @Override
71 public void updateEnabledState() {
72 if (layer == null) {
73 if (model != null && model.getSelectedLayers().size() == 1) {
74 setEnabled(model.getSelectedLayers().get(0) instanceof OsmDataLayer);
75 } else {
76 setEnabled(false);
77 }
78 } else {
79 setEnabled(layer instanceof OsmDataLayer);
80 }
81 }
82}
Note: See TracBrowser for help on using the repository browser.