- Files:
-
- 3 deleted
- 10 edited
-
(root) (modified) (1 prop)
-
src/org/openstreetmap/josm/actions/DebugAction.java (modified) (1 diff)
-
src/org/openstreetmap/josm/actions/MapMode.java (modified) (1 diff)
-
src/org/openstreetmap/josm/actions/OpenGpxAction.java (modified) (1 diff)
-
src/org/openstreetmap/josm/actions/SelectionAction.java (deleted)
-
src/org/openstreetmap/josm/actions/SelectionManager.java (deleted)
-
src/org/openstreetmap/josm/actions/ZoomAction.java (modified) (4 diffs)
-
src/org/openstreetmap/josm/data/osm/DataSet.java (modified) (3 diffs)
-
src/org/openstreetmap/josm/data/osm/OsmPrimitive.java (modified) (1 diff)
-
src/org/openstreetmap/josm/gui/MapFrame.java (modified) (2 diffs)
-
src/org/openstreetmap/josm/gui/MapMover.java (deleted)
-
src/org/openstreetmap/josm/gui/MapView.java (modified) (4 diffs)
-
src/org/openstreetmap/josm/io/GpxReader.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
/
- Property svn:ignore deleted
-
/src/org/openstreetmap/josm/actions/DebugAction.java
r3 r1 25 25 26 26 public DebugAction(MapFrame mapFrame) { 27 super("Debug Zones", " debug", KeyEvent.VK_D, mapFrame);27 super("Debug Zones", "images/debug.png", KeyEvent.VK_D, mapFrame); 28 28 } 29 29 -
/src/org/openstreetmap/josm/actions/MapMode.java
r3 r1 31 31 */ 32 32 public MapMode(String name, String iconName, int mnemonic, MapFrame mapFrame) { 33 super(name, new ImageIcon( "images/"+iconName+".png"));33 super(name, new ImageIcon(iconName)); 34 34 putValue(MNEMONIC_KEY, mnemonic); 35 35 this.mapFrame = mapFrame; -
/src/org/openstreetmap/josm/actions/OpenGpxAction.java
r3 r1 54 54 try { 55 55 DataSet dataSet = new GpxReader().parse(new FileReader(gpxFile)); 56 if (dataSet.name == null) 57 dataSet.name = gpxFile.getName(); 56 58 MapFrame map = new MapFrame(dataSet); 57 59 Main.main.setMapFrame(gpxFile.getName(), map); -
/src/org/openstreetmap/josm/actions/ZoomAction.java
r3 r1 1 1 package org.openstreetmap.josm.actions; 2 2 3 import static java.awt.event.MouseEvent.BUTTON1; 4 import static java.awt.event.MouseEvent.BUTTON3; 5 6 import java.awt.Color; 7 import java.awt.Cursor; 8 import java.awt.Graphics; 9 import java.awt.Point; 3 10 import java.awt.Rectangle; 4 11 import java.awt.event.KeyEvent; 5 6 import org.openstreetmap.josm.actions.SelectionManager.SelectionEnded; 12 import java.awt.event.MouseEvent; 13 import java.awt.event.MouseListener; 14 import java.awt.event.MouseMotionListener; 15 import java.awt.event.MouseWheelEvent; 16 import java.awt.event.MouseWheelListener; 17 7 18 import org.openstreetmap.josm.data.GeoPoint; 8 19 import org.openstreetmap.josm.gui.MapFrame; … … 10 21 11 22 /** 12 * Enable the zoom mode within the MapFrame. 13 * 14 * Holding down the left mouse button select a rectangle with the same aspect 15 * ratio than the current map view. 16 * Holding down left and right let the user move the former selected rectangle. 17 * Releasing the left button zoom to the selection. 23 * Enable the zoom mode within the MapFrame. 18 24 * 19 25 * @author imi 20 26 */ 21 public class ZoomAction extends MapMode implements SelectionEnded { 22 27 public class ZoomAction extends MapMode 28 implements MouseListener, MouseMotionListener, MouseWheelListener { 29 30 /** 31 * Point, the mouse was when pressing the button. 32 */ 33 private Point mousePosStart; 34 /** 35 * Point to the actual mouse position. 36 */ 37 private Point mousePos; 38 /** 39 * The point in the map that was the under the mouse point 40 * when moving around started. 41 */ 42 private GeoPoint mousePosMove; 23 43 /** 24 44 * Shortcut to the mapview. … … 26 46 private final MapView mv; 27 47 /** 28 * Manager that manages the selection rectangle with the aspect ratio of the 29 * MapView. 30 */ 31 private final SelectionManager selectionManager; 48 * Whether currently an zooming rectangle is visible or not 49 */ 50 private boolean zoomRectVisible = false; 51 52 /** 53 * For the current state. 54 */ 55 enum State {NOTHING, MOVE, ZOOM, ZOOM_POS}; 56 /** 57 * The current state, the ZoomAction is in. 58 */ 59 State state = State.NOTHING; 60 32 61 33 62 … … 37 66 */ 38 67 public ZoomAction(MapFrame mapFrame) { 39 super("Zoom", " zoom", KeyEvent.VK_Z, mapFrame);68 super("Zoom", "images/zoom.png", KeyEvent.VK_Z, mapFrame); 40 69 mv = mapFrame.mapView; 41 selectionManager = new SelectionManager(this, true, mv); 42 } 43 44 /** 45 * Zoom to the rectangle on the map. 46 */ 47 public void selectionEnded(Rectangle r, int modifier) { 48 double scale = mv.getScale() * r.getWidth()/mv.getWidth(); 49 GeoPoint newCenter = mv.getPoint(r.x+r.width/2, r.y+r.height/2, false); 50 mv.zoomTo(newCenter, scale); 70 } 71 72 /** 73 * Just to keep track of mouse movements. 74 */ 75 public void mouseMoved(MouseEvent e) { 76 mousePos = e.getPoint(); 77 } 78 79 /** 80 * Initializing the mouse moving state. 81 */ 82 public void mousePressed(MouseEvent e) { 83 switch (state) { 84 case NOTHING: 85 switch (e.getButton()) { 86 case BUTTON1: 87 state = State.ZOOM; 88 mousePosStart = e.getPoint(); 89 paintZoomRect(true); 90 break; 91 case BUTTON3: 92 state = State.MOVE; 93 mousePosMove = mv.getPoint(e.getX(), e.getY(), false); 94 mv.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); 95 break; 96 } 97 break; 98 case ZOOM: 99 if (e.getButton() == BUTTON3) 100 state = State.ZOOM_POS; 101 break; 102 case MOVE: 103 if (e.getButton() == BUTTON1) { 104 state = State.ZOOM_POS; 105 mousePosStart = e.getPoint(); 106 mousePos = e.getPoint(); 107 } 108 } 109 } 110 111 public void mouseReleased(MouseEvent e) { 112 switch (state) { 113 case ZOOM: 114 if (e.getButton() == BUTTON1) { 115 state = State.NOTHING; 116 paintZoomRect(false); 117 Rectangle r = calculateZoomableRectangle(); 118 mousePosStart = null; 119 // zoom to the rectangle 120 if (r != null) { 121 double scale = mv.getScale() * r.getWidth()/mv.getWidth(); 122 GeoPoint newCenter = mv.getPoint(r.x+r.width/2, r.y+r.height/2, false); 123 mv.zoomTo(newCenter, scale); 124 } 125 } 126 break; 127 case MOVE: 128 if (e.getButton() == BUTTON3) { 129 state = State.NOTHING; 130 mousePosMove = null; 131 mv.setCursor(Cursor.getDefaultCursor()); 132 } 133 break; 134 case ZOOM_POS: 135 switch (e.getButton()) { 136 case BUTTON1: 137 state = State.MOVE; 138 paintZoomRect(false); 139 mousePosStart = null; 140 mousePos = null; 141 mousePosMove = mv.getPoint(e.getX(), e.getY(), false); 142 mv.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); 143 break; 144 case BUTTON3: 145 state = State.ZOOM; 146 break; 147 } 148 } 149 } 150 151 public void mouseDragged(MouseEvent e) { 152 switch (state) { 153 case MOVE: 154 if (mousePosMove == null) { 155 mousePosMove = mv.getCenter(); 156 mv.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); 157 } 158 GeoPoint center = mv.getCenter(); 159 GeoPoint mouseCenter = mv.getPoint(e.getX(), e.getY(), false); 160 GeoPoint p = new GeoPoint(); 161 p.x = mousePosMove.x + center.x - mouseCenter.x; 162 p.y = mousePosMove.y + center.y - mouseCenter.y; 163 mv.zoomTo(p, mv.getScale()); 164 break; 165 case ZOOM: 166 if (mousePosStart == null) 167 mousePosStart = e.getPoint(); 168 if (mousePos == null) 169 mousePos = e.getPoint(); 170 paintZoomRect(false); 171 mousePos = e.getPoint(); 172 paintZoomRect(true); 173 break; 174 case ZOOM_POS: 175 if (mousePosStart == null) 176 mousePosStart = e.getPoint(); 177 if (mousePos == null) 178 mousePos = e.getPoint(); 179 paintZoomRect(false); 180 mousePosStart.x += e.getX()-mousePos.x; 181 mousePosStart.y += e.getY()-mousePos.y; 182 mousePos = e.getPoint(); 183 paintZoomRect(true); 184 break; 185 } 186 } 187 188 public void mouseWheelMoved(MouseWheelEvent e) { 189 boolean zoomRect = zoomRectVisible; 190 paintZoomRect(false); 191 double zoom = Math.max(0.1, 1 + e.getWheelRotation()/5.0); 192 mv.zoomTo(mv.getCenter(), mv.getScale()*zoom); 193 paintZoomRect(zoomRect); 194 } 195 196 /** 197 * Calculate the zoomable rectangle between mousePos and mousePosStart. 198 * Zoomable is the rectangle with a fix point at mousePosStart and the 199 * correct aspect ratio that fits into the current mapView's size. 200 * @return Rectangle which should be used to zoom. 201 */ 202 private Rectangle calculateZoomableRectangle() { 203 if (mousePosStart == null || mousePos == null || mousePosStart == mousePos) 204 return null; 205 Rectangle r = new Rectangle(); 206 r.x = mousePosStart.x; 207 r.y = mousePosStart.y; 208 r.width = mousePos.x - mousePosStart.x; 209 r.height = mousePos.y - mousePosStart.y; 210 if (r.width < 0) { 211 r.x += r.width; 212 r.width = -r.width; 213 } 214 if (r.height < 0) { 215 r.y += r.height; 216 r.height = -r.height; 217 } 218 219 // keep the aspect ration by shrinking the rectangle 220 double aspectRatio = (double)mv.getWidth()/mv.getHeight(); 221 if ((double)r.width/r.height > aspectRatio) 222 r.width = (int)(r.height*aspectRatio); 223 else 224 r.height = (int)(r.width/aspectRatio); 225 226 return r; 227 } 228 229 /** 230 * Paint the mouse selection rectangle XOR'ed over the display. 231 * 232 * @param drawVisible True, to draw the rectangle or false to erase it. 233 */ 234 private void paintZoomRect(boolean drawVisible) { 235 Rectangle r = calculateZoomableRectangle(); 236 if (r != null && drawVisible != zoomRectVisible) { 237 Graphics g = mv.getGraphics(); 238 g.setColor(Color.BLACK); 239 g.setXORMode(Color.WHITE); 240 g.drawRect(r.x,r.y,r.width,r.height); 241 zoomRectVisible = !zoomRectVisible; 242 } 51 243 } 52 244 53 245 public void registerListener(MapView mapView) { 54 selectionManager.register(mapView); 246 mapView.addMouseListener(this); 247 mapView.addMouseMotionListener(this); 248 mapView.addMouseWheelListener(this); 55 249 } 56 250 57 251 public void unregisterListener(MapView mapView) { 58 selectionManager.unregister(mapView); 59 } 252 mapView.removeMouseListener(this); 253 mapView.removeMouseMotionListener(this); 254 mapView.removeMouseWheelListener(this); 255 } 256 257 /** 258 * Does nothing. Only to satisfy MouseListener 259 */ 260 public void mouseClicked(MouseEvent e) {} 261 /** 262 * Does nothing. Only to satisfy MouseListener 263 */ 264 public void mouseEntered(MouseEvent e) {} 265 /** 266 * Does nothing. Only to satisfy MouseListener 267 */ 268 public void mouseExited(MouseEvent e) {} 60 269 } -
/src/org/openstreetmap/josm/data/osm/DataSet.java
r3 r1 1 1 package org.openstreetmap.josm.data.osm; 2 2 3 import java.util.Collection;4 3 import java.util.List; 5 4 … … 17 16 */ 18 17 public class DataSet implements Cloneable { 18 19 /** 20 * human readable name of the data. 21 */ 22 public String name; 23 24 /** 25 * human readable description of what the data is about. Space for comments. 26 */ 27 public String desc; 28 29 /** 30 * Who recorded/created it. 31 */ 32 public String author; 19 33 20 34 /** … … 95 109 } 96 110 97 /**98 * Remove the selection of the whole dataset.99 */100 public void clearSelection() {101 clearSelection(allNodes);102 clearSelection(tracks);103 for (Track t : tracks)104 clearSelection(t.segments);105 }106 107 /**108 * Remove the selection from every value in the collection.109 * @param list The collection to remove the selection from.110 */111 private void clearSelection(Collection<? extends OsmPrimitive> list) {112 if (list == null)113 return;114 for (OsmPrimitive osm : list) {115 osm.selected = false;116 if (osm.keys != null)117 clearSelection(osm.keys.keySet());118 }119 }120 121 111 public DataSet clone() { 122 112 try {return (DataSet)super.clone();} catch (CloneNotSupportedException e) {} -
/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
r3 r1 16 16 */ 17 17 public Map<Key, String> keys; 18 19 /**20 * If set to true, this object has been modified in the current session.21 */22 public boolean modified = false;23 24 /**25 * If set to true, this object is currently selected.26 */27 public boolean selected = false;28 18 } -
/src/org/openstreetmap/josm/gui/MapFrame.java
r3 r1 27 27 import org.openstreetmap.josm.actions.DebugAction; 28 28 import org.openstreetmap.josm.actions.MapMode; 29 import org.openstreetmap.josm.actions.SelectionAction;30 29 import org.openstreetmap.josm.actions.ZoomAction; 31 30 import org.openstreetmap.josm.data.Preferences; … … 126 125 toolBarActions.setFloatable(false); 127 126 toolBarActions.add(new IconToggleButton(new ZoomAction(this))); 128 toolBarActions.add(new IconToggleButton(new SelectionAction(this)));129 127 toolBarActions.add(new IconToggleButton(new DebugAction(this))); 130 128 -
/src/org/openstreetmap/josm/gui/MapView.java
r3 r1 4 4 import java.awt.Component; 5 5 import java.awt.Graphics; 6 import java.awt.Point;7 6 import java.awt.event.ActionEvent; 8 7 import java.awt.event.ComponentEvent; … … 127 126 addComponentListener(this); 128 127 129 // initialize the movement listener130 new MapMover(this);131 132 128 // initialize the projection 133 129 setProjection(Main.pref.projection.clone()); … … 156 152 getProjection().xy2latlon(p); 157 153 return p; 158 }159 160 /**161 * Return the point on the screen where this GeoPoint would be.162 * @param point The point, where this geopoint would be drawn.163 * @return The point on screen where "point" would be drawn, relative164 * to the own top/left.165 */166 public Point getScreenPoint(GeoPoint point) {167 GeoPoint p;168 if (!Double.isNaN(point.x) && !Double.isNaN(point.y))169 p = point;170 else {171 if (Double.isNaN(point.lat) || Double.isNaN(point.lon))172 throw new IllegalArgumentException("point: Either lat/lon or x/y must be set.");173 p = point.clone();174 projection.latlon2xy(p);175 }176 return new Point(toScreenX(p.x), toScreenY(p.y));177 154 } 178 155 … … 248 225 249 226 // draw tracks 227 g.setColor(Color.RED); 250 228 if (dataSet.tracks != null) 251 229 for (Track track : dataSet.tracks) 252 for (LineSegment ls : track.segments) { 253 g.setColor(ls.selected ? Color.WHITE : Color.GRAY); 230 for (LineSegment ls : track.segments) 254 231 g.drawLine(toScreenX(ls.start.coor.x), toScreenY(ls.start.coor.y), 255 232 toScreenX(ls.end.coor.x), toScreenY(ls.end.coor.y)); 256 }257 233 258 234 // draw nodes 235 g.setColor(Color.YELLOW); 259 236 for (Node w : dataSet.allNodes) { 260 g.setColor(w.selected ? Color.WHITE : Color.RED);261 237 g.drawArc(toScreenX(w.coor.x), toScreenY(w.coor.y), 3, 3, 0, 360); 262 238 } -
/src/org/openstreetmap/josm/io/GpxReader.java
r3 r1 67 67 private DataSet parseDataSet(Element e) { 68 68 DataSet data = new DataSet(); 69 // read global information 70 data.author = e.getAttributeValue("creator"); 71 Element metadata = e.getChild("metadata"); 72 if (metadata != null) 73 { 74 data.desc = metadata.getChildText("desc", XSD); 75 data.name = metadata.getChildText("name", XSD); 76 } 77 69 78 // read waypoints not contained in tracks or areas 70 79 data.allNodes = new LinkedList<Node>();
Note:
See TracChangeset
for help on using the changeset viewer.
