001 // License: GPL. Copyright 2007 by Immanuel Scholz and others 002 package org.openstreetmap.josm.actions; 003 004 import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 005 import static org.openstreetmap.josm.tools.I18n.tr; 006 007 import java.awt.event.ActionEvent; 008 import java.awt.event.KeyEvent; 009 import java.util.concurrent.Future; 010 011 import org.openstreetmap.josm.Main; 012 import org.openstreetmap.josm.actions.downloadtasks.DownloadGpsTask; 013 import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask; 014 import org.openstreetmap.josm.actions.downloadtasks.PostDownloadHandler; 015 import org.openstreetmap.josm.data.Bounds; 016 import org.openstreetmap.josm.gui.download.DownloadDialog; 017 import org.openstreetmap.josm.tools.Shortcut; 018 019 /** 020 * Action that opens a connection to the osm server and downloads map data. 021 * 022 * An dialog is displayed asking the user to specify a rectangle to grab. 023 * The url and account settings from the preferences are used. 024 * 025 * @author imi 026 */ 027 public class DownloadAction extends JosmAction { 028 public DownloadAction() { 029 super(tr("Download from OSM..."), "download", tr("Download map data from the OSM server."), 030 Shortcut.registerShortcut("file:download", tr("File: {0}", tr("Download from OSM...")), KeyEvent.VK_DOWN, Shortcut.CTRL_SHIFT), true); 031 putValue("help", ht("/Action/Download")); 032 } 033 034 public void actionPerformed(ActionEvent e) { 035 DownloadDialog dialog = DownloadDialog.getInstance(); 036 dialog.restoreSettings(); 037 dialog.setVisible(true); 038 if (! dialog.isCanceled()) { 039 dialog.rememberSettings(); 040 Bounds area = dialog.getSelectedDownloadArea(); 041 if (dialog.isDownloadOsmData()) { 042 DownloadOsmTask task = new DownloadOsmTask(); 043 Future<?> future = task.download(dialog.isNewLayerRequired(), area, null); 044 Main.worker.submit(new PostDownloadHandler(task, future)); 045 } 046 if (dialog.isDownloadGpxData()) { 047 DownloadGpsTask task = new DownloadGpsTask(); 048 Future<?> future = task.download(dialog.isNewLayerRequired(),area, null); 049 Main.worker.submit(new PostDownloadHandler(task, future)); 050 } 051 } 052 } 053 }