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}