Ticket #14228: 14228.patch
File 14228.patch, 3.8 KB (added by , 6 years ago) |
---|
-
src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
15 15 import java.util.Collection; 16 16 import java.util.Collections; 17 17 import java.util.EnumSet; 18 import java.util. HashSet;18 import java.util.LinkedHashSet; 19 19 import java.util.LinkedList; 20 20 import java.util.List; 21 21 import java.util.Map; … … 33 33 import javax.swing.SwingUtilities; 34 34 35 35 import org.openstreetmap.josm.actions.AdaptableAction; 36 import org.openstreetmap.josm.actions.CreateMultipolygonAction; 36 37 import org.openstreetmap.josm.command.ChangePropertyCommand; 37 38 import org.openstreetmap.josm.command.Command; 38 39 import org.openstreetmap.josm.command.SequenceCommand; … … 45 46 import org.openstreetmap.josm.data.osm.Relation; 46 47 import org.openstreetmap.josm.data.osm.RelationMember; 47 48 import org.openstreetmap.josm.data.osm.Tag; 49 import org.openstreetmap.josm.data.osm.Way; 48 50 import org.openstreetmap.josm.data.osm.search.SearchCompiler; 49 51 import org.openstreetmap.josm.data.osm.search.SearchCompiler.Match; 50 52 import org.openstreetmap.josm.data.osm.search.SearchParseError; … … 52 54 import org.openstreetmap.josm.gui.MainApplication; 53 55 import org.openstreetmap.josm.gui.Notification; 54 56 import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor; 57 import org.openstreetmap.josm.gui.dialogs.relation.sort.RelationSorter; 55 58 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent; 56 59 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener; 57 60 import org.openstreetmap.josm.gui.preferences.ToolbarPreferences; … … 67 70 import org.openstreetmap.josm.tools.GBC; 68 71 import org.openstreetmap.josm.tools.ImageProvider; 69 72 import org.openstreetmap.josm.tools.Logging; 73 import org.openstreetmap.josm.tools.Pair; 70 74 import org.openstreetmap.josm.tools.Utils; 71 75 import org.openstreetmap.josm.tools.template_engine.ParseError; 72 76 import org.openstreetmap.josm.tools.template_engine.TemplateEntry; … … 413 417 UndoRedoHandler.getInstance().add(cmd); 414 418 } 415 419 } else if (answer == DIALOG_ANSWER_NEW_RELATION) { 416 final Relation r = new Relation(); 417 final Collection<RelationMember> members = new HashSet<>(); 420 Relation calculated = null; 421 if (getChangedTags().stream().anyMatch(t -> "boundary".equals(t.get("type")) || "multipolygon".equals(t.get("type")))) { 422 Pair<SequenceCommand, Relation> res = CreateMultipolygonAction.createMultipolygonCommand(ds.getSelectedWays(), null); 423 if (res != null) { 424 calculated = res.b; 425 } 426 } 427 final Relation r = calculated != null ? calculated : new Relation(); 428 final Collection<RelationMember> members = new LinkedHashSet<>(); 429 members.addAll(r.getMembers()); 418 430 for (Tag t : getChangedTags()) { 419 431 r.put(t.getKey(), t.getValue()); 420 432 } 421 433 for (OsmPrimitive osm : ds.getSelected()) { 434 if (r == calculated && osm instanceof Way) 435 continue; 422 436 String role = suggestRoleForOsmPrimitive(osm); 423 437 RelationMember rm = new RelationMember(role == null ? "" : role, osm); 424 438 r.addMember(rm); 425 439 members.add(rm); 426 440 } 441 if (r.isMultipolygon() && r != calculated) { 442 r.setMembers(RelationSorter.sortMembersByConnectivity(r.getMembers())); 443 } 427 444 SwingUtilities.invokeLater(() -> RelationEditor.getEditor( 428 445 MainApplication.getLayerManager().getEditLayer(), r, members).setVisible(true)); 429 446 }