Changeset 5729 in josm for trunk/src/org/openstreetmap/josm/gui/ImageryMenu.java
- Timestamp:
- 2013-02-19T10:04:40+01:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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
Note:
See TracChangeset
for help on using the changeset viewer.