Changeset 5729 in josm for trunk/src/org


Ignore:
Timestamp:
2013-02-19T10:04:40+01:00 (11 years ago)
Author:
bastiK
Message:

applied #8441 - show local imagery sources in menu instead of popup

Location:
trunk/src/org/openstreetmap/josm
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java

    r5691 r5729  
    77import java.io.IOException;
    88import java.net.URL;
    9 import java.util.ArrayList;
    109import java.util.Collection;
    11 import java.util.HashSet;
    12 import java.util.Iterator;
    13 import java.util.List;
    14 import java.util.Set;
    1510import java.util.concurrent.Future;
    1611import java.util.regex.Matcher;
    1712import java.util.regex.Pattern;
    1813
    19 import javax.swing.JOptionPane;
     14import org.xml.sax.SAXException;
    2015
    2116import org.openstreetmap.josm.Main;
    2217import org.openstreetmap.josm.data.Bounds;
    2318import org.openstreetmap.josm.data.coor.LatLon;
    24 import org.openstreetmap.josm.data.imagery.ImageryInfo;
    25 import org.openstreetmap.josm.data.imagery.ImageryLayerInfo;
    26 import org.openstreetmap.josm.data.imagery.Shape;
    2719import org.openstreetmap.josm.data.osm.DataSet;
    2820import org.openstreetmap.josm.data.osm.DataSource;
    2921import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
    30 import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
    3122import org.openstreetmap.josm.gui.PleaseWaitRunnable;
    3223import org.openstreetmap.josm.gui.layer.Layer;
     
    3930import org.openstreetmap.josm.io.OsmTransferCanceledException;
    4031import org.openstreetmap.josm.io.OsmTransferException;
    41 import org.openstreetmap.josm.tools.Utils;
    42 import org.xml.sax.SAXException;
    4332
    4433/**
     
    283272                targetLayer.onPostDownloadFromServer();
    284273            }
    285 
    286             // Suggest potential imagery data, except if the data is downloaded after a "data update" command (see #8307)
    287             if (!isUpdateData) {
    288                 suggestImageryLayers();
    289             }
    290274        }
    291275       
     
    304288            if (reader != null) {
    305289                reader.cancel();
    306             }
    307         }
    308 
    309         protected void suggestImageryLayers() {
    310             if (currentBounds != null) {
    311                 final LatLon center = currentBounds.getCenter();
    312                 final Set<ImageryInfo> layers = new HashSet<ImageryInfo>();
    313    
    314                 for (ImageryInfo i : ImageryLayerInfo.instance.getDefaultLayers()) {
    315                     if (i.getBounds() != null && i.getBounds().contains(center)) {
    316                         layers.add(i);
    317                     }
    318                 }
    319                 // Do not suggest layers already in use
    320                 layers.removeAll(ImageryLayerInfo.instance.getLayers());
    321                 // For layers containing complex shapes, check that center is in one of its shapes (fix #7910)
    322                 for (Iterator<ImageryInfo> iti = layers.iterator(); iti.hasNext(); ) {
    323                     List<Shape> shapes = iti.next().getBounds().getShapes();
    324                     if (shapes != null && !shapes.isEmpty()) {
    325                         boolean found = false;
    326                         for (Iterator<Shape> its = shapes.iterator(); its.hasNext() && !found; ) {
    327                             found = its.next().contains(center);
    328                         }
    329                         if (!found) {
    330                             iti.remove();
    331                         }
    332                     }
    333                 }
    334    
    335                 if (layers.isEmpty()) {
    336                     return;
    337                 }
    338    
    339                 final List<String> layerNames = new ArrayList<String>();
    340                 for (ImageryInfo i : layers) {
    341                     layerNames.add(i.getName());
    342                 }
    343    
    344                 if (!ConditionalOptionPaneUtil.showConfirmationDialog(
    345                         "download.suggest-imagery-layer",
    346                         Main.parent,
    347                         tr("<html>For the downloaded area, the following additional imagery layers are available: {0}" +
    348                                 "Do you want to add those layers to the <em>Imagery</em> menu?" +
    349                                 "<br>(If needed, you can remove those entries in the <em>Preferences</em>.)",
    350                                 Utils.joinAsHtmlUnorderedList(layerNames)),
    351                         tr("Add imagery layers?"),
    352                         JOptionPane.YES_NO_OPTION,
    353                         JOptionPane.QUESTION_MESSAGE,
    354                         JOptionPane.YES_OPTION)) {
    355                     return;
    356                 }
    357    
    358                 ImageryLayerInfo.addLayers(layers);
    359290            }
    360291        }
  • trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java

    r5369 r5729  
    77import java.util.Collection;
    88import java.util.Collections;
    9 import java.util.LinkedList;
    109import java.util.List;
     10
     11import org.xml.sax.SAXException;
    1112
    1213import org.openstreetmap.josm.Main;
    1314import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry;
     15import org.openstreetmap.josm.io.MirroredInputStream;
    1416import org.openstreetmap.josm.io.imagery.ImageryReader;
    15 import org.openstreetmap.josm.io.MirroredInputStream;
    1617import org.openstreetmap.josm.tools.Utils;
    17 import org.xml.sax.SAXException;
    1818
    1919/**
     
    6060    }
    6161
     62    /**
     63     * Loads the available imagery entries.
     64     *
     65     * The data is downloaded from the JOSM website (or loaded from cache).
     66     * Entries marked as "default" are added to the user selection, if not
     67     * already present.
     68     *
     69     * @param clearCache if true, clear the cache and start a fresh download.
     70     */
    6271    public void loadDefaults(boolean clearCache) {
    6372        defaultLayers.clear();
     
    148157        instance.add(info);
    149158        instance.save();
    150         Main.main.menu.imageryMenu.refreshImageryMenu();
    151159    }
    152160
     
    157165        instance.save();
    158166        Collections.sort(instance.layers);
    159         Main.main.menu.imageryMenu.refreshImageryMenu();
    160167    }
    161168}
  • trunk/src/org/openstreetmap/josm/gui/ImageryMenu.java

    r5664 r5729  
    88import java.awt.Toolkit;
    99import java.awt.event.ActionEvent;
     10import java.util.HashSet;
     11import java.util.Iterator;
    1012import java.util.List;
     13import java.util.Set;
    1114
    1215import javax.swing.Action;
     
    1619import javax.swing.JPopupMenu;
    1720import javax.swing.MenuElement;
     21import javax.swing.event.MenuEvent;
     22import javax.swing.event.MenuListener;
    1823
    1924import org.openstreetmap.josm.Main;
     
    2126import org.openstreetmap.josm.actions.JosmAction;
    2227import org.openstreetmap.josm.actions.Map_Rectifier_WMSmenuAction;
     28import org.openstreetmap.josm.data.coor.LatLon;
    2329import org.openstreetmap.josm.data.imagery.ImageryInfo;
    2430import org.openstreetmap.josm.data.imagery.ImageryLayerInfo;
     31import org.openstreetmap.josm.data.imagery.Shape;
    2532import org.openstreetmap.josm.gui.layer.ImageryLayer;
    2633import org.openstreetmap.josm.gui.layer.Layer;
     
    2835
    2936public class ImageryMenu extends JMenu implements MapView.LayerChangeListener {
     37
    3038    private Action offsetAction = new JosmAction(
    3139            tr("Imagery offset"), "mapmode/adjustimg", tr("Adjust imagery offset"), null, false, false) {
     
    6674        }
    6775    };
     76
    6877    private JMenuItem singleOffset = new JMenuItem(offsetAction);
    6978    private JMenuItem offsetMenuItem = singleOffset;
    7079    private Map_Rectifier_WMSmenuAction rectaction = new Map_Rectifier_WMSmenuAction();
    71     private int offsPos;
    72     private MenuScroller menuScroller;
    7380
    7481    public ImageryMenu() {
     
    7683        setupMenuScroller();
    7784        MapView.addLayerChangeListener(this);
     85        // build dynamically
     86        addMenuListener(new MenuListener() {
     87            @Override
     88            public void menuSelected(MenuEvent e) {
     89                refreshImageryMenu();
     90            }
     91
     92            @Override
     93            public void menuDeselected(MenuEvent e) {
     94            }
     95
     96            @Override
     97            public void menuCanceled(MenuEvent e) {
     98            }
     99        });
    78100    }
    79101   
    80     private final void setupMenuScroller() {
     102    private void setupMenuScroller() {
    81103        int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
    82104        int menuItemHeight = singleOffset.getPreferredSize().height;
    83         menuScroller = MenuScroller.setScrollerFor(this, (screenHeight / menuItemHeight)-1);
    84     }
    85 
    86     public void refreshImageryMenu() {
    87         if (menuScroller != null) {
    88             menuScroller.dispose();
    89             menuScroller = null;
    90         }
    91         setupMenuScroller();
     105        MenuScroller.setScrollerFor(this, (screenHeight / menuItemHeight)-1);
     106    }
     107
     108    protected void refreshImageryMenu() {
    92109        removeAll();
    93110
     
    96113            add(new AddImageryLayerAction(u));
    97114        }
     115
     116        // list all imagery entries where the current map location
     117        // is within the imagery bounds
     118        if (Main.isDisplayingMapView()) {
     119            MapView mv = Main.map.mapView;
     120            LatLon pos = mv.getProjection().eastNorth2latlon(mv.getCenter());
     121            final Set<ImageryInfo> inViewLayers = new HashSet<ImageryInfo>();
     122
     123            for (ImageryInfo i : ImageryLayerInfo.instance.getDefaultLayers()) {
     124                if (i.getBounds() != null && i.getBounds().contains(pos)) {
     125                    inViewLayers.add(i);
     126                }
     127            }
     128            // Do not suggest layers already in use
     129            inViewLayers.removeAll(ImageryLayerInfo.instance.getLayers());
     130            // For layers containing complex shapes, check that center is in one
     131            // of its shapes (fix #7910)
     132            for (Iterator<ImageryInfo> iti = inViewLayers.iterator(); iti.hasNext(); ) {
     133                List<Shape> shapes = iti.next().getBounds().getShapes();
     134                if (shapes != null && !shapes.isEmpty()) {
     135                    boolean found = false;
     136                    for (Iterator<Shape> its = shapes.iterator(); its.hasNext() && !found; ) {
     137                        found = its.next().contains(pos);
     138                    }
     139                    if (!found) {
     140                        iti.remove();
     141                    }
     142                }
     143            }
     144            if (!inViewLayers.isEmpty()) {
     145                addSeparator();
     146                for (ImageryInfo i : inViewLayers) {
     147                    add(new AddImageryLayerAction(i));
     148                }
     149            }
     150        }
     151
    98152        addSeparator();
    99153        add(new JMenuItem(rectaction));
    100154
    101155        addSeparator();
    102         offsPos = getMenuComponentCount();
    103156        add(offsetMenuItem);
    104157    }
     
    137190
    138191    public void refreshOffsetMenu() {
    139         JMenuItem newItem = getNewOffsetMenu();
    140         remove(offsetMenuItem);
    141         add(newItem, offsPos);
    142         offsetMenuItem = newItem;
     192        offsetMenuItem = getNewOffsetMenu();
    143193    }
    144194
  • trunk/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java

    r4146 r5729  
    99import java.util.Collection;
    1010import java.util.Collections;
     11
    1112import javax.swing.AbstractAction;
    1213import javax.swing.JMenu;
  • trunk/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java

    r5666 r5729  
    140140        ImageryLayerInfo.instance.clear();
    141141        ImageryLayerInfo.instance.load();
    142         Main.main.menu.imageryMenu.refreshImageryMenu();
    143142        Main.main.menu.imageryMenu.refreshOffsetMenu();
    144143        OffsetBookmark.saveBookmarks();
     
    831830        ImageryLayerInfo.instance.load();
    832831        OffsetBookmark.loadBookmarks();
    833         Main.main.menu.imageryMenu.refreshImageryMenu();
    834832        Main.main.menu.imageryMenu.refreshOffsetMenu();
    835833    }
Note: See TracChangeset for help on using the changeset viewer.