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 | | |
| 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 | |