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 }