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