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 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("Separate Layer")); 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.png", "cancel.png"}); 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(new ItemListener() { 071 @Override 072 public void itemStateChanged(ItemEvent e) { 073 referrers.setText(cbType.getType() == OsmPrimitiveType.NODE 074 ? tr("Download referrers (parent relations and ways)") 075 : tr("Download referrers (parent relations)")); 076 } 077 }); 078 079 return Arrays.<Component>asList(referrers, fullRel, newLayer); 080 } 081 082 /** 083 * Determines if a new layer has been requested. 084 * @return true if a new layer has been requested, false otherwise 085 */ 086 public final boolean isNewLayerRequested() { 087 return newLayer.isSelected(); 088 } 089 090 /** 091 * Determines if relation members have been requested. 092 * @return true if relation members have been requested, false otherwise 093 */ 094 public final boolean isFullRelationRequested() { 095 return fullRel.isSelected(); 096 } 097 098 /** 099 * Determines if referrers have been requested. 100 * @return true if referrers have been requested, false otherwise 101 */ 102 public final boolean isReferrersRequested() { 103 return referrers.isSelected(); 104 } 105 106 @Override 107 public void windowClosed(WindowEvent e) { 108 super.windowClosed(e); 109 if (e != null && e.getComponent() == this && getValue() == 1) { 110 Main.pref.put("downloadprimitive.referrers", referrers.isSelected()); 111 Main.pref.put("downloadprimitive.full", fullRel.isSelected()); 112 Main.pref.put("download.newlayer", newLayer.isSelected()); 113 } 114 } 115}