// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.imageryxmlbounds; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.actions.ExtensionFileFilter; import org.openstreetmap.josm.data.osm.DataSet; import org.openstreetmap.josm.gui.MapFrame; import org.openstreetmap.josm.gui.preferences.PreferenceSetting; import org.openstreetmap.josm.plugins.Plugin; import org.openstreetmap.josm.plugins.PluginInformation; import org.openstreetmap.josm.plugins.imageryxmlbounds.actions.ShowBoundsAction; import org.openstreetmap.josm.plugins.imageryxmlbounds.actions.ShowBoundsSelectionAction; import org.openstreetmap.josm.plugins.imageryxmlbounds.actions.downloadtask.DownloadXmlBoundsTask; import org.openstreetmap.josm.plugins.imageryxmlbounds.io.XmlBoundsExporter; import org.openstreetmap.josm.plugins.imageryxmlbounds.io.XmlBoundsImporter; /** * Main class of Imagery XML bounds plugin. * @author Don-vip * @version 1.3 * History: * 1.3 05-Nov-2011 Update for JOSM 4577 (allow to edit selected default imagery entries from Preferences dialog) * 1.2 17-Oct-2011 Update for #6960 and JOSM 4523 (allow to download imagery XML bounds with Ctrl-L) * 1.1 08-Oct-2011 Update for #6934 and JOSM 4506, code refactorisation, removing debug code * 1.0 03-Oct-2011 first version */ public class ImageryXmlBoundsPlugin extends Plugin { /** * Action showing bounds of the selected closed ways in Selection dialog */ private final ShowBoundsAction selectionListAction = new ShowBoundsAction(); /** * Action showing bounds of the selected multipolygons in Properties dialog */ private final ShowBoundsAction propertiesListAction = new ShowBoundsAction(); /** * Action showing bounds of the selected multipolygons in Relations dialog */ private final ShowBoundsAction relationListAction = new ShowBoundsAction(); /** * Action showing bounds of the current selection */ private final ShowBoundsSelectionAction selectionAction = new ShowBoundsSelectionAction(); /** * Class modifying the Imagery preferences panel */ private final XmlBoundsPreferenceSetting preferenceSetting = new XmlBoundsPreferenceSetting(); /** * Initializes the plugin. * @param info */ public ImageryXmlBoundsPlugin(PluginInformation info) { super(info); // Allow JOSM to import *.imagery.xml files ExtensionFileFilter.addImporterFirst(new XmlBoundsImporter()); // Allow JOSM to export *.imagery.xml files ExtensionFileFilter.addExporterFirst(new XmlBoundsExporter()); // Initialize the selection action DataSet.addSelectionListener(selectionAction); Main.toolbar.register(selectionAction); // Allow JOSM to download *.imagery.xml files Main.main.menu.openLocation.addDownloadTaskClass(DownloadXmlBoundsTask.class); } @Override public PreferenceSetting getPreferenceSetting() { return this.preferenceSetting; } @Override public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) { if (newFrame != null) { // Initialize dialogs actions only after the main frame is created newFrame.selectionListDialog.getPopupMenuHandler().addSeparator(); newFrame.selectionListDialog.getPopupMenuHandler().addAction(selectionListAction); newFrame.propertiesDialog.getMembershipPopupMenuHandler().addSeparator(); newFrame.propertiesDialog.getMembershipPopupMenuHandler().addAction(propertiesListAction); newFrame.relationListDialog.getPopupMenuHandler().addSeparator(); newFrame.relationListDialog.getPopupMenuHandler().addAction(relationListAction); } else if (oldFrame != null) { // Remove listeners from previous frame to avoid memory leaks if (oldFrame.relationListDialog != null) { oldFrame.relationListDialog.getPopupMenuHandler().removeAction(relationListAction); } if (oldFrame.propertiesDialog != null) { oldFrame.propertiesDialog.getMembershipPopupMenuHandler().removeAction(propertiesListAction); } if (oldFrame.selectionListDialog != null) { oldFrame.selectionListDialog.getPopupMenuHandler().removeAction(selectionListAction); } } } }