10
10
import java .util .ArrayList ;
11
11
import java .util .Collection ;
12
12
import java .util .Collections ;
13
- import java .util .HashSet ;
14
13
import java .util .LinkedHashSet ;
15
14
import java .util .LinkedList ;
16
15
import java .util .List ;
17
16
import java .util .Objects ;
18
- import java .util .Set ;
19
17
import java .util .stream .Collectors ;
20
18
import java .util .stream .IntStream ;
21
19
@@ -279,20 +277,6 @@ public void actionPerformed(ActionEvent event) {
279
277
return ;
280
278
}
281
279
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
-
296
280
// combine and update gui
297
281
Pair <Way , Command > combineResult ;
298
282
try {
@@ -305,6 +289,10 @@ public void actionPerformed(ActionEvent event) {
305
289
if (combineResult == null )
306
290
return ;
307
291
292
+ // see #18083: check if we will combine ways at nodes outside of the download area
293
+ if (!checkAndConfirmCombineOutlyingWays (selectedWays ))
294
+ return ;
295
+
308
296
final Way selectedWay = combineResult .a ;
309
297
UndoRedoHandler .getInstance ().add (combineResult .b );
310
298
Test test = new OverlappingWays ();
@@ -346,4 +334,27 @@ protected void updateEnabledState(Collection<? extends OsmPrimitive> selection)
346
334
setEnabled (numWays >= 2 );
347
335
}
348
336
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
+
349
360
}
0 commit comments