Changeset 41 in josm for src/org/openstreetmap


Ignore:
Timestamp:
2006-01-19T08:22:18+01:00 (19 years ago)
Author:
imi
Message:
  • renamed EPSG projection
  • started WorldChooser in download menu (not finished)
Location:
src/org/openstreetmap/josm
Files:
2 added
12 edited

Legend:

Unmodified
Added
Removed
  • src/org/openstreetmap/josm/actions/DownloadAction.java

    r40 r41  
    11package org.openstreetmap.josm.actions;
    22
     3import java.awt.Dimension;
    34import java.awt.GridBagLayout;
    45import java.awt.GridLayout;
     
    3031import org.openstreetmap.josm.gui.MapFrame;
    3132import org.openstreetmap.josm.gui.MapView;
     33import org.openstreetmap.josm.gui.WorldChooser;
    3234import org.openstreetmap.josm.gui.BookmarkList.Bookmark;
    3335import org.openstreetmap.josm.gui.layer.Layer;
     
    6062        public void actionPerformed(ActionEvent e) {
    6163                JPanel dlg = new JPanel(new GridBagLayout());
     64               
     65                WorldChooser wc = new WorldChooser();
     66                dlg.add(wc, GBC.eop());
     67
    6268                dlg.add(new JLabel("Bounding box"), GBC.eol());
    63 
    6469                dlg.add(new JLabel("min lat"), GBC.std().insets(10,0,5,0));
    6570                dlg.add(latlon[0], GBC.std());
     
    139144                dlg.add(buttons, GBC.eop().fill(GBC.HORIZONTAL));
    140145               
     146                Dimension d = dlg.getPreferredSize();
     147                wc.setPreferredSize(new Dimension(d.width, d.width/2));
     148               
    141149                int r = JOptionPane.showConfirmDialog(Main.main, dlg, "Choose an area",
    142150                                JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
  • src/org/openstreetmap/josm/data/GeoPoint.java

    r40 r41  
    3535                this.lat = lat;
    3636                this.lon = lon;
     37        }
     38
     39        /**
     40         * Construct the point with all values available.
     41         */
     42        public GeoPoint(double lat, double lon, double x, double y) {
     43                this.lat = lat;
     44                this.lon = lon;
     45                this.x = x;
     46                this.y = y;
    3747        }
    3848
  • src/org/openstreetmap/josm/data/Preferences.java

    r38 r41  
    5555         * Base URL to the osm data server
    5656         */
    57         public String osmDataServer = "http://www.openstreetmap.org/api/0.1";
     57        public String osmDataServer = "http://www.openstreetmap.org/api/0.2";
    5858        /**
    5959         * The username to the osm server
  • src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java

    r35 r41  
    99import org.openstreetmap.josm.data.osm.Node;
    1010import org.openstreetmap.josm.data.osm.Track;
    11 import org.openstreetmap.josm.gui.MapView;
     11import org.openstreetmap.josm.gui.NavigatableComponent;
    1212
    1313/**
     
    2929         * MapView to get screen coordinates.
    3030         */
    31         private final MapView mv;
     31        private final NavigatableComponent nc;
    3232       
    3333        /**
     
    3636         * @param mv  The view to get screen coordinates from.
    3737         */
    38         public SimplePaintVisitor(Graphics g, MapView mv) {
     38        public SimplePaintVisitor(Graphics g, NavigatableComponent mv) {
    3939                this.g = g;
    40                 this.mv = mv;
     40                this.nc = mv;
    4141        }
    4242       
     
    8383         */
    8484        private void drawNode(Node n, Color color) {
    85                 Point p = mv.getScreenPoint(n.coor);
     85                Point p = nc.getScreenPoint(n.coor);
    8686                g.setColor(color);
    8787                g.drawRect(p.x-1, p.y-1, 2, 2);
     
    9595                        col = Color.WHITE;
    9696                g.setColor(col);
    97                 Point p1 = mv.getScreenPoint(ls.start.coor);
    98                 Point p2 = mv.getScreenPoint(ls.end.coor);
     97                Point p1 = nc.getScreenPoint(ls.start.coor);
     98                Point p2 = nc.getScreenPoint(ls.end.coor);
    9999                g.drawLine(p1.x, p1.y, p2.x, p2.y);
    100100        }
  • src/org/openstreetmap/josm/data/projection/Projection.java

    r40 r41  
    1919abstract public class Projection implements Cloneable {
    2020
    21         public static double MAX_LAT = 85; // yep - JOSM cannot cartograph the poles.
    22         public static double MAX_LON = 179.99999;
     21        public static double MAX_LAT = 85;
     22        public static double MAX_LON = 180;
    2323
    2424        /**
  • src/org/openstreetmap/josm/gui/BookmarkList.java

    r21 r41  
    4444                setModel(new DefaultListModel());
    4545                load();
    46                 setVisibleRowCount(10);
     46                setVisibleRowCount(7);
    4747                setCellRenderer(new DefaultListCellRenderer(){
    4848                        @Override
  • src/org/openstreetmap/josm/gui/ImageProvider.java

    r22 r41  
    3030         * The icon cache
    3131         */
    32         private static Map<URL, Icon> cache = new HashMap<URL, Icon>();
     32        private static Map<URL, ImageIcon> cache = new HashMap<URL, ImageIcon>();
    3333       
    3434        /**
     
    3939         * @return      The requested ImageIcon.
    4040         */
    41         public static Icon get(String subdir, String name) {
     41        public static ImageIcon get(String subdir, String name) {
    4242                if (subdir != "")
    4343                        subdir += "/";
    4444                URL path = Main.class.getResource("/images/"+subdir+name+".png");
    45                 Icon icon = cache.get(path);
     45                ImageIcon icon = cache.get(path);
    4646                if (icon == null) {
    47                         icon = new ImageIcon(Main.class.getResource("/images/"+subdir+name+".png"));
     47                        icon = new ImageIcon(path);
    4848                        cache.put(path, icon);
    4949                }
     
    5454         * Shortcut for get("", name);
    5555         */
    56         public static Icon get(String name) {
     56        public static ImageIcon get(String name) {
    5757                return get("", name);
    5858        }
  • src/org/openstreetmap/josm/gui/MapMover.java

    r18 r41  
    2626         * The map to move around.
    2727         */
    28         private final MapView mv;
     28        private final NavigatableComponent nc;
    2929        /**
    3030         * The old cursor when we changed it to movement cursor.
     
    3636         * @param mapView The map that should be moved.
    3737         */
    38         public MapMover(MapView mapView) {
    39                 this.mv = mapView;
    40                 mv.addMouseListener(this);
    41                 mv.addMouseMotionListener(this);
    42                 mv.addMouseWheelListener(this);
     38        public MapMover(NavigatableComponent mapView) {
     39                this.nc = mapView;
     40                nc.addMouseListener(this);
     41                nc.addMouseMotionListener(this);
     42                nc.addMouseWheelListener(this);
    4343        }
    4444       
     
    5151                        if (mousePosMove == null)
    5252                                startMovement(e);
    53                         GeoPoint center = mv.getCenter();
    54                         GeoPoint mouseCenter = mv.getPoint(e.getX(), e.getY(), false);
     53                        GeoPoint center = nc.getCenter();
     54                        GeoPoint mouseCenter = nc.getPoint(e.getX(), e.getY(), false);
    5555                        GeoPoint p = new GeoPoint();
    5656                        p.x = mousePosMove.x + center.x - mouseCenter.x; 
    5757                        p.y = mousePosMove.y + center.y - mouseCenter.y;
    58                         mv.zoomTo(p, mv.getScale());
     58                        nc.zoomTo(p, nc.getScale());
    5959                } else
    6060                        endMovement();
     
    8686         */
    8787        private void startMovement(MouseEvent e) {
    88                 mousePosMove = mv.getPoint(e.getX(), e.getY(), false);
    89                 oldCursor = mv.getCursor();
    90                 mv.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
     88                mousePosMove = nc.getPoint(e.getX(), e.getY(), false);
     89                oldCursor = nc.getCursor();
     90                nc.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
    9191        }
    9292       
     
    9696        private void endMovement() {
    9797                if (oldCursor != null)
    98                         mv.setCursor(oldCursor);
     98                        nc.setCursor(oldCursor);
    9999                else
    100                         mv.setCursor(Cursor.getDefaultCursor());
     100                        nc.setCursor(Cursor.getDefaultCursor());
    101101                mousePosMove = null;
    102102                oldCursor = null;
     
    109109        public void mouseWheelMoved(MouseWheelEvent e) {
    110110                double zoom = Math.max(0.1, 1 + e.getWheelRotation()/5.0);
    111                 mv.zoomTo(mv.getCenter(), mv.getScale()*zoom);
     111                nc.zoomTo(nc.getCenter(), nc.getScale()*zoom);
    112112        }
    113113
  • src/org/openstreetmap/josm/gui/MapView.java

    r40 r41  
    1414import java.util.LinkedList;
    1515
    16 import javax.swing.JComponent;
    1716import javax.swing.event.ChangeEvent;
    1817import javax.swing.event.ChangeListener;
     
    4342 * @author imi
    4443 */
    45 public class MapView extends JComponent implements ChangeListener, PropertyChangeListener {
     44public class MapView extends NavigatableComponent implements ChangeListener, PropertyChangeListener {
    4645
    4746        /**
     
    5958         */
    6059        boolean autoScale = true;
    61 
    62         /**
    63          * The scale factor in meter per pixel.
    64          */
    65         private double scale;
    66         /**
    67          * Center n/e coordinate of the desired screen center.
    68          */
    69         private GeoPoint center;
    7060
    7161        /**
     
    169159                else
    170160                        layers.add(pos, layer);
    171         }
    172 
    173         /**
    174          * Get geographic coordinates from a specific pixel coordination
    175          * on the screen.
    176          *
    177          * If you don't need it, provide false at third parameter to speed
    178          * up the calculation.
    179          * 
    180          * @param x X-Pixelposition to get coordinate from
    181          * @param y Y-Pixelposition to get coordinate from
    182          * @param latlon If set, the return value will also have the
    183          *                               latitude/longitude filled.
    184          *
    185          * @return The geographic coordinate, filled with x/y (northing/easting)
    186          *              settings and, if requested with latitude/longitude.
    187          */
    188         public GeoPoint getPoint(int x, int y, boolean latlon) {
    189                 GeoPoint p = new GeoPoint();
    190                 p.x = (x - getWidth()/2.0)*scale + center.x;
    191                 p.y = (getHeight()/2.0 - y)*scale + center.y;
    192                 if (latlon)
    193                         Main.pref.getProjection().xy2latlon(p);
    194                 return p;
    195         }
    196        
    197         /**
    198          * Return the point on the screen where this GeoPoint would be.
    199          * @param point The point, where this geopoint would be drawn.
    200          * @return The point on screen where "point" would be drawn, relative
    201          *              to the own top/left.
    202          */
    203         public Point getScreenPoint(GeoPoint point) {
    204                 GeoPoint p;
    205                 if (!Double.isNaN(point.x) && !Double.isNaN(point.y))
    206                         p = point;
    207                 else {
    208                         if (Double.isNaN(point.lat) || Double.isNaN(point.lon))
    209                                 throw new IllegalArgumentException("point: Either lat/lon or x/y must be set.");
    210                         p = point.clone();
    211                         Main.pref.getProjection().latlon2xy(p);
    212                 }
    213                 int x = ((int)Math.round((p.x-center.x) / scale + getWidth()/2));
    214                 int y = ((int)Math.round((center.y-p.y) / scale + getHeight()/2));
    215                 return new Point(x,y);
    216161        }
    217162
     
    358303       
    359304        /**
    360          * Zoom to the given coordinate.
    361          * @param centerX The center x-value (easting) to zoom to.
    362          * @param centerY The center y-value (northing) to zoom to.
    363          * @param scale The scale to use.
    364          */
    365         public void zoomTo(GeoPoint newCenter, double scale) {
    366                 boolean oldAutoScale = autoScale;
    367                 GeoPoint oldCenter = center;
    368                 double oldScale = this.scale;
    369                
    370                 autoScale = false;
    371                 center = newCenter.clone();
    372                 Main.pref.getProjection().xy2latlon(center);
    373                 this.scale = scale;
    374                 recalculateCenterScale();
    375 
    376                 firePropertyChange("center", oldCenter, center);
    377                 if (oldAutoScale != autoScale)
    378                         firePropertyChange("autoScale", oldAutoScale, autoScale);
    379                 if (oldScale != scale)
    380                         firePropertyChange("scale", oldScale, scale);
    381         }
    382 
    383         /**
    384305         * Draw the component.
    385306         */
     
    394315                                l.paint(g, this);
    395316                }
    396                
     317
    397318                // draw world borders
    398                 g.setColor(Color.DARK_GRAY);
     319                g.setColor(Color.WHITE);
    399320                Bounds b = new Bounds();
    400321                Point min = getScreenPoint(b.min);
     
    404325                int x2 = Math.max(min.x, max.x);
    405326                int y2 = Math.max(min.y, max.y);
    406                 g.drawRect(x1, y1, x2-x1+1, y2-y1+1);
    407         }
    408 
    409         /**
    410          * Notify from the projection, that something has changed.
    411          * @param e
    412          */
    413         public void stateChanged(ChangeEvent e) {
    414                 // reset all datasets.
    415                 Projection p = Main.pref.getProjection();
    416                 for (Node n : Main.main.ds.nodes)
    417                         p.latlon2xy(n.coor);
    418                 recalculateCenterScale();
    419         }
    420 
    421         /**
    422          * Return the current scale value.
    423          * @return The scale value currently used in display
    424          */
    425         public double getScale() {
    426                 return scale;
     327                if (x1 > 0 || y1 > 0 || x2 < getWidth() || y2 < getHeight())
     328                        g.drawRect(x1, y1, x2-x1+1, y2-y1+1);
    427329        }
    428330
     
    444346                }
    445347        }
    446         /**
    447          * @return Returns the center point. A copy is returned, so users cannot
    448          *              change the center by accessing the return value. Use zoomTo instead.
    449          */
    450         public GeoPoint getCenter() {
    451                 return center.clone();
    452         }
    453 
    454        
    455         /**
    456          * Change to the new projection. Recalculate the dataset and zoom, if autoZoom
    457          * is active.
    458          * @param oldProjection The old projection. Unregister from this.
    459          * @param newProjection The new projection. Register as state change listener.
    460          */
    461         public void propertyChange(PropertyChangeEvent evt) {
    462                 if (!evt.getPropertyName().equals("projection"))
    463                         return;
    464                 if (evt.getOldValue() != null)
    465                         ((Projection)evt.getOldValue()).removeChangeListener(this);
    466                 if (evt.getNewValue() != null) {
    467                         Projection p = (Projection)evt.getNewValue();
    468                         p.addChangeListener(this);
    469 
    470                         stateChanged(new ChangeEvent(this));
    471                 }
    472         }
    473        
    474348        /**
    475349         * Set the new dimension to the projection class. Also adjust the components
     
    581455                return editLayer;
    582456        }
     457
     458        /**
     459         * In addition to the base class funcitonality, this keep trak of the autoscale
     460         * feature.
     461         */
     462        @Override
     463        public void zoomTo(GeoPoint newCenter, double scale) {
     464                boolean oldAutoScale = autoScale;
     465                GeoPoint oldCenter = center;
     466                double oldScale = this.scale;
     467                autoScale = false;
     468
     469                super.zoomTo(newCenter, scale);
     470               
     471                recalculateCenterScale();
     472               
     473                firePropertyChange("center", oldCenter, center);
     474                if (oldAutoScale != autoScale)
     475                        firePropertyChange("autoScale", oldAutoScale, autoScale);
     476                if (oldScale != scale)
     477                        firePropertyChange("scale", oldScale, scale);
     478        }
     479
     480        /**
     481         * Notify from the projection, that something has changed.
     482         */
     483        public void stateChanged(ChangeEvent e) {
     484                // reset all datasets.
     485                Projection p = Main.pref.getProjection();
     486                for (Node n : Main.main.ds.nodes)
     487                        p.latlon2xy(n.coor);
     488                recalculateCenterScale();
     489        }
     490
     491        /**
     492         * Change to the new projection. Recalculate the dataset and zoom, if autoZoom
     493         * is active.
     494         * @param oldProjection The old projection. Unregister from this.
     495         * @param newProjection The new projection. Register as state change listener.
     496         */
     497        public void propertyChange(PropertyChangeEvent evt) {
     498                if (!evt.getPropertyName().equals("projection"))
     499                        return;
     500                if (evt.getOldValue() != null)
     501                        ((Projection)evt.getOldValue()).removeChangeListener(this);
     502                if (evt.getNewValue() != null) {
     503                        Projection p = (Projection)evt.getNewValue();
     504                        p.addChangeListener(this);
     505       
     506                        stateChanged(new ChangeEvent(this));
     507                }
     508        }
    583509}
  • src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java

    r40 r41  
    22
    33import java.awt.Graphics;
     4import java.beans.PropertyChangeEvent;
     5import java.beans.PropertyChangeListener;
    46import java.util.Collection;
    57import java.util.Iterator;
     
    5456                super(name);
    5557                this.data = data;
     58                Main.pref.addPropertyChangeListener(new PropertyChangeListener() {
     59                        public void propertyChange(PropertyChangeEvent evt) {
     60                                if (evt.getPropertyName().equals("projection"))
     61                                        for (Node n : OsmDataLayer.this.data.nodes)
     62                                                ((Projection)evt.getNewValue()).latlon2xy(n.coor);
     63                        }
     64                });
    5665        }
    5766
  • src/org/openstreetmap/josm/io/OsmServerReader.java

    r37 r41  
    7878         */
    7979        public DataSet parseOsm() throws JDOMException, IOException {
    80                 long start = System.currentTimeMillis();
    8180                Reader r = getReader(Main.pref.osmDataServer+"/map?bbox="+lon1+","+lat1+","+lon2+","+lat2);
    82                 System.out.println(System.currentTimeMillis() - start);
    8381                if (r == null)
    8482                        return null;
  • src/org/openstreetmap/josm/io/OsmServerWriter.java

    r35 r41  
    123123                                Document doc = new Document(root);
    124124                                xmlOut.output(doc, out);
    125                                 xmlOut.output(doc, System.out);
    126125                                out.close();
    127126                        }
Note: See TracChangeset for help on using the changeset viewer.