--- /dev/null
+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