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    }