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

Last change on this file since 13229 was 12846, checked in by bastiK, 7 years ago

see #15229 - use Config.getPref() wherever possible

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