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.ImageInfoHelpPopup; 023import org.openstreetmap.josm.plugins.streetside.gui.imageinfo.ImageInfoPanel; 024import org.openstreetmap.josm.plugins.streetside.oauth.StreetsideUser; 025import org.openstreetmap.josm.plugins.streetside.utils.StreetsideProperties; 026import org.openstreetmap.josm.tools.ImageProvider; 027 028/** 029 * This is the main class of the Streetside plugin. 030 */ 031public class StreetsidePlugin extends Plugin { 032 033 public static final ImageProvider LOGO = new ImageProvider("streetside-logo"); 034 035 /** Zoom action */ 036 private static final StreetsideZoomAction ZOOM_ACTION = new StreetsideZoomAction(); 037 /** Walk action */ 038 private static final StreetsideWalkAction WALK_ACTION = new StreetsideWalkAction(); 039 /** Upload action */ 040 //private static final StreetsideUploadAction UPLOAD_ACTION = new StreetsideUploadAction(); 041 042 static { 043 if (Main.main != null) { 044 MainMenu.add(MainApplication.getMenu().fileMenu, new StreetsideExportAction(), false, 14); 045 MainMenu.add(MainApplication.getMenu().imagerySubMenu, new StreetsideDownloadAction(), false); 046 MainMenu.add(MainApplication.getMenu().viewMenu, ZOOM_ACTION, false, 15); 047 MainMenu.add(MainApplication.getMenu().fileMenu, new StreetsideDownloadViewAction(), false, 14); 048 MainMenu.add(MainApplication.getMenu().dataMenu, new StreetsideJoinAction(), false); 049 MainMenu.add(MainApplication.getMenu().moreToolsMenu, WALK_ACTION, false); 050 //MainMenu.add(MainApplication.getMenu().imagerySubMenu, new MapObjectLayerAction(), false); 051 //MainMenu.add(MainApplication.getMenu().imagerySubMenu, new MapObjectLayerAction(), false); 052 } 053 } 054 055 /** 056 * Main constructor. 057 * 058 * @param info 059 * Required information of the plugin. Obtained from the jar file. 060 */ 061 public StreetsidePlugin(PluginInformation info) { 062 super(info); 063 064 if (StreetsideProperties.ACCESS_TOKEN.get() == null) { 065 StreetsideUser.setTokenValid(false); 066 } 067 } 068 069 static StreetsideDataListener[] getStreetsideDataListeners() { 070 return new StreetsideDataListener[]{WALK_ACTION, ZOOM_ACTION, CubemapBuilder.getInstance()}; 071 } 072 073 074 /** 075 * @return the {@link StreetsideWalkAction} for the plugin 076 */ 077 public static StreetsideWalkAction getStreetsideWalkAction() { 078 return WALK_ACTION; 079 } 080 081 /** 082 * Called when the JOSM map frame is created or destroyed. 083 */ 084 @Override 085 public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) { 086 if (oldFrame == null && newFrame != null) { // map frame added 087 MainApplication.getMap().addToggleDialog(StreetsideMainDialog.getInstance(), false); 088 StreetsideMainDialog.getInstance().setImageInfoHelp(new ImageInfoHelpPopup( 089 MainApplication.getMap().addToggleDialog(ImageInfoPanel.getInstance(), false) 090 )); 091 MainApplication.getMap().addToggleDialog(StreetsideViewerDialog.getInstance(), false); 092 //MainApplication.getMap().addToggleDialog(StreetsideHistoryDialog.getInstance(), false); 093 //MainApplication.getMap().addToggleDialog(StreetsideChangesetDialog.getInstance(), false); 094 //MainApplication.getMap().addToggleDialog(StreetsideFilterDialog.getInstance(), false); 095 } 096 if (oldFrame != null && newFrame == null) { // map frame destroyed 097 StreetsideMainDialog.destroyInstance(); 098 //StreetsideHistoryDialog.destroyInstance(); 099 //StreetsideChangesetDialog.destroyInstance(); 100 //StreetsideFilterDialog.destroyInstance(); 101 ImageInfoPanel.destroyInstance(); 102 CubemapBuilder.destroyInstance(); 103 104 } 105 } 106 107 @Override 108 public PreferenceSetting getPreferenceSetting() { 109 return new StreetsidePreferenceSetting(); 110 } 111 112 /** 113 * @return the current {@link MapView} without throwing a {@link NullPointerException} 114 */ 115 public static MapView getMapView() { 116 final MapFrame mf = MainApplication.getMap(); 117 if (mf != null) { 118 return mf.mapView; 119 } 120 return null; 121 } 122 123 /** 124 * @return the {@link StreetsideUploadAction} for the plugin 125 */ 126 /*public static StreetsideUploadAction getUploadAction() { 127 return UPLOAD_ACTION; 128 }*/ 129 130 /** 131 * @return the {@link StreetsideZoomAction} for the plugin 132 */ 133 /*public static StreetsideZoomAction getZoomAction() { 134 return ZOOM_ACTION; 135 }*/ 136 }