Ticket #18463: 18463.2.patch
File 18463.2.patch, 12.3 KB (added by , 4 years ago) |
---|
-
src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java
60 60 import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction; 61 61 import org.openstreetmap.josm.gui.help.HelpUtil; 62 62 import org.openstreetmap.josm.gui.io.CloseChangesetTask; 63 import org.openstreetmap.josm.gui.io.DownloadPrimitivesWithReferrersTask;64 63 import org.openstreetmap.josm.gui.util.GuiHelper; 65 64 import org.openstreetmap.josm.gui.util.WindowGeometry; 66 65 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher; … … 566 565 /** 567 566 * Downloads the objects contained in the selected changesets from the OSM server 568 567 */ 569 private class DownloadSelectedChangesetObjectsAction extends AbstractAction implements ListSelectionListener {568 private class DownloadSelectedChangesetObjectsAction extends DownloadChangesetObjectsAction implements ListSelectionListener { 570 569 571 570 DownloadSelectedChangesetObjectsAction() { 572 putValue(NAME, tr("Download changed objects")); 573 new ImageProvider("downloadprimitive").getResource().attachImageIcon(this); 571 super(); 574 572 putValue(SHORT_DESCRIPTION, tr("Download the current version of the changed objects in the selected changesets")); 575 573 updateEnabledState(); 576 574 } … … 579 577 public void actionPerformed(ActionEvent e) { 580 578 if (!GraphicsEnvironment.isHeadless()) { 581 579 actDownloadSelectedContent.actionPerformed(e); 582 MainApplication.worker.submit(() -> {580 GuiHelper.executeByMainWorkerInEDT(() -> { 583 581 final List<PrimitiveId> primitiveIds = model.getSelectedChangesets().stream() 584 582 .map(Changeset::getContent) 585 583 .filter(Objects::nonNull) … … 588 586 .map(HistoryOsmPrimitive::getPrimitiveId) 589 587 .distinct() 590 588 .collect(Collectors.toList()); 591 new DownloadPrimitivesWithReferrersTask(false, primitiveIds, true, true, null, null).run();589 downloadWithDialog(ChangesetCacheManager.getInstance(), primitiveIds); 592 590 }); 593 591 } 594 592 } -
src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
47 47 import org.openstreetmap.josm.gui.MainApplication; 48 48 import org.openstreetmap.josm.gui.help.HelpUtil; 49 49 import org.openstreetmap.josm.gui.history.HistoryBrowserDialogManager; 50 import org.openstreetmap.josm.gui.io.DownloadPrimitivesWithReferrersTask;51 50 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent; 52 51 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener; 53 52 import org.openstreetmap.josm.gui.widgets.JMultilineLabel; … … 247 246 } 248 247 } 249 248 250 class DownloadObjectAction extends AbstractAction implements ListSelectionListener {249 class DownloadObjectAction extends DownloadChangesetObjectsAction implements ListSelectionListener { 251 250 252 251 DownloadObjectAction() { 253 putValue(NAME, tr("Download objects")); 254 new ImageProvider("downloadprimitive").getResource().attachImageIcon(this, true); 252 super(); 255 253 putValue(SHORT_DESCRIPTION, tr("Download the current version of the selected objects")); 256 254 updateEnabledState(); 257 255 } … … 260 258 public void actionPerformed(ActionEvent e) { 261 259 final List<PrimitiveId> primitiveIds = getSelectedPrimitives().stream().map(HistoryOsmPrimitive::getPrimitiveId) 262 260 .collect(Collectors.toList()); 263 MainApplication.worker.submit(new DownloadPrimitivesWithReferrersTask(false, primitiveIds, true, true, null, null));261 downloadWithDialog(ChangesetContentPanel.this, primitiveIds); 264 262 } 265 263 266 264 protected final void updateEnabledState() { -
src/org/openstreetmap/josm/gui/dialogs/changeset/DownloadChangesetObjectsAction.java
1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm.gui.dialogs.changeset; 3 4 import static org.openstreetmap.josm.tools.I18n.tr; 5 6 import java.awt.Component; 7 import java.util.Collection; 8 import java.util.Collections; 9 import java.util.List; 10 11 import javax.swing.AbstractAction; 12 13 import org.openstreetmap.josm.data.osm.PrimitiveId; 14 import org.openstreetmap.josm.gui.download.DownloadObjectDialog; 15 import org.openstreetmap.josm.gui.io.DownloadPrimitivesWithReferrersTask; 16 import org.openstreetmap.josm.gui.widgets.HistoryComboBox; 17 import org.openstreetmap.josm.spi.preferences.Config; 18 import org.openstreetmap.josm.tools.ImageProvider; 19 20 /** 21 * Show download dialog with given ids and download them if user doesn't cancel. 22 * 23 */ 24 public abstract class DownloadChangesetObjectsAction extends AbstractAction { 25 26 /** 27 * Constructs a new {@code DownloadChangesetObjectsAction}. 28 */ 29 protected DownloadChangesetObjectsAction() { 30 putValue(NAME, tr("Download changed objects ...")); 31 new ImageProvider("downloadprimitive").getResource().attachImageIcon(this); 32 } 33 34 /** 35 * We want our own class to have separate preference entries 36 */ 37 private static class ChangesetDownloadObjectDialog extends DownloadObjectDialog { 38 private static final String prefListKey = "changesets.downloadprimitive.primitivesHistory"; 39 40 ChangesetDownloadObjectDialog(Component parent) { 41 super(parent, "changesets."); 42 } 43 44 /** 45 * Fill dialog with ids from given collection. 46 * @param primitiveIds collection of primitive ids used to fill the dialog 47 */ 48 void setupDialog(Collection<? extends PrimitiveId> primitiveIds) { 49 setupDialog(); 50 51 tfId.tryToPasteFrom(idsToString(primitiveIds)); 52 cbType.setSelectedIndex(3); // "mixed" because the ids are prefixed with the type 53 } 54 55 @Override 56 protected void restorePrimitivesHistory(HistoryComboBox cbHistory) { 57 cbHistory.setPossibleItemsTopDown(Config.getPref().getList(prefListKey, Collections.emptyList())); 58 } 59 60 @Override 61 protected void remindPrimitivesHistory(HistoryComboBox cbHistory) { 62 cbHistory.addCurrentItemToHistory(); 63 Config.getPref().putList(prefListKey, cbHistory.getHistory()); 64 } 65 66 } 67 68 protected void downloadWithDialog(Component parent, List<PrimitiveId> primitiveIds) { 69 if (primitiveIds == null || primitiveIds.isEmpty()) 70 return; 71 72 ChangesetDownloadObjectDialog dialog = new ChangesetDownloadObjectDialog(parent); 73 dialog.setupDialog(primitiveIds); 74 if (dialog.showDialog().getValue() != dialog.getContinueButtonIndex()) 75 return; 76 new DownloadPrimitivesWithReferrersTask(false, dialog.getOsmIds(), dialog.isReferrersRequested(), 77 dialog.isFullRelationRequested(), null, null).run(); 78 } 79 } -
src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java
225 225 if (buf.length() > Config.getPref().getInt("downloadprimitive.max-autopaste-length", 2000)) return; 226 226 final List<SimplePrimitiveId> ids = SimplePrimitiveId.fuzzyParse(buf); 227 227 if (!ids.isEmpty()) { 228 final String parsedText = ids.stream().map(x -> x.getType().getAPIName().charAt(0) + String.valueOf(x.getUniqueId())) 229 .collect(Collectors.joining(", ")); 228 final String parsedText = idsToString(ids); 230 229 tfId.tryToPasteFrom(parsedText); 231 230 final EnumSet<OsmPrimitiveType> types = ids.stream().map(SimplePrimitiveId::getType).collect( 232 231 Collectors.toCollection(() -> EnumSet.noneOf(OsmPrimitiveType.class))); … … 243 242 } 244 243 } 245 244 245 protected String idsToString(Collection<? extends PrimitiveId> primitiveIds) { 246 return primitiveIds.stream().map(pid -> pid.getType().getAPIName().substring(0, 1) + pid.getUniqueId()) 247 .collect(Collectors.joining(", ")); 248 } 249 246 250 @Override public void windowClosed(WindowEvent e) { 247 251 if (e != null && e.getComponent() == this && getValue() == getContinueButtonIndex()) { 248 252 Config.getPref().putInt("downloadprimitive.lasttype", cbType.getSelectedIndex()); -
src/org/openstreetmap/josm/gui/download/DownloadObjectDialog.java
29 29 protected final JCheckBox newLayer = new JCheckBox(tr("Download as new layer")); 30 30 // CHECKSTYLE.ON: SingleSpaceSeparator 31 31 32 private final String prefKey; 33 32 34 /** 33 35 * Constructs a new DownloadObjectDialog with MainApplication.getMainFrame() as parent component. 34 36 */ … … 41 43 * @param parent The parent component 42 44 */ 43 45 public DownloadObjectDialog(Component parent) { 46 this(parent, ""); 47 } 48 49 protected DownloadObjectDialog(Component parent, String prefKey) { 44 50 super(parent, tr("Download object"), tr("Download object"), tr("Cancel")); 51 this.prefKey = prefKey; 45 52 init(); 46 53 setButtonIcons("download", "cancel"); 47 54 setToolTipTexts( … … 60 67 @Override 61 68 protected Collection<Component> getComponentsBeforeHelp() { 62 69 newLayer.setToolTipText(tr("Select if the data should be downloaded into a new layer")); 63 newLayer.setSelected(Config.getPref().getBoolean( "download.newlayer"));70 newLayer.setSelected(Config.getPref().getBoolean(prefKey + "download.newlayer")); 64 71 65 72 referrers.setToolTipText(tr("Select if the referrers of the object should be downloaded as well, i.e.," 66 73 + "parent relations and for nodes, additionally, parent ways")); 67 referrers.setSelected(Config.getPref().getBoolean( "downloadprimitive.referrers", true));74 referrers.setSelected(Config.getPref().getBoolean(prefKey + "downloadprimitive.referrers", true)); 68 75 69 76 fullRel.setToolTipText(tr("Select if the members of a relation should be downloaded as well")); 70 fullRel.setSelected(Config.getPref().getBoolean( "downloadprimitive.full", true));77 fullRel.setSelected(Config.getPref().getBoolean(prefKey + "downloadprimitive.full", true)); 71 78 72 79 cbType.addItemListener(e -> referrers.setText(cbType.getType() == OsmPrimitiveType.NODE 73 80 ? tr("Download referrers (parent relations and ways)") … … 104 111 public void windowClosed(WindowEvent e) { 105 112 super.windowClosed(e); 106 113 if (e != null && e.getComponent() == this && getValue() == 1) { 107 Config.getPref().putBoolean( "downloadprimitive.referrers", referrers.isSelected());108 Config.getPref().putBoolean( "downloadprimitive.full", fullRel.isSelected());109 Config.getPref().putBoolean( "download.newlayer", newLayer.isSelected());114 Config.getPref().putBoolean(prefKey + "downloadprimitive.referrers", referrers.isSelected()); 115 Config.getPref().putBoolean(prefKey + "downloadprimitive.full", fullRel.isSelected()); 116 Config.getPref().putBoolean(prefKey + "download.newlayer", newLayer.isSelected()); 110 117 } 111 118 } 112 119 }