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.FlowLayout;
007 import java.awt.GridBagLayout;
008
009 import javax.swing.Box;
010 import javax.swing.JCheckBox;
011 import javax.swing.JLabel;
012 import javax.swing.JPanel;
013 import javax.swing.JSpinner;
014 import javax.swing.SpinnerNumberModel;
015
016 import org.openstreetmap.josm.gui.layer.WMSLayer;
017 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
018 import org.openstreetmap.josm.io.imagery.HTMLGrabber;
019 import org.openstreetmap.josm.tools.GBC;
020
021 /**
022 * {@code JPanel} giving access to WMS settings.
023 * @since 5465
024 */
025 public class WMSSettingsPanel extends JPanel {
026
027 // WMS Settings
028 private final JosmComboBox browser;
029 private final JCheckBox overlapCheckBox;
030 private final JSpinner spinEast;
031 private final JSpinner spinNorth;
032 private final JSpinner spinSimConn;
033
034 /**
035 * Constructs a new {@code WMSSettingsPanel}.
036 */
037 public WMSSettingsPanel() {
038 super(new GridBagLayout());
039
040 // Downloader
041 browser = new JosmComboBox(new String[] {
042 "webkit-image {0}",
043 "gnome-web-photo --mode=photo --format=png {0} /dev/stdout",
044 "gnome-web-photo-fixed {0}",
045 "webkit-image-gtk {0}"});
046 browser.setEditable(true);
047 add(new JLabel(tr("Downloader:")), GBC.std());
048 add(GBC.glue(5, 0), GBC.std());
049 add(browser, GBC.eol().fill(GBC.HORIZONTAL));
050
051 // Simultaneous connections
052 add(Box.createHorizontalGlue(), GBC.eol().fill(GBC.HORIZONTAL));
053 JLabel labelSimConn = new JLabel(tr("Simultaneous connections:"));
054 spinSimConn = new JSpinner(new SpinnerNumberModel(WMSLayer.PROP_SIMULTANEOUS_CONNECTIONS.get().intValue(), 1, 30, 1));
055 add(labelSimConn, GBC.std());
056 add(GBC.glue(5, 0), GBC.std());
057 add(spinSimConn, GBC.eol());
058
059 // Overlap
060 add(Box.createHorizontalGlue(), GBC.eol().fill(GBC.HORIZONTAL));
061
062 overlapCheckBox = new JCheckBox(tr("Overlap tiles"));
063 JLabel labelEast = new JLabel(tr("% of east:"));
064 JLabel labelNorth = new JLabel(tr("% of north:"));
065 spinEast = new JSpinner(new SpinnerNumberModel(WMSLayer.PROP_OVERLAP_EAST.get().intValue(), 1, 50, 1));
066 spinNorth = new JSpinner(new SpinnerNumberModel(WMSLayer.PROP_OVERLAP_NORTH.get().intValue(), 1, 50, 1));
067
068 JPanel overlapPanel = new JPanel(new FlowLayout());
069 overlapPanel.add(overlapCheckBox);
070 overlapPanel.add(labelEast);
071 overlapPanel.add(spinEast);
072 overlapPanel.add(labelNorth);
073 overlapPanel.add(spinNorth);
074
075 add(overlapPanel, GBC.eop());
076 }
077
078 /**
079 * Loads the WMS settings.
080 */
081 public void loadSettings() {
082 this.browser.setSelectedItem(HTMLGrabber.PROP_BROWSER.get());
083 this.overlapCheckBox.setSelected(WMSLayer.PROP_OVERLAP.get());
084 this.spinEast.setValue(WMSLayer.PROP_OVERLAP_EAST.get());
085 this.spinNorth.setValue(WMSLayer.PROP_OVERLAP_NORTH.get());
086 this.spinSimConn.setValue(WMSLayer.PROP_SIMULTANEOUS_CONNECTIONS.get());
087 }
088
089 /**
090 * Saves the WMS settings.
091 * @return true when restart is required
092 */
093 public boolean saveSettings() {
094 WMSLayer.PROP_OVERLAP.put(overlapCheckBox.getModel().isSelected());
095 WMSLayer.PROP_OVERLAP_EAST.put((Integer) spinEast.getModel().getValue());
096 WMSLayer.PROP_OVERLAP_NORTH.put((Integer) spinNorth.getModel().getValue());
097 WMSLayer.PROP_SIMULTANEOUS_CONNECTIONS.put((Integer) spinSimConn.getModel().getValue());
098
099 HTMLGrabber.PROP_BROWSER.put(browser.getEditor().getItem().toString());
100
101 return false;
102 }
103 }