source: josm/src/org/openstreetmap/josm/actions/ReverseSegmentAction.java@ 298

Last change on this file since 298 was 298, checked in by imi, 17 years ago
  • added license description to head of each source file
File size: 1.9 KB
Line 
1// License: GPL. Copyright 2007 by Immanuel Scholz and others
2/**
3 *
4 */
5package org.openstreetmap.josm.actions;
6
7import static org.openstreetmap.josm.tools.I18n.tr;
8
9import java.awt.event.ActionEvent;
10import java.awt.event.KeyEvent;
11import java.util.Collection;
12import java.util.LinkedList;
13
14import javax.swing.JOptionPane;
15
16import org.openstreetmap.josm.Main;
17import org.openstreetmap.josm.command.ChangeCommand;
18import org.openstreetmap.josm.command.Command;
19import org.openstreetmap.josm.command.SequenceCommand;
20import org.openstreetmap.josm.data.osm.Node;
21import org.openstreetmap.josm.data.osm.OsmPrimitive;
22import org.openstreetmap.josm.data.osm.Segment;
23import org.openstreetmap.josm.data.osm.Way;
24import org.openstreetmap.josm.data.osm.visitor.Visitor;
25
26public final class ReverseSegmentAction extends JosmAction {
27
28 public ReverseSegmentAction() {
29 super(tr("Reverse segments"), "segmentflip", tr("Reverse the direction of all selected Segments."), KeyEvent.VK_R, KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK, true);
30 }
31
32 public void actionPerformed(ActionEvent e) {
33 final Collection<Segment> sel = new LinkedList<Segment>();
34 new Visitor(){
35 public void visit(Node n) {}
36 public void visit(Segment s) {sel.add(s);}
37 public void visit(Way w) {sel.addAll(w.segments);}
38 public void visitAll() {
39 for (OsmPrimitive osm : Main.ds.getSelected())
40 osm.visit(this);
41 }
42 }.visitAll();
43
44 if (sel.isEmpty()) {
45 JOptionPane.showMessageDialog(Main.parent, tr("Please select at least one segment."));
46 return;
47 }
48 Collection<Command> c = new LinkedList<Command>();
49 for (Segment s : sel) {
50 Segment snew = new Segment(s);
51 Node n = snew.from;
52 snew.from = snew.to;
53 snew.to = n;
54 c.add(new ChangeCommand(s, snew));
55 }
56 Main.main.editLayer().add(new SequenceCommand(tr("Reverse Segments"), c));
57 Main.map.repaint();
58 }
59}
Note: See TracBrowser for help on using the repository browser.