1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.xnap.action;
21
22 import java.awt.event.ActionEvent;
23 import java.beans.PropertyChangeEvent;
24 import java.beans.PropertyChangeListener;
25
26 import javax.swing.AbstractButton;
27
28 import org.xnap.util.Preferences;
29 import org.xnap.util.PreferencesProvider;
30
31 /***
32 * Provides a default implementation for a toggle action that monitors
33 * a boolean preference key.
34 */
35 public abstract class AbstractToggleReversedPrefAction
36 extends AbstractToggleAction implements PropertyChangeListener
37 {
38
39
40
41
42
43 private PreferencesProvider prefs;
44 private String prefsKey;
45
46
47
48 /***
49 * Constructs a toggle action that monitors a boolean preference key.
50 *
51 * @param prefsKey the key to monitor
52 */
53 public AbstractToggleReversedPrefAction
54 (PreferencesProvider prefs, String prefsKey)
55 {
56 this.prefs = prefs;
57 this.prefsKey = prefsKey;
58
59 prefs.addPropertyChangeListener(prefsKey, this);
60
61
62 boolean value = !prefs.getBoolean(prefsKey);
63 setSelected(value);
64 toggled(value);
65 }
66
67 public AbstractToggleReversedPrefAction(String prefsKey)
68 {
69 this(Preferences.getInstance(), prefsKey);
70 }
71
72
73
74 public void actionPerformed(ActionEvent event)
75 {
76 if (event.getSource() instanceof AbstractButton) {
77 AbstractButton ab = (AbstractButton)event.getSource();
78 prefs.set(prefsKey, !ab.isSelected());
79 }
80 }
81
82 public void propertyChange(PropertyChangeEvent e)
83 {
84 setSelected(!prefs.getBoolean(prefsKey));
85 }
86
87 }