001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.preferences.imagery;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.awt.GridBagLayout;
007
008import javax.swing.JCheckBox;
009import javax.swing.JLabel;
010import javax.swing.JPanel;
011import javax.swing.JSpinner;
012import javax.swing.SpinnerNumberModel;
013
014import org.openstreetmap.josm.gui.layer.TMSLayer;
015import org.openstreetmap.josm.tools.GBC;
016import org.openstreetmap.josm.gui.widgets.JosmTextField;
017
018/**
019 * {@code JPanel} giving access to TMS settings.
020 * @since 5465
021 */
022public 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 JosmTextField tilecacheDir = new JosmTextField();
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}