Ticket #999: apt-get-update.patch

File apt-get-update.patch, 5.1 KB (added by xeen, 15 years ago)
  • src/org/openstreetmap/josm/actions/UpdateDataAction.java

    Cannot display: file marked as a binary type.
    svn:mime-type = application/octet-stream
    
    Property changes on: images\updatedata.png
    ___________________________________________________________________
    Name: svn:mime-type
       + application/octet-stream
    
     
     1// License: GPL. For details, see LICENSE file.
     2package org.openstreetmap.josm.actions;
     3
     4import static org.openstreetmap.josm.tools.I18n.tr;
     5
     6import java.awt.event.ActionEvent;
     7import java.awt.event.KeyEvent;
     8import java.awt.geom.Area;
     9import java.awt.geom.Rectangle2D;
     10import java.util.ArrayList;
     11import java.util.List;
     12
     13import org.openstreetmap.josm.Main;
     14import org.openstreetmap.josm.actions.downloadtasks.DownloadOsmTask;
     15import org.openstreetmap.josm.data.osm.DataSource;
     16import org.openstreetmap.josm.gui.ExtendedDialog;
     17import org.openstreetmap.josm.gui.download.DownloadDialog.DownloadTask;
     18import org.openstreetmap.josm.tools.Shortcut;
     19
     20public class UpdateDataAction extends JosmAction {
     21    public UpdateDataAction() {
     22        super(tr("Update Data"),
     23                "updatedata",
     24                tr("Updates the current data layer from the server (re-downloads data)"),
     25                Shortcut.registerShortcut("file:updatedata",
     26                        tr("Update Data"),
     27                        KeyEvent.VK_U,
     28                        Shortcut.GROUP_NONE),
     29                true);
     30    }
     31
     32    @Override
     33    public void actionPerformed(ActionEvent e) {
     34        int bboxCount = 0;
     35        List<Area> areas = new ArrayList<Area>();
     36        for(DataSource ds : Main.main.editLayer().data.dataSources)
     37            areas.add(new Area(ds.bounds.asRect()));
     38
     39        // This would loop over all DataLayers but download all data to the currently
     40        // selected one
     41        /*for(Layer l : Main.map.mapView.getAllLayers()) {
     42            if(!(l instanceof OsmDataLayer)) continue;
     43
     44            for(DataSource ds : ((OsmDataLayer)l).data.dataSources)
     45                areas.add(new Area(ds.bounds.asRect()));
     46        }*/
     47
     48        // The next two blocks removes every intersection from every DataSource Area
     49        // This prevents downloading the same data numerous times at intersections
     50        // and also skips smaller bounding boxes that are contained within larger ones
     51        // entirely.
     52        for(int i = 0; i < areas.size(); i++) {
     53            for(int j = i+1; j < areas.size(); j++) {
     54                areas.get(i).subtract(areas.get(j));
     55            }
     56        }
     57
     58        for(int i = areas.size()-1; i > 0 ; i--) {
     59            for(int j = i-1; j > 0; j--) {
     60                areas.get(i).subtract(areas.get(j));
     61            }
     62        }
     63
     64        for(Area a : areas) {
     65            if(a.isEmpty())
     66                continue;
     67            bboxCount++;
     68        }
     69
     70        int result = new ExtendedDialog(Main.parent,
     71                tr("Update Data"),
     72                tr("This action will require {0} individual download requests. "
     73                        + "Do you wish to continue?", bboxCount),
     74                new String[] { "Update Data", "Cancel" },
     75                new String[] { "updatedata.png", "cancel.png" }).getValue();
     76
     77        if(result != 1)
     78            return;
     79
     80        DownloadTask osmTask = new DownloadOsmTask();
     81        for(Area a : areas) {
     82            Rectangle2D td = a.getBounds2D();
     83            osmTask.download(null, td.getMinY(), td.getMinX(), td.getMaxY(), td.getMaxX());
     84        }
     85    }
     86
     87}
  • src/org/openstreetmap/josm/gui/MainMenu.java

     
    5252import org.openstreetmap.josm.actions.UnGlueAction;
    5353import org.openstreetmap.josm.actions.UndoAction;
    5454import org.openstreetmap.josm.actions.UnselectAllAction;
     55import org.openstreetmap.josm.actions.UpdateDataAction;
    5556import org.openstreetmap.josm.actions.UploadAction;
    5657import org.openstreetmap.josm.actions.ZoomInAction;
    5758import org.openstreetmap.josm.actions.ZoomOutAction;
     
    8384    public final JosmAction saveAs = new SaveAsAction(null);
    8485    public final JosmAction gpxExport = new GpxExportAction(null);
    8586    public final DownloadAction download = new DownloadAction();
     87    public final JosmAction update = new UpdateDataAction();
    8688    public final JosmAction upload = new UploadAction();
    8789    public final JosmAction exit = new ExitAction();
    8890
     
    182184        fileMenu.addSeparator();
    183185        add(fileMenu, download);
    184186        add(fileMenu, upload);
     187        add(fileMenu, update);
    185188        fileMenu.addSeparator();
    186189        add(fileMenu, exit);
    187190        add(fileMenu, KeyEvent.VK_F, "file");