// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.preferences.imagery;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.GridBagLayout;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import org.openstreetmap.josm.data.imagery.TMSCachedTileLoader;
import org.openstreetmap.josm.gui.layer.TMSLayer;
import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings;
import org.openstreetmap.josm.tools.GBC;
/**
* {@code JPanel} giving access to TMS settings.
* @since 5465
*/
public class TMSSettingsPanel extends JPanel {
// TMS Settings
private final JCheckBox autozoomActive = new JCheckBox();
private final JCheckBox autoloadTiles = new JCheckBox();
private final JSpinner minZoomLvl;
private final JSpinner maxZoomLvl;
private final JCheckBox addToSlippyMapChosser = new JCheckBox();
private final JSpinner maxConcurrentDownloads;
private final JSpinner maxDownloadsPerHost;
/**
* Constructs a new {@code TMSSettingsPanel}.
*/
public TMSSettingsPanel() {
super(new GridBagLayout());
minZoomLvl = new JSpinner(new SpinnerNumberModel(
TMSLayer.PROP_MIN_ZOOM_LVL.get().intValue(), TMSLayer.MIN_ZOOM, TMSLayer.MAX_ZOOM, 1));
maxZoomLvl = new JSpinner(new SpinnerNumberModel(
TMSLayer.PROP_MAX_ZOOM_LVL.get().intValue(), TMSLayer.MIN_ZOOM, TMSLayer.MAX_ZOOM, 1));
maxConcurrentDownloads = new JSpinner(new SpinnerNumberModel(
TMSCachedTileLoader.THREAD_LIMIT.get().intValue(), 0, Integer.MAX_VALUE, 1));
maxDownloadsPerHost = new JSpinner(new SpinnerNumberModel(
TMSCachedTileLoader.HOST_LIMIT.get().intValue(), 0, Integer.MAX_VALUE, 1));
add(new JLabel(tr("Auto zoom by default: ")), GBC.std());
add(GBC.glue(5, 0), GBC.std());
add(autozoomActive, GBC.eol().fill(GBC.HORIZONTAL));
add(new JLabel(tr("Autoload tiles by default: ")), GBC.std());
add(GBC.glue(5, 0), GBC.std());
add(autoloadTiles, GBC.eol().fill(GBC.HORIZONTAL));
add(new JLabel(tr("Min. zoom level: ")), GBC.std());
add(GBC.glue(5, 0), GBC.std());
add(this.minZoomLvl, GBC.eol());
add(new JLabel(tr("Max. zoom level: ")), GBC.std());
add(GBC.glue(5, 0), GBC.std());
add(this.maxZoomLvl, GBC.eol());
add(new JLabel(tr("Add to slippymap chooser: ")), GBC.std());
add(GBC.glue(5, 0), GBC.std());
add(addToSlippyMapChosser, GBC.eol().fill(GBC.HORIZONTAL));
add(new JLabel(tr("Maximum concurrent downloads: ")), GBC.std());
add(GBC.glue(5, 0), GBC.std());
add(maxConcurrentDownloads, GBC.eol());
add(new JLabel(tr("Maximum concurrent downloads per host: ")), GBC.std());
add(GBC.glue(5, 0), GBC.std());
add(maxDownloadsPerHost, GBC.eol());
}
/**
* Loads the TMS settings.
*/
public void loadSettings() {
this.autozoomActive.setSelected(TileSourceDisplaySettings.PROP_AUTO_ZOOM.get());
this.autoloadTiles.setSelected(TileSourceDisplaySettings.PROP_AUTO_LOAD.get());
this.addToSlippyMapChosser.setSelected(TMSLayer.PROP_ADD_TO_SLIPPYMAP_CHOOSER.get());
this.maxZoomLvl.setValue(TMSLayer.getMaxZoomLvl(null));
this.minZoomLvl.setValue(TMSLayer.getMinZoomLvl(null));
this.maxConcurrentDownloads.setValue(TMSCachedTileLoader.THREAD_LIMIT.get());
this.maxDownloadsPerHost.setValue(TMSCachedTileLoader.HOST_LIMIT.get());
}
/**
* Saves the TMS settings.
* @return true when restart is required
*/
public boolean saveSettings() {
boolean restartRequired = false;
if (!TMSLayer.PROP_ADD_TO_SLIPPYMAP_CHOOSER.get().equals(this.addToSlippyMapChosser.isSelected())) {
restartRequired = true;
}
TMSLayer.PROP_ADD_TO_SLIPPYMAP_CHOOSER.put(this.addToSlippyMapChosser.isSelected());
TileSourceDisplaySettings.PROP_AUTO_ZOOM.put(this.autozoomActive.isSelected());
TileSourceDisplaySettings.PROP_AUTO_LOAD.put(this.autoloadTiles.isSelected());
TMSLayer.setMaxZoomLvl((Integer) this.maxZoomLvl.getValue());
TMSLayer.setMinZoomLvl((Integer) this.minZoomLvl.getValue());
if (!TMSCachedTileLoader.THREAD_LIMIT.get().equals(this.maxConcurrentDownloads.getValue())) {
TMSCachedTileLoader.THREAD_LIMIT.put((Integer) this.maxConcurrentDownloads.getValue());
restartRequired = true;
}
if (!TMSCachedTileLoader.HOST_LIMIT.get().equals(this.maxDownloadsPerHost.getValue())) {
TMSCachedTileLoader.HOST_LIMIT.put((Integer) this.maxDownloadsPerHost.getValue());
restartRequired = true;
}
return restartRequired;
}
}