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 }