| | 1 | // License: GPL. For details, see LICENSE file. |
| | 2 | package org.openstreetmap.josm.gui.dialogs; |
| | 3 | |
| | 4 | import static org.openstreetmap.josm.tools.I18n.tr; |
| | 5 | |
| | 6 | import java.beans.PropertyChangeEvent; |
| | 7 | import java.beans.PropertyChangeListener; |
| | 8 | import java.util.Collections; |
| | 9 | |
| | 10 | import org.openstreetmap.josm.Main; |
| | 11 | import org.openstreetmap.josm.data.Bounds; |
| | 12 | import org.openstreetmap.josm.gui.MapView; |
| | 13 | import org.openstreetmap.josm.gui.NavigatableComponent; |
| | 14 | import org.openstreetmap.josm.gui.SideButton; |
| | 15 | import org.openstreetmap.josm.gui.bbox.BBoxChooser; |
| | 16 | import org.openstreetmap.josm.gui.bbox.SlippyMapBBoxChooser; |
| | 17 | |
| | 18 | public class MinimapDialog extends ToggleDialog implements NavigatableComponent.ZoomChangeListener, PropertyChangeListener { |
| | 19 | |
| | 20 | protected final SlippyMapBBoxChooser slippyMap = new SlippyMapBBoxChooser(); |
| | 21 | protected boolean skipEvents; |
| | 22 | |
| | 23 | public MinimapDialog() { |
| | 24 | super(tr("Mini map"), "map", tr("Displays a small map of the current edit location"), null, 150); |
| | 25 | createLayout(slippyMap, false, Collections.<SideButton>emptyList()); |
| | 26 | slippyMap.addPropertyChangeListener(BBoxChooser.BBOX_PROP, this); |
| | 27 | } |
| | 28 | |
| | 29 | @Override |
| | 30 | public void showDialog() { |
| | 31 | NavigatableComponent.addZoomChangeListener(this); |
| | 32 | super.showDialog(); |
| | 33 | } |
| | 34 | |
| | 35 | @Override |
| | 36 | public void hideDialog() { |
| | 37 | NavigatableComponent.removeZoomChangeListener(this); |
| | 38 | super.hideDialog(); |
| | 39 | } |
| | 40 | |
| | 41 | @Override |
| | 42 | public void zoomChanged() { |
| | 43 | if (Main.isDisplayingMapView() && !skipEvents) { |
| | 44 | MapView mv = Main.map.mapView; |
| | 45 | final Bounds currentBounds = new Bounds( |
| | 46 | mv.getLatLon(0, mv.getHeight()), |
| | 47 | mv.getLatLon(mv.getWidth(), 0) |
| | 48 | ); |
| | 49 | skipEvents = true; |
| | 50 | slippyMap.setBoundingBox(currentBounds); |
| | 51 | slippyMap.zoomOut(); // again, to give a better overview |
| | 52 | skipEvents = false; |
| | 53 | } |
| | 54 | } |
| | 55 | |
| | 56 | @Override |
| | 57 | public void propertyChange(PropertyChangeEvent evt) { |
| | 58 | System.out.println(evt.getSource()); |
| | 59 | if (!skipEvents) { |
| | 60 | skipEvents = true; |
| | 61 | Main.map.mapView.zoomTo(slippyMap.getBoundingBox()); |
| | 62 | skipEvents = false; |
| | 63 | } |
| | 64 | } |
| | 65 | } |