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

Last change on this file since 4701 was 4684, checked in by Don-vip, 12 years ago

see #7159 - Layer merging performance

  • Property svn:eol-style set to native
File size: 2.6 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(final 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 final Layer targetLayer = askTargetLayer(targetLayers);
50 if (targetLayer == null)
51 return;
52 Main.worker.submit(new Runnable() {
53 @Override
54 public void run() {
55 targetLayer.mergeFrom(sourceLayer);
56 Main.map.mapView.removeLayer(sourceLayer);
57 Main.map.mapView.setActiveLayer(targetLayer);
58 }
59 });
60 }
61
62 public void actionPerformed(ActionEvent e) {
63 Layer sourceLayer = Main.main.getEditLayer();
64 if (sourceLayer == null)
65 return;
66 merge(sourceLayer);
67 }
68
69 @Override
70 protected void updateEnabledState() {
71 if (getEditLayer() == null) {
72 setEnabled(false);
73 return;
74 }
75 setEnabled(!LayerListDialog.getInstance().getModel().getPossibleMergeTargets(getEditLayer()).isEmpty());
76 }
77}
Note: See TracBrowser for help on using the repository browser.