Changeset 4677 in josm


Ignore:
Timestamp:
Dec 21, 2011 10:13:49 AM (17 months ago)
Author:
simon04
Message:

fix #3423 - Warn when deleting a large relation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/command/DeleteCommand.java

    r4458 r4677  
    22package org.openstreetmap.josm.command; 
    33 
     4import java.awt.GridBagLayout; 
    45import java.awt.geom.Area; 
    56import static org.openstreetmap.josm.tools.I18n.marktr; 
     
    2122import javax.swing.JLabel; 
    2223 
     24import javax.swing.JOptionPane; 
     25import javax.swing.JPanel; 
     26import org.openstreetmap.josm.Main; 
    2327import org.openstreetmap.josm.actions.SplitWayAction; 
    2428import org.openstreetmap.josm.data.osm.Node; 
     
    3034import org.openstreetmap.josm.data.osm.Way; 
    3135import org.openstreetmap.josm.data.osm.WaySegment; 
     36import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil; 
    3237import org.openstreetmap.josm.gui.DefaultNameFormatter; 
    3338import org.openstreetmap.josm.gui.actionsupport.DeleteFromRelationConfirmationDialog; 
     
    3540import org.openstreetmap.josm.tools.CheckParameterUtil; 
    3641import org.openstreetmap.josm.tools.ImageProvider; 
     42import org.openstreetmap.josm.tools.Utils; 
    3743 
    3844/** 
     
    317323 
    318324        Set<OsmPrimitive> primitivesToDelete = new HashSet<OsmPrimitive>(selection); 
     325 
     326        Collection<Relation> relationsToDelete = Utils.filteredCollection(primitivesToDelete, Relation.class); 
     327        if(!relationsToDelete.isEmpty() && !silent && !confirmRelationDeletion(relationsToDelete)) { 
     328            return null; 
     329        } 
     330 
    319331        Collection<Way> waysToBeChanged = new HashSet<Way>(); 
    320332 
     
    441453    } 
    442454 
     455    private static boolean confirmRelationDeletion(Collection<Relation> relations) { 
     456        String relationString = "<ul>"; 
     457        for(Relation r:relations) { 
     458            relationString += "<li>"+DefaultNameFormatter.getInstance().format(r) + "</li>"; 
     459        } 
     460        relationString += "</ul>"; 
     461         
     462        JPanel msg = new JPanel(new GridBagLayout()); 
     463        msg.add(new JLabel("<html>" + trn( 
     464                "You are about to delete {0} relation: {1}" 
     465                + "<br/>" 
     466                + "This step is rarely necessary and cannot be undone easily after being uploaded to the server." 
     467                + "<br/>" 
     468                + "Do you really want to delete?", 
     469                "You are about to delete {0} relations: {1}" 
     470                + "<br/>" 
     471                + "This step is rarely necessary and cannot be undone easily after being uploaded to the server." 
     472                + "<br/>" 
     473                + "Do you really want to delete?", 
     474                relations.size(), relations.size(), relationString) + "</html>")); 
     475        boolean answer = ConditionalOptionPaneUtil.showConfirmationDialog( 
     476                "delete_relations", 
     477                Main.parent, 
     478                msg, 
     479                tr("Delete relation?"), 
     480                JOptionPane.YES_NO_OPTION, 
     481                JOptionPane.QUESTION_MESSAGE, 
     482                JOptionPane.YES_OPTION); 
     483        return answer; 
     484    } 
    443485} 
Note: See TracChangeset for help on using the changeset viewer.