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; 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 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 029 /** 030 * Constructs a new DownloadObjectDialog with Main.parent as parent component. 031 */ 032 public DownloadObjectDialog() { 033 this(Main.parent); 034 } 035 036 /** 037 * Constructs a new DownloadObjectDialog. 038 * @param parent The parent component 039 */ 040 public DownloadObjectDialog(Component parent) { 041 super(parent, tr("Download object"), new String[]{tr("Download object"), tr("Cancel")}); 042 init(); 043 setButtonIcons(new String[]{"download.png", "cancel.png"}); 044 setToolTipTexts(new String[]{ 045 tr("Start downloading"), 046 tr("Close dialog and cancel downloading") 047 }); 048 configureContextsensitiveHelp("/Action/DownloadObject", true /* show help button */); 049 } 050 051 protected Collection<Component> getComponentsBeforeHelp() { 052 newLayer.setToolTipText(tr("Select if the data should be downloaded into a new layer")); 053 newLayer.setSelected(Main.pref.getBoolean("download.newlayer")); 054 055 referrers.setToolTipText(tr("Select if the referrers of the object should be downloaded as well, i.e.," 056 + "parent relations and for nodes, additionally, parent ways")); 057 referrers.setSelected(Main.pref.getBoolean("downloadprimitive.referrers", true)); 058 059 fullRel.setToolTipText(tr("Select if the members of a relation should be downloaded as well")); 060 fullRel.setSelected(Main.pref.getBoolean("downloadprimitive.full", true)); 061 062 cbType.addItemListener(new ItemListener() { 063 @Override 064 public void itemStateChanged(ItemEvent e) { 065 referrers.setText(cbType.getType() == OsmPrimitiveType.NODE 066 ? tr("Download referrers (parent relations and ways)") 067 : tr("Download referrers (parent relations)")); 068 } 069 }); 070 071 return Arrays.<Component>asList(referrers, fullRel, newLayer); 072 } 073 074 /** 075 * Determines if a new layer has been requested. 076 * @return true if a new layer has been requested, false otherwise 077 */ 078 public final boolean isNewLayerRequested() { 079 return newLayer.isSelected(); 080 } 081 082 /** 083 * Determines if relation members have been requested. 084 * @return true if relation members have been requested, false otherwise 085 */ 086 public final boolean isFullRelationRequested() { 087 return fullRel.isSelected(); 088 } 089 090 /** 091 * Determines if referrers have been requested. 092 * @return true if referrers have been requested, false otherwise 093 */ 094 public final boolean isReferrersRequested() { 095 return referrers.isSelected(); 096 } 097 098 @Override 099 public void windowClosed(WindowEvent e) { 100 super.windowClosed(e); 101 if (e != null && e.getComponent() == this && getValue() == 1) { 102 Main.pref.put("downloadprimitive.referrers", referrers.isSelected()); 103 Main.pref.put("downloadprimitive.full", fullRel.isSelected()); 104 Main.pref.put("download.newlayer", newLayer.isSelected()); 105 } 106 } 107}