// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.turnrestrictions; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.util.Collection; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.actions.JosmAction; import org.openstreetmap.josm.data.osm.Relation; import org.openstreetmap.josm.gui.layer.OsmDataLayer; import org.openstreetmap.josm.plugins.turnrestrictions.editor.TurnRestrictionEditor; import org.openstreetmap.josm.plugins.turnrestrictions.editor.TurnRestrictionEditorManager; import org.openstreetmap.josm.plugins.turnrestrictions.editor.TurnRestrictionSelectionPopupPanel; import org.openstreetmap.josm.tools.Shortcut; /** * This action is triggered by a global shortcut (default is Shift-Ctrl-T on windows). * Depending on the current selection it either launches an editor for a new turn * restriction or a popup component from which one can choose a turn restriction to * edit. * */ public class CreateOrEditTurnRestrictionAction extends JosmAction { /** the singleton instance of this action */ private static CreateOrEditTurnRestrictionAction instance; /** * Replies the unique instance of this action */ public static CreateOrEditTurnRestrictionAction getInstance() { if (instance == null) { instance = new CreateOrEditTurnRestrictionAction(); } return instance; } protected CreateOrEditTurnRestrictionAction() { super( tr("Create/Edit turn restriction..."), null, tr("Create or edit a turn restriction."), Shortcut.registerShortcut("tools:turnrestriction", tr("Tool: {0}", "Create or edit a turn restriction."), KeyEvent.VK_2, Shortcut.ALT_SHIFT), false ); } @Override public void actionPerformed(ActionEvent e) { OsmDataLayer layer = Main.getLayerManager().getEditLayer(); if (layer == null) return; Collection<Relation> trs = TurnRestrictionSelectionPopupPanel.getTurnRestrictionsParticipatingIn(layer.data.getSelected()); if (trs.isEmpty()) { // current selection isn't participating in turn restrictions. Launch // an editor for a new turn restriction // Relation tr = new TurnRestrictionBuilder().buildFromSelection(layer); TurnRestrictionEditor editor = new TurnRestrictionEditor(Main.map.mapView, layer, tr); TurnRestrictionEditorManager.getInstance().positionOnScreen(editor); TurnRestrictionEditorManager.getInstance().register(layer, tr, editor); editor.setVisible(true); } else { // let the user choose whether he wants to create a new turn restriction or // edit one of the turn restrictions participating in the current selection TurnRestrictionSelectionPopupPanel pnl = new TurnRestrictionSelectionPopupPanel( layer ); pnl.launch(); } } }