]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.structural.ui/src/org/simantics/structural/ui/menuContributions/PreferenceCheckBoxAction.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.structural.ui / src / org / simantics / structural / ui / menuContributions / PreferenceCheckBoxAction.java
1 package org.simantics.structural.ui.menuContributions;\r
2 \r
3 import org.eclipse.jface.action.Action;\r
4 import org.eclipse.jface.action.IAction;\r
5 import org.eclipse.jface.preference.IPreferenceStore;\r
6 import org.eclipse.jface.util.IPropertyChangeListener;\r
7 import org.eclipse.jface.util.PropertyChangeEvent;\r
8 \r
9 /**\r
10  * Clients may extend, but must remember to invoke\r
11  * @author Tuukka Lehtonen\r
12  */\r
13 public class PreferenceCheckBoxAction extends Action implements IPropertyChangeListener {\r
14 \r
15     protected String preferenceKey;\r
16     protected IPreferenceStore preferenceStore;\r
17 \r
18     /**\r
19      * Constructs an action to toggle console auto activation preferences\r
20      * @param preferenceKey \r
21      */\r
22     public PreferenceCheckBoxAction(String name, String preferenceKey, IPreferenceStore preferenceStore) {\r
23         super(name, IAction.AS_CHECK_BOX);\r
24         this.preferenceKey = preferenceKey;\r
25         this.preferenceStore = preferenceStore;\r
26         setToolTipText(name);\r
27         getPreferenceStore().addPropertyChangeListener(this);\r
28         update();\r
29     }\r
30 \r
31     /* (non-Javadoc)\r
32      * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)\r
33      */\r
34     @Override\r
35     public void propertyChange(PropertyChangeEvent event) {\r
36         String property = event.getProperty();\r
37         if (property.equals(getKey())) {\r
38             update();\r
39         }\r
40     }\r
41 \r
42     protected String getKey() {\r
43         return preferenceKey;\r
44     }\r
45 \r
46     private void update() {\r
47         IPreferenceStore store = getPreferenceStore();\r
48         if (store.getBoolean(getKey())) {\r
49             // on\r
50             setChecked(true);\r
51         } else {\r
52             // off\r
53             setChecked(false);\r
54         }\r
55     }\r
56 \r
57     /**\r
58      * @return\r
59      */\r
60     protected IPreferenceStore getPreferenceStore() {\r
61         return preferenceStore;\r
62     }\r
63 \r
64     /* (non-Javadoc)\r
65      * @see org.eclipse.jface.action.Action#run()\r
66      */\r
67     @Override\r
68     public void run() {\r
69         IPreferenceStore store = getPreferenceStore();\r
70         boolean show = isChecked();\r
71         store.removePropertyChangeListener(this);\r
72         store.setValue(getKey(), show);\r
73         store.addPropertyChangeListener(this);\r
74     }\r
75 \r
76     /**\r
77      * Must be called to dispose this action.\r
78      */\r
79     public void dispose() {\r
80         getPreferenceStore().removePropertyChangeListener(this);\r
81     }\r
82 \r
83 }\r