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