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