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;
009import org.openstreetmap.josm.data.preferences.BooleanProperty;
010
011public class PreferenceToggleAction extends JosmAction implements PreferenceChangedListener {
012
013    private final JCheckBoxMenuItem checkbox;
014    private final BooleanProperty pref;
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.pref = new BooleanProperty(prefKey, prefDefault);
020        checkbox = new JCheckBoxMenuItem(this);
021        checkbox.setSelected(pref.get());
022        Main.pref.addWeakKeyPreferenceChangeListener(prefKey, this);
023    }
024
025    @Override
026    public void actionPerformed(ActionEvent e) {
027        pref.put(checkbox.isSelected());
028    }
029
030    /**
031     * Get the checkbox that can be used for this action. It can only be used at one place.
032     * @return The checkbox.
033     */
034    public JCheckBoxMenuItem getCheckbox() {
035        return checkbox;
036    }
037
038    @Override
039    public void preferenceChanged(Preferences.PreferenceChangeEvent e) {
040        checkbox.setSelected(pref.get());
041    }
042}