]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.structural.ui/src/org/simantics/structural/ui/menuContributions/PreferenceCheckBoxAction.java b/bundles/org.simantics.structural.ui/src/org/simantics/structural/ui/menuContributions/PreferenceCheckBoxAction.java
new file mode 100644 (file)
index 0000000..430289e
--- /dev/null
@@ -0,0 +1,83 @@
+package org.simantics.structural.ui.menuContributions;\r
+\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.jface.action.IAction;\r
+import org.eclipse.jface.preference.IPreferenceStore;\r
+import org.eclipse.jface.util.IPropertyChangeListener;\r
+import org.eclipse.jface.util.PropertyChangeEvent;\r
+\r
+/**\r
+ * Clients may extend, but must remember to invoke\r
+ * @author Tuukka Lehtonen\r
+ */\r
+public class PreferenceCheckBoxAction extends Action implements IPropertyChangeListener {\r
+\r
+    protected String preferenceKey;\r
+    protected IPreferenceStore preferenceStore;\r
+\r
+    /**\r
+     * Constructs an action to toggle console auto activation preferences\r
+     * @param preferenceKey \r
+     */\r
+    public PreferenceCheckBoxAction(String name, String preferenceKey, IPreferenceStore preferenceStore) {\r
+        super(name, IAction.AS_CHECK_BOX);\r
+        this.preferenceKey = preferenceKey;\r
+        this.preferenceStore = preferenceStore;\r
+        setToolTipText(name);\r
+        getPreferenceStore().addPropertyChangeListener(this);\r
+        update();\r
+    }\r
+\r
+    /* (non-Javadoc)\r
+     * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)\r
+     */\r
+    @Override\r
+    public void propertyChange(PropertyChangeEvent event) {\r
+        String property = event.getProperty();\r
+        if (property.equals(getKey())) {\r
+            update();\r
+        }\r
+    }\r
+\r
+    protected String getKey() {\r
+        return preferenceKey;\r
+    }\r
+\r
+    private void update() {\r
+        IPreferenceStore store = getPreferenceStore();\r
+        if (store.getBoolean(getKey())) {\r
+            // on\r
+            setChecked(true);\r
+        } else {\r
+            // off\r
+            setChecked(false);\r
+        }\r
+    }\r
+\r
+    /**\r
+     * @return\r
+     */\r
+    protected IPreferenceStore getPreferenceStore() {\r
+        return preferenceStore;\r
+    }\r
+\r
+    /* (non-Javadoc)\r
+     * @see org.eclipse.jface.action.Action#run()\r
+     */\r
+    @Override\r
+    public void run() {\r
+        IPreferenceStore store = getPreferenceStore();\r
+        boolean show = isChecked();\r
+        store.removePropertyChangeListener(this);\r
+        store.setValue(getKey(), show);\r
+        store.addPropertyChangeListener(this);\r
+    }\r
+\r
+    /**\r
+     * Must be called to dispose this action.\r
+     */\r
+    public void dispose() {\r
+        getPreferenceStore().removePropertyChangeListener(this);\r
+    }\r
+\r
+}\r