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;
007
008import org.openstreetmap.josm.plugins.streetside.StreetsideLayer;
009
010import org.openstreetmap.josm.actions.JosmAction;
011import org.openstreetmap.josm.gui.MainApplication;
012import org.openstreetmap.josm.plugins.streetside.StreetsideAbstractImage;
013import org.openstreetmap.josm.plugins.streetside.StreetsideDataListener;
014import org.openstreetmap.josm.plugins.streetside.StreetsidePlugin;
015import org.openstreetmap.josm.tools.ImageProvider;
016import org.openstreetmap.josm.tools.ImageProvider.ImageSizes;
017
018/**
019 * Zooms to the currently selected image.
020 *
021 * @author nokutu
022 *
023 */
024public class StreetsideZoomAction extends JosmAction implements StreetsideDataListener {
025
026  private static final long serialVersionUID = -5885977359895624233L;
027
028  /**
029   * Main constructor.
030   */
031  public StreetsideZoomAction() {
032    super(
033      tr("Zoom to selected image"),
034      new ImageProvider(StreetsidePlugin.LOGO).setSize(ImageSizes.DEFAULT),
035      tr("Zoom to the currently selected Streetside image"),
036      null,
037      false,
038      "mapillaryZoom",
039      true
040    );
041  }
042
043  @Override
044  public void actionPerformed(ActionEvent arg0) {
045    if (StreetsideLayer.getInstance().getData().getSelectedImage() == null) {
046      throw new IllegalStateException();
047    }
048    MainApplication.getMap().mapView.zoomTo(StreetsideLayer.getInstance().getData()
049        .getSelectedImage().getMovingLatLon());
050  }
051
052  @Override
053  public void imagesAdded() {
054    // Nothing
055  }
056
057    @Override
058  protected boolean listenToSelectionChange() {
059    return false;
060  }
061
062  @Override
063  public void selectedImageChanged(StreetsideAbstractImage oldImage, StreetsideAbstractImage newImage) {
064    if (oldImage == null && newImage != null) {
065      setEnabled(true);
066    } else if (oldImage != null && newImage == null) {
067      setEnabled(false);
068    }
069  }
070
071  @Override
072  protected void updateEnabledState() {
073    super.updateEnabledState();
074    setEnabled(StreetsideLayer.hasInstance() && StreetsideLayer.getInstance().getData().getSelectedImage() != null);
075  }
076}