001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.gui.preferences.imagery;
003
004 import static org.openstreetmap.josm.tools.I18n.tr;
005
006 import java.awt.GridBagLayout;
007
008 import javax.swing.JCheckBox;
009 import javax.swing.JLabel;
010 import javax.swing.JPanel;
011 import javax.swing.JSpinner;
012 import javax.swing.JTextField;
013 import javax.swing.SpinnerNumberModel;
014
015 import org.openstreetmap.josm.gui.layer.TMSLayer;
016 import org.openstreetmap.josm.tools.GBC;
017
018 /**
019 * {@code JPanel} giving access to TMS settings.
020 * @since 5465
021 */
022 public class TMSSettingsPanel extends JPanel {
023
024 // TMS Settings
025 private final JCheckBox autozoomActive = new JCheckBox();
026 private final JCheckBox autoloadTiles = new JCheckBox();
027 private final JSpinner minZoomLvl;
028 private final JSpinner maxZoomLvl;
029 private final JCheckBox addToSlippyMapChosser = new JCheckBox();
030 private final JTextField tilecacheDir = new JTextField();
031
032 /**
033 * Constructs a new {@code TMSSettingsPanel}.
034 */
035 public TMSSettingsPanel() {
036 super(new GridBagLayout());
037 minZoomLvl = new JSpinner(new SpinnerNumberModel(TMSLayer.DEFAULT_MIN_ZOOM, TMSLayer.MIN_ZOOM, TMSLayer.MAX_ZOOM, 1));
038 maxZoomLvl = new JSpinner(new SpinnerNumberModel(TMSLayer.DEFAULT_MAX_ZOOM, TMSLayer.MIN_ZOOM, TMSLayer.MAX_ZOOM, 1));
039
040 add(new JLabel(tr("Auto zoom by default: ")), GBC.std());
041 add(GBC.glue(5, 0), GBC.std());
042 add(autozoomActive, GBC.eol().fill(GBC.HORIZONTAL));
043
044 add(new JLabel(tr("Autoload tiles by default: ")), GBC.std());
045 add(GBC.glue(5, 0), GBC.std());
046 add(autoloadTiles, GBC.eol().fill(GBC.HORIZONTAL));
047
048 add(new JLabel(tr("Min. zoom level: ")), GBC.std());
049 add(GBC.glue(5, 0), GBC.std());
050 add(this.minZoomLvl, GBC.eol());
051
052 add(new JLabel(tr("Max. zoom level: ")), GBC.std());
053 add(GBC.glue(5, 0), GBC.std());
054 add(this.maxZoomLvl, GBC.eol());
055
056 add(new JLabel(tr("Add to slippymap chooser: ")), GBC.std());
057 add(GBC.glue(5, 0), GBC.std());
058 add(addToSlippyMapChosser, GBC.eol().fill(GBC.HORIZONTAL));
059
060 add(new JLabel(tr("Tile cache directory: ")), GBC.std());
061 add(GBC.glue(5, 0), GBC.std());
062 add(tilecacheDir, GBC.eol().fill(GBC.HORIZONTAL));
063 }
064
065 /**
066 * Loads the TMS settings.
067 */
068 public void loadSettings() {
069 this.autozoomActive.setSelected(TMSLayer.PROP_DEFAULT_AUTOZOOM.get());
070 this.autoloadTiles.setSelected(TMSLayer.PROP_DEFAULT_AUTOLOAD.get());
071 this.addToSlippyMapChosser.setSelected(TMSLayer.PROP_ADD_TO_SLIPPYMAP_CHOOSER.get());
072 this.maxZoomLvl.setValue(TMSLayer.getMaxZoomLvl(null));
073 this.minZoomLvl.setValue(TMSLayer.getMinZoomLvl(null));
074 this.tilecacheDir.setText(TMSLayer.PROP_TILECACHE_DIR.get());
075 }
076
077 /**
078 * Saves the TMS settings.
079 * @return true when restart is required
080 */
081 public boolean saveSettings() {
082 boolean restartRequired = false;
083
084 if (TMSLayer.PROP_ADD_TO_SLIPPYMAP_CHOOSER.get() != this.addToSlippyMapChosser.isSelected()) {
085 restartRequired = true;
086 }
087 TMSLayer.PROP_ADD_TO_SLIPPYMAP_CHOOSER.put(this.addToSlippyMapChosser.isSelected());
088 TMSLayer.PROP_DEFAULT_AUTOZOOM.put(this.autozoomActive.isSelected());
089 TMSLayer.PROP_DEFAULT_AUTOLOAD.put(this.autoloadTiles.isSelected());
090 TMSLayer.setMaxZoomLvl((Integer)this.maxZoomLvl.getValue());
091 TMSLayer.setMinZoomLvl((Integer)this.minZoomLvl.getValue());
092 TMSLayer.PROP_TILECACHE_DIR.put(this.tilecacheDir.getText());
093
094 return restartRequired;
095 }
096 }