// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.utilsplugin2.curves; import static org.openstreetmap.josm.gui.help.HelpUtil.ht; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.actions.JosmAction; import org.openstreetmap.josm.command.Command; import org.openstreetmap.josm.command.SequenceCommand; import org.openstreetmap.josm.data.osm.Node; import org.openstreetmap.josm.data.osm.OsmPrimitive; import org.openstreetmap.josm.data.osm.Way; import org.openstreetmap.josm.tools.Shortcut; // TODO: investigate splines public class CurveAction extends JosmAction { private static final long serialVersionUID = 1L; private int angleSeparation = -1; public CurveAction() { super(tr("Circle arc"), "circlearc", tr("Create a circle arc"), Shortcut.registerShortcut("tools:createcurve", tr("Tool: {0}", tr("Create a circle arc")), KeyEvent.VK_C, Shortcut.SHIFT), true); putValue("help", ht("/Action/CreateCircleArc")); updatePreferences(); } private void updatePreferences() { // @formatter:off angleSeparation = Main.pref.getInteger(prefKey("circlearc.angle-separation"), 20); // @formatter:on } private String prefKey(String subKey) { return "curves." + subKey; } @Override public void actionPerformed(ActionEvent e) { if (!isEnabled()) return; updatePreferences(); List<Node> selectedNodes = new ArrayList<>(getLayerManager().getEditDataSet().getSelectedNodes()); List<Way> selectedWays = new ArrayList<>(getLayerManager().getEditDataSet().getSelectedWays()); Collection<Command> cmds = CircleArcMaker.doCircleArc(selectedNodes, selectedWays, angleSeparation); if (cmds != null) Main.main.undoRedo.add(new SequenceCommand("Create a curve", cmds)); } @Override protected void updateEnabledState() { updateEnabledStateOnCurrentSelection(); } @Override protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) { setEnabled(selection != null && !selection.isEmpty()); } }