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

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

fix #8039, fix #10456: final fixes for the read-only/locked layers:

  • rename "read-only" to "locked" (in XML and Java classes/interfaces)
  • add a new download policy (true/never) to allow private layers forbidding only to download data, but allowing everything else

This leads to:

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