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

Last change on this file since 7937 was 7937, checked in by bastiK, 9 years ago

add subversion property svn:eol=native

  • Property svn:eol-style set to native
File size: 3.6 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;
5import static org.openstreetmap.josm.tools.I18n.trn;
6
7import java.awt.event.ActionEvent;
8import java.util.Collection;
9import java.util.HashSet;
10import java.util.Set;
11
12import javax.swing.JOptionPane;
13
14import org.openstreetmap.josm.Main;
15import org.openstreetmap.josm.data.osm.OsmPrimitive;
16import org.openstreetmap.josm.data.osm.Relation;
17import org.openstreetmap.josm.data.osm.RelationMember;
18import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
19import org.openstreetmap.josm.gui.layer.OsmDataLayer;
20import org.openstreetmap.josm.tools.ImageProvider;
21
22/**
23 * The action for editing a relation.
24 * @since 5793
25 */
26public class EditRelationAction extends AbstractRelationAction {
27
28 /**
29 * Constructs a new <code>EditRelationAction</code>.
30 */
31 public EditRelationAction() {
32 putValue(NAME, tr("Edit"));
33 putValue(SHORT_DESCRIPTION, tr("Call relation editor for selected relation"));
34 putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
35 }
36
37 /**
38 * Returns the set of currently selected relation members for the given relation.
39 * @param r The relation to inspect
40 * @return The set of currently selected relation members for the given relation.
41 */
42 public static Set<RelationMember> getMembersForCurrentSelection(Relation r) {
43 Set<RelationMember> members = new HashSet<>();
44 if (Main.isDisplayingMapView()) {
45 OsmDataLayer editLayer = Main.main.getEditLayer();
46 if (editLayer != null && editLayer.data != null) {
47 Collection<OsmPrimitive> selection = editLayer.data.getSelected();
48 for (RelationMember member: r.getMembers()) {
49 if (selection.contains(member.getMember())) {
50 members.add(member);
51 }
52 }
53 }
54 }
55 return members;
56 }
57
58 /**
59 * Launches relation editor for the given relation.
60 * @param toEdit The relation to edit
61 */
62 public static void launchEditor(Relation toEdit) {
63 if (toEdit == null || toEdit.isDeleted() || !Main.isDisplayingMapView()) return;
64 RelationEditor.getEditor(Main.main.getEditLayer(), toEdit,
65 getMembersForCurrentSelection(toEdit)).setVisible(true);
66 }
67
68 @Override
69 public void actionPerformed(ActionEvent e) {
70 if (!isEnabled() || relations.isEmpty()) return;
71 if (relations.size() > Main.pref.getInteger("warn.open.maxrelations", 5) &&
72 /* I18N english text for value 1 makes no real sense, never called for values <= maxrel (usually 5) */
73 JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(Main.parent,
74 "<html>"+trn("You are about to open <b>{0}</b> different relation editor simultaneously.<br/>Do you want to continue?",
75 "You are about to open <b>{0}</b> different relation editors simultaneously.<br/>Do you want to continue?",
76 relations.size(), relations.size())+"</html>",
77 tr("Confirmation"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE)) {
78 return;
79 }
80 for (Relation r : relations) {
81 launchEditor(r);
82 }
83 }
84
85 @Override
86 protected void updateEnabledState() {
87 boolean enabled = false;
88 for (Relation r : relations) {
89 if (!r.isDeleted()) {
90 enabled = true;
91 break;
92 }
93 }
94 setEnabled(enabled);
95 }
96}
Note: See TracBrowser for help on using the repository browser.