// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.actions; import java.awt.event.ActionEvent; import javax.swing.JCheckBoxMenuItem; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.data.Preferences; import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener; import org.openstreetmap.josm.data.preferences.BooleanProperty; public class PreferenceToggleAction extends JosmAction implements PreferenceChangedListener { private final JCheckBoxMenuItem checkbox; private final BooleanProperty pref; public PreferenceToggleAction(String name, String tooltip, String prefKey, boolean prefDefault) { super(name, null, tooltip, null, false); putValue("toolbar", "toggle-" + prefKey); this.pref = new BooleanProperty(prefKey, prefDefault); checkbox = new JCheckBoxMenuItem(this); checkbox.setSelected(pref.get()); Main.pref.addWeakKeyPreferenceChangeListener(prefKey, this); } @Override public void actionPerformed(ActionEvent e) { pref.put(checkbox.isSelected()); } /** * Get the checkbox that can be used for this action. It can only be used at one place. * @return The checkbox. */ public JCheckBoxMenuItem getCheckbox() { return checkbox; } @Override public void preferenceChanged(Preferences.PreferenceChangeEvent e) { checkbox.setSelected(pref.get()); } }