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