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

Last change on this file since 5799 was 5799, checked in by akks, 11 years ago

Membership tabled in properties toggle dialog supports multiselect (and multiple membership deletion)
Property toggle dialog refactoring - methods splitting and reordering
see #7846: more RelationListDialog refactoring, all other relation-related actions separated from dialogs, @Override, JavaDocs

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 @Override
66 public void actionPerformed(ActionEvent e) {
67 if (!isEnabled() || relations.size()!=1) return;
68 launchEditor(relations.iterator().next());
69 }
70
71 @Override
72 protected void updateEnabledState() {
73 // only one selected relation can be edited
74 setEnabled( relations.size()==1 );
75 }
76}
Note: See TracBrowser for help on using the repository browser.