Changeset 2 in josm for src/org/openstreetmap/josm/actions
- Timestamp:
- 2005-09-29T00:33:19+02:00 (19 years ago)
- Location:
- src/org/openstreetmap/josm/actions
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
src/org/openstreetmap/josm/actions/DebugAction.java
r1 r2 25 25 26 26 public DebugAction(MapFrame mapFrame) { 27 super("Debug Zones", " images/debug.png", KeyEvent.VK_D, mapFrame);27 super("Debug Zones", "debug", KeyEvent.VK_D, mapFrame); 28 28 } 29 29 -
src/org/openstreetmap/josm/actions/MapMode.java
r1 r2 31 31 */ 32 32 public MapMode(String name, String iconName, int mnemonic, MapFrame mapFrame) { 33 super(name, new ImageIcon( iconName));33 super(name, new ImageIcon("images/"+iconName+".png")); 34 34 putValue(MNEMONIC_KEY, mnemonic); 35 35 this.mapFrame = mapFrame; -
src/org/openstreetmap/josm/actions/OpenGpxAction.java
r1 r2 54 54 try { 55 55 DataSet dataSet = new GpxReader().parse(new FileReader(gpxFile)); 56 if (dataSet.name == null)57 dataSet.name = gpxFile.getName();58 56 MapFrame map = new MapFrame(dataSet); 59 57 Main.main.setMapFrame(gpxFile.getName(), map); -
src/org/openstreetmap/josm/actions/ZoomAction.java
r1 r2 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;10 3 import java.awt.Rectangle; 11 4 import java.awt.event.KeyEvent; 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 5 6 import org.openstreetmap.josm.actions.SelectionManager.SelectionEnded; 18 7 import org.openstreetmap.josm.data.GeoPoint; 19 8 import org.openstreetmap.josm.gui.MapFrame; … … 21 10 22 11 /** 23 * Enable the zoom mode within the MapFrame. 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. 24 18 * 25 19 * @author imi 26 20 */ 27 public class ZoomAction extends MapMode 28 implements MouseListener, MouseMotionListener, MouseWheelListener { 21 public class ZoomAction extends MapMode implements SelectionEnded { 29 22 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 point40 * when moving around started.41 */42 private GeoPoint mousePosMove;43 23 /** 44 24 * Shortcut to the mapview. … … 46 26 private final MapView mv; 47 27 /** 48 * Whether currently an zooming rectangle is visible or not 28 * Manager that manages the selection rectangle with the aspect ratio of the 29 * MapView. 49 30 */ 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 31 private final SelectionManager selectionManager; 61 32 62 33 … … 66 37 */ 67 38 public ZoomAction(MapFrame mapFrame) { 68 super("Zoom", " images/zoom.png", KeyEvent.VK_Z, mapFrame);39 super("Zoom", "zoom", KeyEvent.VK_Z, mapFrame); 69 40 mv = mapFrame.mapView; 41 selectionManager = new SelectionManager(this, true, mv); 70 42 } 71 43 72 44 /** 73 * Just to keep track of mouse movements.45 * Zoom to the rectangle on the map. 74 46 */ 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 } 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); 243 51 } 244 52 245 53 public void registerListener(MapView mapView) { 246 mapView.addMouseListener(this); 247 mapView.addMouseMotionListener(this); 248 mapView.addMouseWheelListener(this); 54 selectionManager.register(mapView); 249 55 } 250 56 251 57 public void unregisterListener(MapView mapView) { 252 mapView.removeMouseListener(this); 253 mapView.removeMouseMotionListener(this); 254 mapView.removeMouseWheelListener(this); 58 selectionManager.unregister(mapView); 255 59 } 256 257 /**258 * Does nothing. Only to satisfy MouseListener259 */260 public void mouseClicked(MouseEvent e) {}261 /**262 * Does nothing. Only to satisfy MouseListener263 */264 public void mouseEntered(MouseEvent e) {}265 /**266 * Does nothing. Only to satisfy MouseListener267 */268 public void mouseExited(MouseEvent e) {}269 60 }
Note:
See TracChangeset
for help on using the changeset viewer.