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 }