// 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.Box;
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.WMSCachedTileLoader;
import org.openstreetmap.josm.gui.layer.WMSLayer;
import org.openstreetmap.josm.tools.GBC;
import org.openstreetmap.josm.tools.Utils;
/**
* {@code JPanel} giving access to WMS settings.
* @since 5465
*/
public class WMSSettingsPanel extends JPanel {
private static final int IMAGE_SIZE_MIN = 1;
private static final int IMAGE_SIZE_MAX = 4096;
private static final int THREADS_MIN = 1;
private static final int THREADS_MAX = 30;
// WMS Settings
private final JCheckBox autozoomActive;
private final JSpinner spinSimConn;
private final JSpinner tileSize;
/**
* Constructs a new {@code WMSSettingsPanel}.
*/
public WMSSettingsPanel() {
super(new GridBagLayout());
// Auto zoom
autozoomActive = new JCheckBox();
add(new JLabel(tr("Auto zoom by default: ")), GBC.std());
add(GBC.glue(5, 0), GBC.std());
add(autozoomActive, GBC.eol().fill(GBC.HORIZONTAL));
// Simultaneous connections
add(Box.createHorizontalGlue(), GBC.eol().fill(GBC.HORIZONTAL));
JLabel labelSimConn = new JLabel(tr("Simultaneous connections:"));
int threadLimitValue = Utils.clamp(WMSCachedTileLoader.THREAD_LIMIT.get(), THREADS_MIN, THREADS_MAX);
spinSimConn = new JSpinner(new SpinnerNumberModel(threadLimitValue, THREADS_MIN, THREADS_MAX, 1));
labelSimConn.setLabelFor(spinSimConn);
add(labelSimConn, GBC.std());
add(GBC.glue(5, 0), GBC.std());
add(spinSimConn, GBC.eol());
// Tile size
JLabel labelTileSize = new JLabel(tr("Tile size:"));
int tileSizeValue = Utils.clamp(WMSLayer.PROP_IMAGE_SIZE.get(), IMAGE_SIZE_MIN, IMAGE_SIZE_MAX);
tileSize = new JSpinner(new SpinnerNumberModel(tileSizeValue, IMAGE_SIZE_MIN, IMAGE_SIZE_MAX, 128));
labelTileSize.setLabelFor(tileSize);
add(labelTileSize, GBC.std());
add(GBC.glue(5, 0), GBC.std());
add(tileSize, GBC.eol());
}
/**
* Loads the WMS settings.
*/
public void loadSettings() {
this.autozoomActive.setSelected(WMSLayer.PROP_DEFAULT_AUTOZOOM.get());
this.spinSimConn.setValue(WMSCachedTileLoader.THREAD_LIMIT.get());
this.tileSize.setValue(WMSLayer.PROP_IMAGE_SIZE.get());
}
/**
* Saves the WMS settings.
* @return true when restart is required
*/
public boolean saveSettings() {
WMSLayer.PROP_DEFAULT_AUTOZOOM.put(this.autozoomActive.isSelected());
WMSCachedTileLoader.THREAD_LIMIT.put((Integer) spinSimConn.getModel().getValue());
WMSLayer.PROP_IMAGE_SIZE.put((Integer) this.tileSize.getModel().getValue());
return false;
}
}