Changeset 5729 in josm
- Timestamp:
- 2013-02-19T10:04:40+01:00 (12 years ago)
- Location:
- trunk/src/org/openstreetmap/josm
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
r5691 r5729 7 7 import java.io.IOException; 8 8 import java.net.URL; 9 import java.util.ArrayList;10 9 import java.util.Collection; 11 import java.util.HashSet;12 import java.util.Iterator;13 import java.util.List;14 import java.util.Set;15 10 import java.util.concurrent.Future; 16 11 import java.util.regex.Matcher; 17 12 import java.util.regex.Pattern; 18 13 19 import javax.swing.JOptionPane;14 import org.xml.sax.SAXException; 20 15 21 16 import org.openstreetmap.josm.Main; 22 17 import org.openstreetmap.josm.data.Bounds; 23 18 import 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;27 19 import org.openstreetmap.josm.data.osm.DataSet; 28 20 import org.openstreetmap.josm.data.osm.DataSource; 29 21 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor; 30 import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;31 22 import org.openstreetmap.josm.gui.PleaseWaitRunnable; 32 23 import org.openstreetmap.josm.gui.layer.Layer; … … 39 30 import org.openstreetmap.josm.io.OsmTransferCanceledException; 40 31 import org.openstreetmap.josm.io.OsmTransferException; 41 import org.openstreetmap.josm.tools.Utils;42 import org.xml.sax.SAXException;43 32 44 33 /** … … 283 272 targetLayer.onPostDownloadFromServer(); 284 273 } 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 }290 274 } 291 275 … … 304 288 if (reader != null) { 305 289 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 use320 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);359 290 } 360 291 } -
trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java
r5369 r5729 7 7 import java.util.Collection; 8 8 import java.util.Collections; 9 import java.util.LinkedList;10 9 import java.util.List; 10 11 import org.xml.sax.SAXException; 11 12 12 13 import org.openstreetmap.josm.Main; 13 14 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry; 15 import org.openstreetmap.josm.io.MirroredInputStream; 14 16 import org.openstreetmap.josm.io.imagery.ImageryReader; 15 import org.openstreetmap.josm.io.MirroredInputStream;16 17 import org.openstreetmap.josm.tools.Utils; 17 import org.xml.sax.SAXException;18 18 19 19 /** … … 60 60 } 61 61 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 */ 62 71 public void loadDefaults(boolean clearCache) { 63 72 defaultLayers.clear(); … … 148 157 instance.add(info); 149 158 instance.save(); 150 Main.main.menu.imageryMenu.refreshImageryMenu();151 159 } 152 160 … … 157 165 instance.save(); 158 166 Collections.sort(instance.layers); 159 Main.main.menu.imageryMenu.refreshImageryMenu();160 167 } 161 168 } -
trunk/src/org/openstreetmap/josm/gui/ImageryMenu.java
r5664 r5729 8 8 import java.awt.Toolkit; 9 9 import java.awt.event.ActionEvent; 10 import java.util.HashSet; 11 import java.util.Iterator; 10 12 import java.util.List; 13 import java.util.Set; 11 14 12 15 import javax.swing.Action; … … 16 19 import javax.swing.JPopupMenu; 17 20 import javax.swing.MenuElement; 21 import javax.swing.event.MenuEvent; 22 import javax.swing.event.MenuListener; 18 23 19 24 import org.openstreetmap.josm.Main; … … 21 26 import org.openstreetmap.josm.actions.JosmAction; 22 27 import org.openstreetmap.josm.actions.Map_Rectifier_WMSmenuAction; 28 import org.openstreetmap.josm.data.coor.LatLon; 23 29 import org.openstreetmap.josm.data.imagery.ImageryInfo; 24 30 import org.openstreetmap.josm.data.imagery.ImageryLayerInfo; 31 import org.openstreetmap.josm.data.imagery.Shape; 25 32 import org.openstreetmap.josm.gui.layer.ImageryLayer; 26 33 import org.openstreetmap.josm.gui.layer.Layer; … … 28 35 29 36 public class ImageryMenu extends JMenu implements MapView.LayerChangeListener { 37 30 38 private Action offsetAction = new JosmAction( 31 39 tr("Imagery offset"), "mapmode/adjustimg", tr("Adjust imagery offset"), null, false, false) { … … 66 74 } 67 75 }; 76 68 77 private JMenuItem singleOffset = new JMenuItem(offsetAction); 69 78 private JMenuItem offsetMenuItem = singleOffset; 70 79 private Map_Rectifier_WMSmenuAction rectaction = new Map_Rectifier_WMSmenuAction(); 71 private int offsPos;72 private MenuScroller menuScroller;73 80 74 81 public ImageryMenu() { … … 76 83 setupMenuScroller(); 77 84 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 }); 78 100 } 79 101 80 private finalvoid setupMenuScroller() {102 private void setupMenuScroller() { 81 103 int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height; 82 104 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() { 92 109 removeAll(); 93 110 … … 96 113 add(new AddImageryLayerAction(u)); 97 114 } 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 98 152 addSeparator(); 99 153 add(new JMenuItem(rectaction)); 100 154 101 155 addSeparator(); 102 offsPos = getMenuComponentCount();103 156 add(offsetMenuItem); 104 157 } … … 137 190 138 191 public void refreshOffsetMenu() { 139 JMenuItem newItem = getNewOffsetMenu(); 140 remove(offsetMenuItem); 141 add(newItem, offsPos); 142 offsetMenuItem = newItem; 192 offsetMenuItem = getNewOffsetMenu(); 143 193 } 144 194 -
trunk/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java
r4146 r5729 9 9 import java.util.Collection; 10 10 import java.util.Collections; 11 11 12 import javax.swing.AbstractAction; 12 13 import javax.swing.JMenu; -
trunk/src/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreference.java
r5666 r5729 140 140 ImageryLayerInfo.instance.clear(); 141 141 ImageryLayerInfo.instance.load(); 142 Main.main.menu.imageryMenu.refreshImageryMenu();143 142 Main.main.menu.imageryMenu.refreshOffsetMenu(); 144 143 OffsetBookmark.saveBookmarks(); … … 831 830 ImageryLayerInfo.instance.load(); 832 831 OffsetBookmark.loadBookmarks(); 833 Main.main.menu.imageryMenu.refreshImageryMenu();834 832 Main.main.menu.imageryMenu.refreshOffsetMenu(); 835 833 }
Note:
See TracChangeset
for help on using the changeset viewer.