001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.plugins.streetside.actions;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.awt.event.ActionEvent;
007import java.awt.event.KeyEvent;
008
009import org.apache.log4j.Logger;
010import org.openstreetmap.josm.actions.JosmAction;
011import org.openstreetmap.josm.gui.MainApplication;
012import org.openstreetmap.josm.gui.layer.OsmDataLayer;
013import org.openstreetmap.josm.plugins.streetside.StreetsideLayer;
014import org.openstreetmap.josm.plugins.streetside.StreetsidePlugin;
015import org.openstreetmap.josm.tools.ImageProvider;
016import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
017import org.openstreetmap.josm.tools.Shortcut;
018
019/**
020 * Action that triggers the plugin. If in automatic mode, it will automatically
021 * download the images in the areas where there is OSM data.
022 *
023 * @author nokutu
024 *
025 */
026public class StreetsideDownloadAction extends JosmAction {
027
028  private static final long serialVersionUID = 4426446157849005029L;
029
030  public static final Shortcut SHORTCUT = Shortcut.registerShortcut("Streetside", "Open Streetside layer", KeyEvent.VK_COMMA, Shortcut.SHIFT);
031
032  final static Logger logger = Logger.getLogger(StreetsideDownloadAction.class);
033
034  /**
035   * Main constructor.
036   */
037  public StreetsideDownloadAction() {
038    super(
039        tr("Streetside"),
040        new ImageProvider(StreetsidePlugin.LOGO).setSize(ImageSizes.DEFAULT),
041        tr("Open Streetside layer"),
042        SHORTCUT,
043        false,
044        "streetsideDownload",
045        false
046    );
047  }
048
049  @Override
050  public void actionPerformed(ActionEvent ae) {
051    if (!StreetsideLayer.hasInstance() || !MainApplication.getLayerManager().containsLayer(StreetsideLayer.getInstance())) {
052      MainApplication.getLayerManager().addLayer(StreetsideLayer.getInstance());
053      return;
054    }
055
056    try {
057      // Successive calls to this action toggle the active layer between the OSM data layer and the streetside layer
058      OsmDataLayer editLayer = MainApplication.getLayerManager().getEditLayer();
059      if (MainApplication.getLayerManager().getActiveLayer() != StreetsideLayer.getInstance()) {
060        MainApplication.getLayerManager().setActiveLayer(StreetsideLayer.getInstance());
061      } else if (editLayer != null) {
062        MainApplication.getLayerManager().setActiveLayer(editLayer);
063      }
064    } catch (IllegalArgumentException e) {
065      // If the StreetsideLayer is not managed by LayerManager but you try to set it as active layer
066      logger.warn(e);
067    }
068  }
069}