Ticket #17412: 17412-v2.patch
| File 17412-v2.patch, 3.9 KB (added by , 7 years ago) |
|---|
-
src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
59 59 import org.openstreetmap.josm.gui.layer.ValidatorLayer; 60 60 import org.openstreetmap.josm.gui.preferences.validator.ValidatorPreference; 61 61 import org.openstreetmap.josm.gui.progress.ProgressMonitor; 62 import org.openstreetmap.josm.gui.util.GuiHelper; 62 63 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher; 63 64 import org.openstreetmap.josm.io.OsmTransferException; 64 65 import org.openstreetmap.josm.spi.preferences.Config; … … 626 627 final DataSet ds = MainApplication.getLayerManager().getActiveDataSet(); 627 628 int i = 0; 628 629 SwingUtilities.invokeAndWait(ds::beginUpdate); 630 tree.setResetScheduled(); 629 631 try { 630 632 for (TestError error: testErrors) { 631 633 i++; … … 645 647 fixCommands.size() > 1 ? new AutofixCommand(fixCommands) : fixCommands.get(0), false); 646 648 } 647 649 invalidateValidatorLayers(); 648 tree.resetErrors();649 650 }); 650 651 } catch (InterruptedException e) { 651 652 tryUndo(); … … 657 658 if (monitor.isCanceled()) { 658 659 tryUndo(); 659 660 } 661 GuiHelper.runInEDTAndWait(tree::resetErrors); 660 662 monitor.finishTask(); 661 663 } 662 664 } -
src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java
80 80 */ 81 81 private transient Set<? extends OsmPrimitive> filter; 82 82 83 private final ListenerList<Runnable> invalidationListeners = ListenerList.create();83 private final transient ListenerList<Runnable> invalidationListeners = ListenerList.create(); 84 84 85 /** if true, buildTree() does nothing */ 86 private boolean resetScheduled; 87 85 88 /** 86 89 * Constructor 87 90 * @param errors The list of errors … … 147 150 * Builds the errors tree 148 151 */ 149 152 public void buildTree() { 153 if (resetScheduled) 154 return; 150 155 final DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(); 151 156 152 157 if (errors == null || errors.isEmpty()) { … … 401 406 * Updates the current errors list 402 407 */ 403 408 public void resetErrors() { 409 resetScheduled = false; 410 errors.removeIf(error -> error.getPrimitives().stream().anyMatch(OsmPrimitive::isDeleted)); 404 411 setErrors(new ArrayList<>(errors)); 405 412 } 406 413 … … 482 489 // Remove purged primitives (fix #8639) 483 490 if (errors != null) { 484 491 final Set<? extends OsmPrimitive> deletedPrimitives = new HashSet<>(event.getPrimitives()); 485 errors.removeIf(error -> error.getPrimitives().stream().anyMatch(deletedPrimitives::contains)); 492 if (errors.removeIf(error -> error.getPrimitives().stream().anyMatch(deletedPrimitives::contains))) { 493 buildTree(); 494 } 486 495 } 487 496 } 488 497 … … 511 520 } 512 521 513 522 @Override public void dataChanged(DataChangedEvent event) { 514 // Do nothing 523 if (errors.removeIf(error -> error.getPrimitives().stream().anyMatch(OsmPrimitive::isDeleted))) { 524 buildTree(); 525 } 515 526 } 527 528 /** 529 * Can be called to suppress execution of buildTree() while doing multiple updates. Caller must 530 * call resetErrors() to end this state. 531 */ 532 public void setResetScheduled() { 533 resetScheduled = true; 534 } 516 535 }
