001 package org.openstreetmap.josm.actions;
002
003 import java.awt.event.ActionEvent;
004 import javax.swing.JCheckBoxMenuItem;
005 import org.openstreetmap.josm.Main;
006 import org.openstreetmap.josm.data.Preferences;
007 import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
008
009 public class PreferenceToggleAction extends JosmAction implements PreferenceChangedListener {
010
011 private final JCheckBoxMenuItem checkbox;
012 private final String prefKey;
013 private final boolean prefDefault;
014
015 public PreferenceToggleAction(String name, String tooltip, String prefKey, boolean prefDefault) {
016 super(name, null, tooltip, null, false);
017 putValue("toolbar", "toggle-" + prefKey);
018 this.prefKey = prefKey;
019 this.prefDefault = prefDefault;
020 this.checkbox = new JCheckBoxMenuItem(this);
021 this.checkbox.setSelected(Main.pref.getBoolean(prefKey, prefDefault));
022 Main.pref.addPreferenceChangeListener(this);
023 }
024
025 @Override
026 public void actionPerformed(ActionEvent e) {
027 Main.pref.put(prefKey, checkbox.isSelected());
028 }
029
030 public JCheckBoxMenuItem getCheckbox() {
031 return checkbox;
032 }
033
034 @Override
035 public void preferenceChanged(Preferences.PreferenceChangeEvent e) {
036 if (prefKey.equals(e.getKey())) {
037 checkbox.setSelected(Main.pref.getBoolean(prefKey, prefDefault));
038 }
039 }
040 }