001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.download; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.awt.Component; 007import java.awt.event.WindowEvent; 008import java.util.Arrays; 009import java.util.Collection; 010 011import javax.swing.JCheckBox; 012 013import org.openstreetmap.josm.Main; 014import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 015import org.openstreetmap.josm.gui.dialogs.OsmIdSelectionDialog; 016import org.openstreetmap.josm.io.OnlineResource; 017import org.openstreetmap.josm.spi.preferences.Config; 018 019/** 020 * Dialog prompt to user to let him choose OSM primitives to download by specifying their type and IDs 021 * @since 5765 022 */ 023public class DownloadObjectDialog extends OsmIdSelectionDialog { 024 025 // CHECKSTYLE.OFF: SingleSpaceSeparator 026 protected final JCheckBox referrers = new JCheckBox(tr("Download referrers (parent relations)")); 027 protected final JCheckBox fullRel = new JCheckBox(tr("Download relation members")); 028 protected final JCheckBox newLayer = new JCheckBox(tr("Download as new layer")); 029 // CHECKSTYLE.ON: SingleSpaceSeparator 030 031 /** 032 * Constructs a new DownloadObjectDialog with Main.parent as parent component. 033 */ 034 public DownloadObjectDialog() { 035 this(Main.parent); 036 } 037 038 /** 039 * Constructs a new DownloadObjectDialog. 040 * @param parent The parent component 041 */ 042 public DownloadObjectDialog(Component parent) { 043 super(parent, tr("Download object"), tr("Download object"), tr("Cancel")); 044 init(); 045 setButtonIcons("download", "cancel"); 046 setToolTipTexts( 047 tr("Start downloading"), 048 tr("Close dialog and cancel downloading") 049 ); 050 configureContextsensitiveHelp("/Action/DownloadObject", true /* show help button */); 051 } 052 053 @Override 054 public void setupDialog() { 055 super.setupDialog(); 056 buttons.get(0).setEnabled(!Main.isOffline(OnlineResource.OSM_API)); 057 } 058 059 @Override 060 protected Collection<Component> getComponentsBeforeHelp() { 061 newLayer.setToolTipText(tr("Select if the data should be downloaded into a new layer")); 062 newLayer.setSelected(Config.getPref().getBoolean("download.newlayer")); 063 064 referrers.setToolTipText(tr("Select if the referrers of the object should be downloaded as well, i.e.," 065 + "parent relations and for nodes, additionally, parent ways")); 066 referrers.setSelected(Config.getPref().getBoolean("downloadprimitive.referrers", true)); 067 068 fullRel.setToolTipText(tr("Select if the members of a relation should be downloaded as well")); 069 fullRel.setSelected(Config.getPref().getBoolean("downloadprimitive.full", true)); 070 071 cbType.addItemListener(e -> referrers.setText(cbType.getType() == OsmPrimitiveType.NODE 072 ? tr("Download referrers (parent relations and ways)") 073 : tr("Download referrers (parent relations)"))); 074 075 return Arrays.<Component>asList(referrers, fullRel, newLayer); 076 } 077 078 /** 079 * Determines if a new layer has been requested. 080 * @return true if a new layer has been requested, false otherwise 081 */ 082 public final boolean isNewLayerRequested() { 083 return newLayer.isSelected(); 084 } 085 086 /** 087 * Determines if relation members have been requested. 088 * @return true if relation members have been requested, false otherwise 089 */ 090 public final boolean isFullRelationRequested() { 091 return fullRel.isSelected(); 092 } 093 094 /** 095 * Determines if referrers have been requested. 096 * @return true if referrers have been requested, false otherwise 097 */ 098 public final boolean isReferrersRequested() { 099 return referrers.isSelected(); 100 } 101 102 @Override 103 public void windowClosed(WindowEvent e) { 104 super.windowClosed(e); 105 if (e != null && e.getComponent() == this && getValue() == 1) { 106 Config.getPref().putBoolean("downloadprimitive.referrers", referrers.isSelected()); 107 Config.getPref().putBoolean("downloadprimitive.full", fullRel.isSelected()); 108 Config.getPref().putBoolean("download.newlayer", newLayer.isSelected()); 109 } 110 } 111}