001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.plugins.streetside; 003 004import org.openstreetmap.josm.Main; 005import org.openstreetmap.josm.gui.MainApplication; 006import org.openstreetmap.josm.gui.MainMenu; 007import org.openstreetmap.josm.gui.MapFrame; 008import org.openstreetmap.josm.gui.MapView; 009import org.openstreetmap.josm.gui.preferences.PreferenceSetting; 010import org.openstreetmap.josm.plugins.Plugin; 011import org.openstreetmap.josm.plugins.PluginInformation; 012import org.openstreetmap.josm.plugins.streetside.actions.StreetsideDownloadAction; 013import org.openstreetmap.josm.plugins.streetside.actions.StreetsideDownloadViewAction; 014import org.openstreetmap.josm.plugins.streetside.actions.StreetsideExportAction; 015import org.openstreetmap.josm.plugins.streetside.actions.StreetsideJoinAction; 016import org.openstreetmap.josm.plugins.streetside.actions.StreetsideWalkAction; 017import org.openstreetmap.josm.plugins.streetside.actions.StreetsideZoomAction; 018import org.openstreetmap.josm.plugins.streetside.cubemap.CubemapBuilder; 019import org.openstreetmap.josm.plugins.streetside.gui.StreetsideMainDialog; 020import org.openstreetmap.josm.plugins.streetside.gui.StreetsidePreferenceSetting; 021import org.openstreetmap.josm.plugins.streetside.gui.StreetsideViewerDialog; 022import org.openstreetmap.josm.plugins.streetside.gui.imageinfo.ImageInfoPanel; 023import org.openstreetmap.josm.plugins.streetside.oauth.StreetsideUser; 024import org.openstreetmap.josm.plugins.streetside.utils.StreetsideProperties; 025import org.openstreetmap.josm.tools.ImageProvider; 026 027import org.openstreetmap.josm.plugins.streetside.gui.imageinfo.ImageInfoHelpPopup; 028 029/** 030 * This is the main class of the Streetside plugin. 031 */ 032public class StreetsidePlugin extends Plugin { 033 034 public static final ImageProvider LOGO = new ImageProvider("streetside-logo"); 035 036 /** Zoom action */ 037 private static final StreetsideZoomAction ZOOM_ACTION = new StreetsideZoomAction(); 038 /** Walk action */ 039 private static final StreetsideWalkAction WALK_ACTION = new StreetsideWalkAction(); 040 041 static { 042 if (Main.main != null) { 043 MainMenu.add(MainApplication.getMenu().fileMenu, new StreetsideExportAction(), false, 14); 044 MainMenu.add(MainApplication.getMenu().imagerySubMenu, new StreetsideDownloadAction(), false); 045 MainMenu.add(MainApplication.getMenu().viewMenu, ZOOM_ACTION, false, 15); 046 MainMenu.add(MainApplication.getMenu().fileMenu, new StreetsideDownloadViewAction(), false, 14); 047 MainMenu.add(MainApplication.getMenu().dataMenu, new StreetsideJoinAction(), false); 048 MainMenu.add(MainApplication.getMenu().moreToolsMenu, WALK_ACTION, false); 049 } 050 } 051 052 /** 053 * Main constructor. 054 * 055 * @param info 056 * Required information of the plugin. Obtained from the jar file. 057 */ 058 public StreetsidePlugin(PluginInformation info) { 059 super(info); 060 061 if (StreetsideProperties.ACCESS_TOKEN.get() == null) { 062 StreetsideUser.setTokenValid(false); 063 } 064 } 065 066 static StreetsideDataListener[] getStreetsideDataListeners() { 067 return new StreetsideDataListener[]{WALK_ACTION, ZOOM_ACTION, CubemapBuilder.getInstance()}; 068 } 069 070 071 /** 072 * @return the {@link StreetsideWalkAction} for the plugin 073 */ 074 public static StreetsideWalkAction getStreetsideWalkAction() { 075 return WALK_ACTION; 076 } 077 078 /** 079 * Called when the JOSM map frame is created or destroyed. 080 */ 081 @Override 082 public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) { 083 if (oldFrame == null && newFrame != null) { // map frame added 084 MainApplication.getMap().addToggleDialog(StreetsideMainDialog.getInstance(), false); 085 StreetsideMainDialog.getInstance().setImageInfoHelp(new ImageInfoHelpPopup( 086 MainApplication.getMap().addToggleDialog(ImageInfoPanel.getInstance(), false) 087 )); 088 MainApplication.getMap().addToggleDialog(StreetsideViewerDialog.getInstance(), false); 089 } 090 if (oldFrame != null && newFrame == null) { // map frame destroyed 091 StreetsideMainDialog.destroyInstance(); 092 ImageInfoPanel.destroyInstance(); 093 CubemapBuilder.destroyInstance(); 094 095 } 096 } 097 098 @Override 099 public PreferenceSetting getPreferenceSetting() { 100 return new StreetsidePreferenceSetting(); 101 } 102 103 /** 104 * @return the current {@link MapView} without throwing a {@link NullPointerException} 105 */ 106 public static MapView getMapView() { 107 final MapFrame mf = MainApplication.getMap(); 108 if (mf != null) { 109 return mf.mapView; 110 } 111 return null; 112 } 113}