source: josm/trunk/src/org/openstreetmap/josm/actions/relation/EditRelationAction.java@ 5794

Last change on this file since 5794 was 5794, checked in by Don-vip, 11 years ago

see #7846 - fix copyright + javadoc + potential NPEs

File size: 2.7 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions.relation;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.event.ActionEvent;
7import java.util.Collection;
8import java.util.HashSet;
9import java.util.Set;
10
11import org.openstreetmap.josm.Main;
12import org.openstreetmap.josm.data.osm.OsmPrimitive;
13import org.openstreetmap.josm.data.osm.Relation;
14import org.openstreetmap.josm.data.osm.RelationMember;
15import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
16import org.openstreetmap.josm.gui.layer.OsmDataLayer;
17import org.openstreetmap.josm.tools.ImageProvider;
18
19/**
20 * The action for editing a relation
21 * @since 5793
22 */
23public class EditRelationAction extends AbstractRelationAction {
24
25 /**
26 * Constructs a new <code>EditRelationAction</code>.
27 */
28 public EditRelationAction() {
29 putValue(NAME, tr("Edit"));
30 putValue(SHORT_DESCRIPTION, tr("Call relation editor for selected relation"));
31 putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
32 }
33
34 /**
35 * Returns the set of currently selected relation members for the given relation.
36 * @param r The relation to inspect
37 * @return The set of currently selected relation members for the given relation.
38 */
39 public static Set<RelationMember> getMembersForCurrentSelection(Relation r) {
40 Set<RelationMember> members = new HashSet<RelationMember>();
41 if (Main.map != null && Main.map.mapView != null) {
42 OsmDataLayer editLayer = Main.map.mapView.getEditLayer();
43 if (editLayer != null && editLayer.data != null) {
44 Collection<OsmPrimitive> selection = editLayer.data.getSelected();
45 for (RelationMember member: r.getMembers()) {
46 if (selection.contains(member.getMember())) {
47 members.add(member);
48 }
49 }
50 }
51 }
52 return members;
53 }
54
55 /**
56 * Launches relation editor for the given relation.
57 * @param toEdit The relation to edit
58 */
59 public static void launchEditor(Relation toEdit) {
60 if (toEdit == null || Main.map==null || Main.map.mapView==null) return;
61 RelationEditor.getEditor(Main.map.mapView.getEditLayer(), toEdit,
62 getMembersForCurrentSelection(toEdit)).setVisible(true);
63 }
64
65 public void actionPerformed(ActionEvent e) {
66 if (!isEnabled() || relations.size()!=1) return;
67 launchEditor(relations.iterator().next());
68 }
69
70 @Override
71 protected void updateEnabledState() {
72 // only one selected relation can be edited
73 setEnabled( relations.size()==1 );
74 }
75}
Note: See TracBrowser for help on using the repository browser.