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}