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