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