package ext_tools; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.actions.mapmode.MapMode; import org.openstreetmap.josm.gui.layer.Layer; import org.openstreetmap.josm.gui.layer.OsmDataLayer; import org.openstreetmap.josm.tools.ImageProvider; import org.openstreetmap.josm.tools.Shortcut; // TODO: Merge with ExtTool class? class ExtToolAction extends MapMode { protected MapMode oldMapMode; protected ExtTool tool; public ExtToolAction(ExtTool tool) { super(tr(tool.name), "empty", tool.description, Shortcut.registerShortcut(tr("exttool:{0}", tool.name), tr("External Tool: {0}", tool.name), KeyEvent.CHAR_UNDEFINED, Shortcut.NONE), null, ImageProvider.getCursor("crosshair", null)); this.tool = tool; setEnabled(true); } @Override public void actionPerformed(ActionEvent e) { if (Main.map == null || Main.map.mapView == null) return; oldMapMode = Main.map.mapMode; super.actionPerformed(e); } @Override public void enterMode() { super.enterMode(); Main.map.mapView.addMouseListener(this); } @Override public void exitMode() { super.exitMode(); Main.map.mapView.removeMouseListener(this); } @Override public void mouseClicked(MouseEvent e) { if (Main.map == null || Main.map.mapView == null) { return; } tool.runTool(Main.map.mapView.getLatLon(e.getX(), e.getY())); Main.map.selectMapMode(oldMapMode); } @Override public boolean layerIsSupported(Layer l) { return l instanceof OsmDataLayer; } }