Ticket #19984: incompatible.patch
| File incompatible.patch, 14.9 KB (added by , 6 years ago) |
|---|
-
src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java
274 274 tblChangesets.setRowSorter(new ChangesetCacheTableRowSorter(model)); 275 275 tblChangesets.addMouseListener(new MouseEventHandler()); 276 276 InputMapUtils.addEnterAction(tblChangesets, new ShowDetailAction(model)); 277 model.getSelectionModel().addListSelectionListener(new ChangesetDetailViewSynchronizer( model));277 model.getSelectionModel().addListSelectionListener(new ChangesetDetailViewSynchronizer()); 278 278 279 279 // activate DEL on the table 280 280 tblChangesets.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "removeFromCache"); … … 283 283 tblChangesets.setTransferHandler(new TransferHandler() { 284 284 @Override 285 285 public void exportToClipboard(JComponent comp, Clipboard clip, int action) { 286 List<Changeset> changesets = model.getSelectedChangesets();286 List<Changeset> changesets = getSelectedChangesets(); 287 287 ChangesetTransferable transferable = new ChangesetTransferable(changesets); 288 288 ClipboardUtils.copy(transferable); 289 289 } … … 302 302 cp.setLayout(new BorderLayout()); 303 303 304 304 model = buildModel(); 305 actRemoveFromCacheAction = new RemoveFromCacheAction( model);306 actCloseSelectedChangesetsAction = new CloseSelectedChangesetsAction( model);307 actDownloadSelectedChangesets = new DownloadSelectedChangesetsAction( model);308 actDownloadSelectedContent = new DownloadSelectedChangesetContentAction( model);305 actRemoveFromCacheAction = new RemoveFromCacheAction(); 306 actCloseSelectedChangesetsAction = new CloseSelectedChangesetsAction(); 307 actDownloadSelectedChangesets = new DownloadSelectedChangesetsAction(); 308 actDownloadSelectedContent = new DownloadSelectedChangesetContentAction(); 309 309 actDownloadSelectedChangesetObjects = new DownloadSelectedChangesetObjectsAction(); 310 310 311 311 cp.add(buildToolbarPanel(), BorderLayout.NORTH); … … 425 425 * Removes the selected changesets from the local changeset cache 426 426 * 427 427 */ 428 static class RemoveFromCacheAction extends AbstractAction implements ListSelectionListener { 429 private final ChangesetCacheManagerModel model; 428 class RemoveFromCacheAction extends AbstractAction implements ListSelectionListener { 430 429 431 RemoveFromCacheAction( ChangesetCacheManagerModel model) {430 RemoveFromCacheAction() { 432 431 putValue(NAME, tr("Remove from cache")); 433 432 new ImageProvider("dialogs", "delete").getResource().attachImageIcon(this); 434 433 putValue(SHORT_DESCRIPTION, tr("Remove the selected changesets from the local cache")); 435 this.model = model;436 434 updateEnabledState(); 437 435 } 438 436 439 437 @Override 440 438 public void actionPerformed(ActionEvent e) { 441 ChangesetCache.getInstance().remove( model.getSelectedChangesets());439 ChangesetCache.getInstance().remove(getSelectedChangesets()); 442 440 } 443 441 444 442 protected void updateEnabledState() { 445 setEnabled( model.hasSelectedChangesets());443 setEnabled(hasSelectedChangesets()); 446 444 } 447 445 448 446 @Override … … 456 454 * Closes the selected changesets 457 455 * 458 456 */ 459 static class CloseSelectedChangesetsAction extends AbstractAction implements ListSelectionListener { 460 private final ChangesetCacheManagerModel model; 457 class CloseSelectedChangesetsAction extends AbstractAction implements ListSelectionListener { 461 458 462 CloseSelectedChangesetsAction( ChangesetCacheManagerModel model) {459 CloseSelectedChangesetsAction() { 463 460 putValue(NAME, tr("Close")); 464 461 new ImageProvider("closechangeset").getResource().attachImageIcon(this); 465 462 putValue(SHORT_DESCRIPTION, tr("Close the selected changesets")); 466 this.model = model;467 463 updateEnabledState(); 468 464 } 469 465 470 466 @Override 471 467 public void actionPerformed(ActionEvent e) { 472 MainApplication.worker.submit(new CloseChangesetTask( model.getSelectedChangesets()));468 MainApplication.worker.submit(new CloseChangesetTask(getSelectedChangesets())); 473 469 } 474 470 475 471 protected void updateEnabledState() { 476 List<Changeset> selected = model.getSelectedChangesets();472 List<Changeset> selected = getSelectedChangesets(); 477 473 UserIdentityManager im = UserIdentityManager.getInstance(); 478 474 for (Changeset cs: selected) { 479 475 if (cs.isOpen()) { … … 501 497 * Downloads the selected changesets 502 498 * 503 499 */ 504 static class DownloadSelectedChangesetsAction extends AbstractAction implements ListSelectionListener { 505 private final ChangesetCacheManagerModel model; 500 class DownloadSelectedChangesetsAction extends AbstractAction implements ListSelectionListener { 506 501 507 DownloadSelectedChangesetsAction( ChangesetCacheManagerModel model) {502 DownloadSelectedChangesetsAction() { 508 503 putValue(NAME, tr("Update changeset")); 509 504 new ImageProvider("dialogs/changeset", "updatechangeset").getResource().attachImageIcon(this); 510 505 putValue(SHORT_DESCRIPTION, tr("Updates the selected changesets with current data from the OSM server")); 511 this.model = model;512 506 updateEnabledState(); 513 507 } 514 508 … … 516 510 public void actionPerformed(ActionEvent e) { 517 511 if (!GraphicsEnvironment.isHeadless()) { 518 512 ChangesetCacheManager.getInstance().runDownloadTask( 519 ChangesetHeaderDownloadTask.buildTaskForChangesets(GuiHelper.getWindowAncestorFor(e), model.getSelectedChangesets()));513 ChangesetHeaderDownloadTask.buildTaskForChangesets(GuiHelper.getWindowAncestorFor(e), getSelectedChangesets())); 520 514 } 521 515 } 522 516 523 517 protected void updateEnabledState() { 524 setEnabled( model.hasSelectedChangesets() && !NetworkManager.isOffline(OnlineResource.OSM_API));518 setEnabled(hasSelectedChangesets() && !NetworkManager.isOffline(OnlineResource.OSM_API)); 525 519 } 526 520 527 521 @Override … … 535 529 * Downloads the content of selected changesets from the OSM server 536 530 * 537 531 */ 538 static class DownloadSelectedChangesetContentAction extends AbstractAction implements ListSelectionListener { 539 private final ChangesetCacheManagerModel model; 532 class DownloadSelectedChangesetContentAction extends AbstractAction implements ListSelectionListener { 540 533 541 DownloadSelectedChangesetContentAction( ChangesetCacheManagerModel model) {534 DownloadSelectedChangesetContentAction() { 542 535 putValue(NAME, tr("Download changeset content")); 543 536 new ImageProvider("dialogs/changeset", "downloadchangesetcontent").getResource().attachImageIcon(this); 544 537 putValue(SHORT_DESCRIPTION, tr("Download the content of the selected changesets from the server")); 545 this.model = model;546 538 updateEnabledState(); 547 539 } 548 540 … … 549 541 @Override 550 542 public void actionPerformed(ActionEvent e) { 551 543 if (!GraphicsEnvironment.isHeadless()) { 544 Set<Integer> selectedIds = getSelectedChangesets().stream().map(Changeset::getId).collect(Collectors.toSet()); 545 552 546 ChangesetCacheManager.getInstance().runDownloadTask( 553 new ChangesetContentDownloadTask(GuiHelper.getWindowAncestorFor(e), model.getSelectedChangesetIds()));547 new ChangesetContentDownloadTask(GuiHelper.getWindowAncestorFor(e), selectedIds)); 554 548 } 555 549 } 556 550 557 551 protected void updateEnabledState() { 558 setEnabled( model.hasSelectedChangesets() && !NetworkManager.isOffline(OnlineResource.OSM_API));552 setEnabled(hasSelectedChangesets() && !NetworkManager.isOffline(OnlineResource.OSM_API)); 559 553 } 560 554 561 555 @Override … … 580 574 @Override 581 575 public void actionPerformed(ActionEvent e) { 582 576 if (!GraphicsEnvironment.isHeadless()) { 583 if ( model.getSelectedChangesets().stream().anyMatch(cs -> !cs.hasContent() || cs.isOpen()))577 if (getSelectedChangesets().stream().anyMatch(cs -> !cs.hasContent() || cs.isOpen())) 584 578 actDownloadSelectedContent.actionPerformed(e); 585 579 MainApplication.worker.submit(() -> { 586 final List<PrimitiveId> primitiveIds = model.getSelectedChangesets().stream()580 final List<PrimitiveId> primitiveIds = getSelectedChangesets().stream() 587 581 .map(Changeset::getContent) 588 582 .filter(Objects::nonNull) 589 583 .flatMap(content -> content.getIds().stream()) … … 595 589 } 596 590 597 591 protected void updateEnabledState() { 598 setEnabled( model.hasSelectedChangesets() && !NetworkManager.isOffline(OnlineResource.OSM_API));592 setEnabled(hasSelectedChangesets() && !NetworkManager.isOffline(OnlineResource.OSM_API)); 599 593 } 600 594 601 595 @Override … … 605 599 } 606 600 } 607 601 608 staticclass ShowDetailAction extends AbstractAction {602 class ShowDetailAction extends AbstractAction { 609 603 private final ChangesetCacheManagerModel model; 610 604 611 605 ShowDetailAction(ChangesetCacheManagerModel model) { … … 613 607 } 614 608 615 609 protected void showDetails() { 616 List<Changeset> selected = model.getSelectedChangesets();610 List<Changeset> selected = getSelectedChangesets(); 617 611 if (selected.size() == 1) { 618 612 model.setChangesetInDetailView(selected.get(0)); 619 613 } … … 685 679 } 686 680 } 687 681 688 static class ChangesetDetailViewSynchronizer implements ListSelectionListener { 689 private final ChangesetCacheManagerModel model; 682 class ChangesetDetailViewSynchronizer implements ListSelectionListener { 690 683 691 ChangesetDetailViewSynchronizer(ChangesetCacheManagerModel model) {692 this.model = model;693 }694 695 684 @Override 696 685 public void valueChanged(ListSelectionEvent e) { 697 686 if (e != null && e.getValueIsAdjusting()) 698 687 return; 699 688 700 List<Changeset> selected = model.getSelectedChangesets();689 List<Changeset> selected = getSelectedChangesets(); 701 690 if (selected.size() == 1) { 702 691 model.setChangesetInDetailView(selected.get(0)); 703 692 } else { … … 716 705 } 717 706 718 707 /** 708 * Replies true if there is at least one selected changeset 709 * 710 * @return true if there is at least one selected changeset 711 */ 712 public boolean hasSelectedChangesets() { 713 return tblChangesets != null && tblChangesets.getSelectedRowCount() >= 0; 714 } 715 716 /** 717 * Replies the list of selected changesets 718 * 719 * @return the list of selected changesets 720 */ 721 public List<Changeset> getSelectedChangesets() { 722 return model.getSelectedChangesets(tblChangesets); 723 } 724 725 726 /** 719 727 * Selects the changesets in <code>changests</code>, provided the 720 728 * respective changesets are already present in the local changeset cache. 721 729 * -
src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManagerModel.java
4 4 import java.beans.PropertyChangeListener; 5 5 import java.beans.PropertyChangeSupport; 6 6 import java.util.ArrayList; 7 import java.util.Arrays; 7 8 import java.util.Collection; 9 import java.util.Collections; 8 10 import java.util.Comparator; 9 11 import java.util.List; 10 import java.util.Set;11 12 import java.util.stream.Collectors; 12 13 import java.util.stream.IntStream; 13 14 14 15 import javax.swing.DefaultListSelectionModel; 16 import javax.swing.JTable; 15 17 import javax.swing.table.AbstractTableModel; 16 18 17 19 import org.openstreetmap.josm.data.osm.Changeset; … … 73 75 } 74 76 75 77 /** 76 * Replies true if there is at least one selected changeset77 *78 * @return true if there is at least one selected changeset79 */80 public boolean hasSelectedChangesets() {81 return selectionModel.getMinSelectionIndex() >= 0;82 }83 84 /**85 78 * Replies the list of selected changesets 79 * @param table the JTable used with this model 86 80 * 87 81 * @return the list of selected changesets 88 82 */ 89 public List<Changeset> getSelectedChangesets() { 90 List<Changeset> ret = new ArrayList<>(); 91 for (int i = 0; i < data.size(); i++) { 92 Changeset cs = data.get(i); 93 if (selectionModel.isSelectedIndex(i)) { 94 ret.add(cs); 95 } 96 } 97 return ret; 83 public List<Changeset> getSelectedChangesets(JTable table) { 84 if (table == null) 85 return Collections.emptyList(); 86 int[] selection = table.getSelectedRows(); 87 return Arrays.stream(selection) 88 .mapToObj(i -> data.get(table.convertRowIndexToModel(i))) 89 .collect(Collectors.toList()); 98 90 } 99 91 100 92 /** 101 * Replies a set of ids of the selected changesets102 *103 * @return a set of ids of the selected changesets104 */105 public Set<Integer> getSelectedChangesetIds() {106 return getSelectedChangesets().stream().map(Changeset::getId).collect(Collectors.toSet());107 }108 109 /**110 93 * Selects the changesets in <code>selected</code>. 111 94 * 112 95 * @param selected the collection of changesets to select. Ignored if empty. … … 136 119 */ 137 120 public void init() { 138 121 ChangesetCache cc = ChangesetCache.getInstance(); 139 List<Changeset> selected = getSelectedChangesets();140 122 data.clear(); 141 123 data.addAll(cc.getChangesets()); 142 124 sort(); 143 125 fireTableDataChanged(); 144 setSelectedChangesets(selected);145 126 146 127 cc.addChangesetCacheListener(this); 147 128 } … … 170 151 /* ------------------------------------------------------------------------------ */ 171 152 @Override 172 153 public void changesetCacheUpdated(ChangesetCacheEvent event) { 173 List<Changeset> selected = getSelectedChangesets();174 154 data.addAll(event.getAddedChangesets()); 175 155 data.removeAll(event.getRemovedChangesets()); 176 156 for (Changeset cs: event.getUpdatedChangesets()) { … … 185 165 GuiHelper.runInEDT(() -> { 186 166 sort(); 187 167 fireTableDataChanged(); 188 setSelectedChangesets(selected);189 168 }); 190 169 } 191 170 }
