source: josm/trunk/src/org/openstreetmap/josm/actions/PreferenceToggleAction.java

Last change on this file was 17667, checked in by simon04, 3 years ago

fix #15397 - Toolbar: make ToggleAction buttons reflect toggle state

  • Property svn:eol-style set to native
File size: 2.3 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions;
3
4import java.awt.event.ActionEvent;
5
6import javax.swing.JCheckBoxMenuItem;
7
8import org.openstreetmap.josm.data.Preferences;
9import org.openstreetmap.josm.data.preferences.BooleanProperty;
10import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
11import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
12import org.openstreetmap.josm.tools.ImageProvider;
13
14/**
15 * User action to toggle a custom boolean preference value.
16 *
17 * A user action will just change a preference value. To take any real action,
18 * register another {@link PreferenceChangedListener} for the given preference key.
19 */
20public class PreferenceToggleAction extends ToggleAction implements PreferenceChangedListener {
21
22 private final JCheckBoxMenuItem checkbox;
23 private final BooleanProperty pref;
24
25 /**
26 * Create a new PreferenceToggleAction.
27 * @param name the (translated) title
28 * @param tooltip tooltip text
29 * @param pref the preference to toggle
30 */
31 public PreferenceToggleAction(String name, String tooltip, BooleanProperty pref) {
32 this(name, null, tooltip, pref);
33 }
34
35 /**
36 * Create a new PreferenceToggleAction.
37 * @param name the (translated) title
38 * @param icon icon to display e.g. in menu
39 * @param tooltip tooltip text
40 * @param pref the preference to toggle
41 * @since 17021
42 */
43 public PreferenceToggleAction(String name, ImageProvider icon, String tooltip, BooleanProperty pref) {
44 super(name, icon, tooltip, null, false, null, true);
45 setToolbarId("toggle-" + pref.getKey());
46 this.pref = pref;
47 checkbox = new JCheckBoxMenuItem(this);
48 checkbox.setSelected(pref.get());
49 Preferences.main().addWeakKeyPreferenceChangeListener(pref.getKey(), this);
50 }
51
52 @Override
53 public void actionPerformed(ActionEvent e) {
54 pref.put(checkbox.isSelected());
55 }
56
57 /**
58 * Get the checkbox that can be used for this action. It can only be used at one place.
59 * @return The checkbox.
60 */
61 public JCheckBoxMenuItem getCheckbox() {
62 return checkbox;
63 }
64
65 @Override
66 public void preferenceChanged(PreferenceChangeEvent e) {
67 checkbox.setSelected(pref.get());
68 }
69}
Note: See TracBrowser for help on using the repository browser.