source: josm/trunk/src/org/openstreetmap/josm/actions/MergeSelectionAction.java@ 2001

Last change on this file since 2001 was 1890, checked in by Gubaer, 15 years ago

update: rewrite of layer dialog
new: allows multiple selection of layers in the dialog
new: move up, move down, toggle visibility, and delete on multiple layers
new: merge from an arbitrary layer into another layer, not only from the first into the second
new: new action for merging of the currently selected primitives on an arbitrary layer
new: make "active" layer explicit (special icon); activating a layer automatically moves it in the first position
refactoring: public fields 'name' and 'visible' on Layer are @deprecated. Use the setter/getters instead, Layer now emits PropertyChangeEvents if name or visibility are changed.

File size: 2.1 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.event.ActionEvent;
7import java.awt.event.KeyEvent;
8import java.util.List;
9
10import org.openstreetmap.josm.Main;
11import org.openstreetmap.josm.data.osm.DataSet;
12import org.openstreetmap.josm.data.osm.visitor.MergeSourceBuildingVisitor;
13import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
14import org.openstreetmap.josm.gui.layer.Layer;
15import org.openstreetmap.josm.gui.layer.OsmDataLayer;
16import org.openstreetmap.josm.tools.Shortcut;
17
18public class MergeSelectionAction extends AbstractMergeAction {
19 public MergeSelectionAction() {
20 super(tr("Merge selection"), "dialogs/mergedown", tr("Merge the currently selected primitives into another layer"), Shortcut
21 .registerShortcut("system:mergeselection", tr("Edit: {0}", tr("Merge selection")), KeyEvent.VK_M, Shortcut.GROUP_MENU, Shortcut.SHIFT_DEFAULT),
22 true /* register */
23 );
24 }
25
26 public void mergeSelected(DataSet source) {
27 List<Layer> targetLayers = LayerListDialog.getInstance().getModel().getPossibleMergeTargets(getEditLayer());
28 if (targetLayers.isEmpty()) {
29 warnNoTargetLayersForSourceLayer(getEditLayer());
30 return;
31 }
32 Layer targetLayer = askTargetLayer(targetLayers);
33 if (targetLayer == null)
34 return;
35 MergeSourceBuildingVisitor builder = new MergeSourceBuildingVisitor(getEditLayer().data);
36 ((OsmDataLayer)targetLayer).mergeFrom(builder.build());
37 }
38
39
40 public void actionPerformed(ActionEvent e) {
41 if (getEditLayer() == null || getEditLayer().data.getSelected().isEmpty())
42 return;
43 mergeSelected(getEditLayer().data);
44 }
45
46 @Override
47 protected void updateEnabledState() {
48 if (getEditLayer() == null) {
49 setEnabled(false);
50 return;
51 }
52 setEnabled(!getEditLayer().data.getSelected().isEmpty());
53 }
54
55
56
57}
Note: See TracBrowser for help on using the repository browser.