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.Color;
007 import java.awt.GridBagLayout;
008 import java.awt.event.ActionEvent;
009 import java.awt.event.ActionListener;
010
011 import javax.swing.JButton;
012 import javax.swing.JCheckBox;
013 import javax.swing.JColorChooser;
014 import javax.swing.JLabel;
015 import javax.swing.JOptionPane;
016 import javax.swing.JPanel;
017 import javax.swing.JSlider;
018 import javax.swing.JTextField;
019 import javax.swing.event.ChangeEvent;
020 import javax.swing.event.ChangeListener;
021
022 import org.openstreetmap.josm.gui.layer.ImageryLayer;
023 import org.openstreetmap.josm.gui.widgets.JosmComboBox;
024 import org.openstreetmap.josm.io.imagery.OffsetServer;
025 import org.openstreetmap.josm.io.imagery.OsmosnimkiOffsetServer;
026 import org.openstreetmap.josm.tools.ColorHelper;
027 import org.openstreetmap.josm.tools.GBC;
028
029 /**
030 * {@code JPanel} giving access to common imagery settings.
031 * @since 5465
032 */
033 public class CommonSettingsPanel extends JPanel {
034
035 // Common Settings
036 private final JButton btnFadeColor;
037 private final JSlider fadeAmount = new JSlider(0, 100);
038 private final JosmComboBox sharpen;
039 private final JCheckBox useOffsetServer;
040 private final JTextField offsetServerUrl;
041
042 /**
043 * Constructs a new {@code CommonSettingsPanel}.
044 */
045 public CommonSettingsPanel() {
046 super(new GridBagLayout());
047
048 this.btnFadeColor = new JButton();
049
050 this.btnFadeColor.addActionListener(new ActionListener() {
051 @Override
052 public void actionPerformed(ActionEvent e) {
053 JColorChooser chooser = new JColorChooser(btnFadeColor.getBackground());
054 int answer = JOptionPane.showConfirmDialog(
055 CommonSettingsPanel.this, chooser,
056 tr("Choose a color for {0}", tr("imagery fade")),
057 JOptionPane.OK_CANCEL_OPTION,
058 JOptionPane.PLAIN_MESSAGE);
059 if (answer == JOptionPane.OK_OPTION) {
060 Color colFadeColor = chooser.getColor();
061 btnFadeColor.setBackground(colFadeColor);
062 btnFadeColor.setText(ColorHelper.color2html(colFadeColor));
063 }
064 }
065 });
066
067 add(new JLabel(tr("Fade Color: ")), GBC.std());
068 add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
069 add(this.btnFadeColor, GBC.eol().fill(GBC.HORIZONTAL));
070
071 add(new JLabel(tr("Fade amount: ")), GBC.std());
072 add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
073 add(this.fadeAmount, GBC.eol().fill(GBC.HORIZONTAL));
074
075 this.sharpen = new JosmComboBox(new String[] {
076 tr("None"),
077 tr("Soft"),
078 tr("Strong")});
079 add(new JLabel(tr("Sharpen (requires layer re-add): ")));
080 add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL));
081 add(this.sharpen, GBC.eol().fill(GBC.HORIZONTAL));
082
083 this.useOffsetServer = new JCheckBox(tr("Use offset server: "));
084 this.offsetServerUrl = new JTextField();
085 this.useOffsetServer.addChangeListener(new ChangeListener() {
086 @Override
087 public void stateChanged(ChangeEvent e) {
088 offsetServerUrl.setEnabled(useOffsetServer.isSelected());
089 }
090 });
091 offsetServerUrl.setEnabled(useOffsetServer.isSelected());
092 add(this.useOffsetServer, GBC.eol().fill(GBC.HORIZONTAL));
093 add(this.offsetServerUrl, GBC.eol().fill(GBC.HORIZONTAL));
094 }
095
096 /**
097 * Loads the common settings.
098 */
099 public void loadSettings() {
100 Color colFadeColor = ImageryLayer.PROP_FADE_COLOR.get();
101 this.btnFadeColor.setBackground(colFadeColor);
102 this.btnFadeColor.setText(ColorHelper.color2html(colFadeColor));
103 this.fadeAmount.setValue(ImageryLayer.PROP_FADE_AMOUNT.get());
104 this.sharpen.setSelectedIndex(Math.max(0, Math.min(2, ImageryLayer.PROP_SHARPEN_LEVEL.get())));
105 this.useOffsetServer.setSelected(OffsetServer.PROP_SERVER_ENABLED.get());
106 this.offsetServerUrl.setText(OsmosnimkiOffsetServer.PROP_SERVER_URL.get());
107 }
108
109 /**
110 * Saves the common settings.
111 * @return true when restart is required
112 */
113 public boolean saveSettings() {
114 OffsetServer.PROP_SERVER_ENABLED.put(useOffsetServer.isSelected());
115 OsmosnimkiOffsetServer.PROP_SERVER_URL.put(offsetServerUrl.getText());
116
117 ImageryLayer.PROP_FADE_AMOUNT.put(this.fadeAmount.getValue());
118 ImageryLayer.PROP_FADE_COLOR.put(this.btnFadeColor.getBackground());
119 ImageryLayer.PROP_SHARPEN_LEVEL.put(sharpen.getSelectedIndex());
120 return false;
121 }
122 }