Ticket #23735: 23735-2.patch

File 23735-2.patch, 3.2 KB (added by GerdP, 6 months ago)

add hint reg. Download parent action

  • src/org/openstreetmap/josm/actions/CombineWayAction.java

     
    1010import java.util.ArrayList;
    1111import java.util.Collection;
    1212import java.util.Collections;
    13 import java.util.HashSet;
    1413import java.util.LinkedHashSet;
    1514import java.util.LinkedList;
    1615import java.util.List;
    1716import java.util.Objects;
    18 import java.util.Set;
    1917import java.util.stream.Collectors;
    2018import java.util.stream.IntStream;
    2119
     
    279277            return;
    280278        }
    281279
    282         // see #18083: check if we will combine ways at nodes outside of the download area
    283         Set<Node> endNodesOutside = new HashSet<>();
    284         for (Way w : selectedWays) {
    285             final Node[] endnodes = {w.firstNode(), w.lastNode()};
    286             for (Node n : endnodes) {
    287                 if (!n.isNew() && !n.isReferrersDownloaded() && !endNodesOutside.add(n)) {
    288                     new Notification(tr("Combine ways refused<br>" + "(A shared node may have additional referrers)"))
    289                             .setIcon(JOptionPane.INFORMATION_MESSAGE).show();
    290                     return;
    291 
    292                 }
    293             }
    294         }
    295 
    296280        // combine and update gui
    297281        Pair<Way, Command> combineResult;
    298282        try {
     
    305289        if (combineResult == null)
    306290            return;
    307291
     292        // see #18083: check if we will combine ways at nodes outside of the download area
     293        if (!checkAndConfirmCombineOutlyingWays(selectedWays))
     294            return;
     295
    308296        final Way selectedWay = combineResult.a;
    309297        UndoRedoHandler.getInstance().add(combineResult.b);
    310298        Test test = new OverlappingWays();
     
    346334        setEnabled(numWays >= 2);
    347335    }
    348336
     337    /**
     338     * Check whether user is about to combine ways with unknown parents.
     339     * Request confirmation if he is.
     340     * @param ways the primitives to operate on
     341     * @return true, if operating on outlying primitives is OK; false, otherwise
     342     */
     343    private static boolean checkAndConfirmCombineOutlyingWays(Collection<Way> ways) {
     344        DownloadReferrersAction action = MainApplication.getMenu().downloadReferrers;
     345        final String downloadHint = tr("You should use {0}->{1}({2}) first.",
     346                MainApplication.getMenu().editMenu.getText(), action.getValue(NAME), action.getShortcut().toString());
     347        return Boolean.TRUE.equals(GuiHelper.runInEDTAndWaitAndReturn(() -> checkAndConfirmOutlyingOperation("combine",
     348                tr("Combine confirmation"),
     349                tr("You are about to combine ways which can be members of relations not yet downloaded."
     350                        + "<br>"
     351                        + "This can lead to damaging these parent relations (that you do not see)."
     352                        + "<br>"
     353                        + "{0}"
     354                        + "<br><br>"
     355                        + "Do you really want to combine without downloading?", downloadHint),
     356                "", // not used, we never combine incomplete ways
     357                ways, Collections.emptyList())));
     358    }
     359
    349360}