diff --git a/src/org/openstreetmap/josm/Main.java b/src/org/openstreetmap/josm/Main.java
index 22c867e..d69856a 100644
|
a
|
b
|
import javax.swing.JPanel;
|
| 49 | 49 | import javax.swing.JTextArea; |
| 50 | 50 | import javax.swing.KeyStroke; |
| 51 | 51 | import javax.swing.LookAndFeel; |
| | 52 | import javax.swing.SwingUtilities; |
| 52 | 53 | import javax.swing.UIManager; |
| 53 | 54 | import javax.swing.UnsupportedLookAndFeelException; |
| 54 | 55 | |
| … |
… |
import org.openstreetmap.josm.gui.help.HelpUtil;
|
| 87 | 88 | import org.openstreetmap.josm.gui.io.SaveLayersDialog; |
| 88 | 89 | import org.openstreetmap.josm.gui.layer.AbstractModifiableLayer; |
| 89 | 90 | import org.openstreetmap.josm.gui.layer.Layer; |
| | 91 | import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent; |
| | 92 | import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener; |
| | 93 | import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent; |
| | 94 | import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent; |
| 90 | 95 | import org.openstreetmap.josm.gui.layer.MainLayerManager; |
| 91 | 96 | import org.openstreetmap.josm.gui.layer.OsmDataLayer; |
| 92 | 97 | import org.openstreetmap.josm.gui.layer.OsmDataLayer.CommandQueueListener; |
| … |
… |
public abstract class Main {
|
| 534 | 539 | * @param layer The layer to remove |
| 535 | 540 | */ |
| 536 | 541 | public final synchronized void removeLayer(final Layer layer) { |
| 537 | | if (map != null) { |
| 538 | | getLayerManager().removeLayer(layer); |
| 539 | | if (isDisplayingMapView() && getLayerManager().getLayers().isEmpty()) { |
| 540 | | setMapFrame(null); |
| 541 | | } |
| 542 | | } |
| | 542 | getLayerManager().removeLayer(layer); |
| 543 | 543 | } |
| 544 | 544 | |
| 545 | 545 | private static volatile InitStatusListener initListener; |
| … |
… |
public abstract class Main {
|
| 572 | 572 | isOpenjdk = System.getProperty("java.vm.name").toUpperCase(Locale.ENGLISH).indexOf("OPENJDK") != -1; |
| 573 | 573 | fileWatcher.start(); |
| 574 | 574 | |
| | 575 | // Temporary - move to separate class later |
| | 576 | getLayerManager().addLayerChangeListener(new LayerChangeListener() { |
| | 577 | @Override |
| | 578 | public void layerRemoving(LayerRemoveEvent e) { |
| | 579 | // last layer is removed. |
| | 580 | if (isDisplayingMapView() && getLayerManager().getLayers().size() <= 1) { |
| | 581 | SwingUtilities.invokeLater(new Runnable() { |
| | 582 | @Override |
| | 583 | public void run() { |
| | 584 | setMapFrame(null); |
| | 585 | } |
| | 586 | }); |
| | 587 | } |
| | 588 | } |
| | 589 | |
| | 590 | @Override |
| | 591 | public void layerOrderChanged(LayerOrderChangeEvent e) { |
| | 592 | // ignored |
| | 593 | } |
| | 594 | |
| | 595 | @Override |
| | 596 | public void layerAdded(LayerAddEvent e) { |
| | 597 | boolean noMap = map == null; |
| | 598 | if (noMap) { |
| | 599 | createMapFrame(e.getAddedLayer(), null); |
| | 600 | } |
| | 601 | e.getAddedLayer().hookUpMapView(); |
| | 602 | if (noMap) { |
| | 603 | Main.map.setVisible(true); |
| | 604 | } |
| | 605 | Main.map.mapView.scheduleZoomTo(new ViewportData(e.getAddedLayer().getViewProjectionBounds())); |
| | 606 | } |
| | 607 | }); |
| | 608 | |
| 575 | 609 | new InitializationTask(tr("Executing platform startup hook")) { |
| 576 | 610 | @Override |
| 577 | 611 | public void initialize() { |
| … |
… |
public abstract class Main {
|
| 767 | 801 | * @see #addLayer(Layer, ViewportData) |
| 768 | 802 | */ |
| 769 | 803 | public final void addLayer(final Layer layer) { |
| 770 | | addLayer(layer, layer.getViewProjectionBounds()); |
| | 804 | addLayer(layer, (ViewportData) null); |
| 771 | 805 | } |
| 772 | 806 | |
| 773 | 807 | /** |
| … |
… |
public abstract class Main {
|
| 793 | 827 | * isn't changed |
| 794 | 828 | */ |
| 795 | 829 | public final synchronized void addLayer(final Layer layer, ViewportData viewport) { |
| 796 | | boolean noMap = map == null; |
| 797 | | if (noMap) { |
| 798 | | createMapFrame(layer, viewport); |
| 799 | | } |
| 800 | | layer.hookUpMapView(); |
| 801 | 830 | getLayerManager().addLayer(layer); |
| 802 | | if (noMap) { |
| 803 | | Main.map.setVisible(true); |
| 804 | | } else if (viewport != null) { |
| 805 | | Main.map.mapView.zoomTo(viewport); |
| | 831 | if (viewport != null) { |
| | 832 | Main.map.mapView.scheduleZoomTo(viewport); |
| 806 | 833 | } |
| 807 | 834 | } |
| 808 | 835 | |
diff --git a/src/org/openstreetmap/josm/gui/MapView.java b/src/org/openstreetmap/josm/gui/MapView.java
index ea5f1ba..65646e2 100644
|
a
|
b
|
LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener {
|
| 488 | 488 | */ |
| 489 | 489 | public MapView(MainLayerManager layerManager, final JPanel contentPane, final ViewportData viewportData) { |
| 490 | 490 | this.layerManager = layerManager; |
| 491 | | initialViewport = viewportData; |
| | 491 | if (viewportData != null) { |
| | 492 | initialViewport = viewportData; |
| | 493 | } else if (layerManager.getActiveLayer() != null) { |
| | 494 | initialViewport = new ViewportData(layerManager.getActiveLayer().getViewProjectionBounds()); |
| | 495 | } |
| 492 | 496 | layerManager.addLayerChangeListener(this); |
| 493 | 497 | layerManager.addActiveLayerChangeListener(this); |
| 494 | 498 | Main.pref.addPreferenceChangeListener(this); |
| … |
… |
LayerManager.LayerChangeListener, MainLayerManager.ActiveLayerChangeListener {
|
| 1290 | 1294 | public final MainLayerManager getLayerManager() { |
| 1291 | 1295 | return layerManager; |
| 1292 | 1296 | } |
| | 1297 | |
| | 1298 | /** |
| | 1299 | * Temporary until zooming is fixed. |
| | 1300 | * @param viewport The new viewport to use on next draw. |
| | 1301 | * @since xxx |
| | 1302 | */ |
| | 1303 | public void scheduleZoomTo(ViewportData viewport) { |
| | 1304 | initialViewport = viewport; |
| | 1305 | } |
| 1293 | 1306 | } |