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}