source: josm/trunk/src/org/openstreetmap/josm/actions/MergeLayerAction.java@ 4265

Last change on this file since 4265 was 4265, checked in by jttt, 13 years ago

Make merge layers work when more than one layer is selected

  • Property svn:eol-style set to native
File size: 2.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions;
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.List;
10
11import org.openstreetmap.josm.Main;
12import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
13import org.openstreetmap.josm.gui.layer.Layer;
14import org.openstreetmap.josm.tools.Shortcut;
15
16public class MergeLayerAction extends AbstractMergeAction {
17
18 public MergeLayerAction() {
19 super(tr("Merge layer"), "dialogs/mergedown", tr("Merge the current layer into another layer"), Shortcut
20 .registerShortcut("system:merge", tr("Edit: {0}", tr("Merge")), KeyEvent.VK_M, Shortcut.GROUP_MENU),
21 false /* register */
22 );
23 putValue("help", ht("/Action/MergeLayer"));
24 putValue("toolbar", "action/mergelayer");
25 Main.toolbar.register(this);
26 }
27
28 public void merge(List<Layer> sourceLayers) {
29 Layer targetLayer = askTargetLayer(sourceLayers);
30 if (targetLayer == null)
31 return;
32 for (Layer l: sourceLayers) {
33 if (l != targetLayer) {
34 targetLayer.mergeFrom(l);
35 Main.map.mapView.removeLayer(l);
36 }
37 }
38 Main.map.mapView.setActiveLayer(targetLayer);
39 }
40
41 public void merge(Layer sourceLayer) {
42 if (sourceLayer == null)
43 return;
44 List<Layer> targetLayers = LayerListDialog.getInstance().getModel().getPossibleMergeTargets(sourceLayer);
45 if (targetLayers.isEmpty()) {
46 warnNoTargetLayersForSourceLayer(sourceLayer);
47 return;
48 }
49 Layer targetLayer = askTargetLayer(targetLayers);
50 if (targetLayer == null)
51 return;
52 targetLayer.mergeFrom(sourceLayer);
53 Main.map.mapView.removeLayer(sourceLayer);
54 Main.map.mapView.setActiveLayer(targetLayer);
55 }
56
57 public void actionPerformed(ActionEvent e) {
58 Layer sourceLayer = Main.main.getEditLayer();
59 if (sourceLayer == null)
60 return;
61 merge(sourceLayer);
62 }
63
64 @Override
65 protected void updateEnabledState() {
66 if (getEditLayer() == null) {
67 setEnabled(false);
68 return;
69 }
70 setEnabled(!LayerListDialog.getInstance().getModel().getPossibleMergeTargets(getEditLayer()).isEmpty());
71 }
72}
Note: See TracBrowser for help on using the repository browser.