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    }