// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.measurement; /// @author Raphael Mack <osm@raphael-mack.de> import static org.openstreetmap.josm.tools.I18n.tr; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.gui.IconToggleButton; import org.openstreetmap.josm.gui.MapFrame; import org.openstreetmap.josm.gui.layer.Layer; import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent; import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener; import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent; import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent; import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent; import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener; import org.openstreetmap.josm.plugins.Plugin; import org.openstreetmap.josm.plugins.PluginInformation; public class MeasurementPlugin extends Plugin { private IconToggleButton btn; private MeasurementMode mode; protected static MeasurementDialog measurementDialog; protected static MeasurementLayer currentLayer; public MeasurementPlugin(PluginInformation info) { super(info); } @Override public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) { if (newFrame != null) { newFrame.addToggleDialog(measurementDialog = new MeasurementDialog()); mode = new MeasurementMode(newFrame, "measurement", tr("measurement mode")); btn = new IconToggleButton(mode); btn.setVisible(true); newFrame.addMapMode(btn); } else { btn = null; mode = null; measurementDialog = null; } } public static MeasurementLayer getCurrentLayer() { if (currentLayer == null) { currentLayer = new MeasurementLayer(tr("Measurements")); Main.getLayerManager().addLayer(currentLayer); final ActiveLayerChangeListener activeListener = new ActiveLayerChangeListener() { @Override public void activeOrEditLayerChanged(ActiveLayerChangeEvent e) { Layer newLayer = Main.getLayerManager().getActiveLayer(); if (newLayer instanceof MeasurementLayer) MeasurementPlugin.currentLayer = (MeasurementLayer)newLayer; } }; Main.getLayerManager().addActiveLayerChangeListener(activeListener); Main.getLayerManager().addLayerChangeListener(new LayerChangeListener(){ @Override public void layerAdded(LayerAddEvent e) { // Do nothing } @Override public void layerRemoving(LayerRemoveEvent e) { Layer oldLayer = e.getRemovedLayer(); if (oldLayer != null && oldLayer == currentLayer) { Main.getLayerManager().removeActiveLayerChangeListener(activeListener); Main.getLayerManager().removeLayerChangeListener(this); } } @Override public void layerOrderChanged(LayerOrderChangeEvent e) { // Do nothing } }); } return currentLayer; } }