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.data.osm.OsmPrimitiveType; 014import org.openstreetmap.josm.gui.MainApplication; 015import org.openstreetmap.josm.gui.dialogs.OsmIdSelectionDialog; 016import org.openstreetmap.josm.io.NetworkManager; 017import org.openstreetmap.josm.io.OnlineResource; 018import org.openstreetmap.josm.spi.preferences.Config; 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("Download as new layer")); 030 // CHECKSTYLE.ON: SingleSpaceSeparator 031 032 /** 033 * Constructs a new DownloadObjectDialog with MainApplication.getMainFrame() as parent component. 034 */ 035 public DownloadObjectDialog() { 036 this(MainApplication.getMainFrame()); 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"), tr("Download object"), tr("Cancel")); 045 init(); 046 setButtonIcons("download", "cancel"); 047 setToolTipTexts( 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(!NetworkManager.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(Config.getPref().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(Config.getPref().getBoolean("downloadprimitive.referrers", true)); 068 069 fullRel.setToolTipText(tr("Select if the members of a relation should be downloaded as well")); 070 fullRel.setSelected(Config.getPref().getBoolean("downloadprimitive.full", true)); 071 072 cbType.addItemListener(e -> referrers.setText(cbType.getType() == OsmPrimitiveType.NODE 073 ? tr("Download referrers (parent relations and ways)") 074 : tr("Download referrers (parent relations)"))); 075 076 return Arrays.<Component>asList(referrers, fullRel, newLayer); 077 } 078 079 /** 080 * Determines if a new layer has been requested. 081 * @return true if a new layer has been requested, false otherwise 082 */ 083 public final boolean isNewLayerRequested() { 084 return newLayer.isSelected(); 085 } 086 087 /** 088 * Determines if relation members have been requested. 089 * @return true if relation members have been requested, false otherwise 090 */ 091 public final boolean isFullRelationRequested() { 092 return fullRel.isSelected(); 093 } 094 095 /** 096 * Determines if referrers have been requested. 097 * @return true if referrers have been requested, false otherwise 098 */ 099 public final boolean isReferrersRequested() { 100 return referrers.isSelected(); 101 } 102 103 @Override 104 public void windowClosed(WindowEvent e) { 105 super.windowClosed(e); 106 if (e != null && e.getComponent() == this && getValue() == 1) { 107 Config.getPref().putBoolean("downloadprimitive.referrers", referrers.isSelected()); 108 Config.getPref().putBoolean("downloadprimitive.full", fullRel.isSelected()); 109 Config.getPref().putBoolean("download.newlayer", newLayer.isSelected()); 110 } 111 } 112}