From bc358b9ee27d0dabeb90fa666e02cf746754565d Mon Sep 17 00:00:00 2001 From: Bernard Leach Date: Sat, 28 May 2011 15:42:42 +1000 Subject: Refactor BooleanPrefAction to top-level class This refactor enables classes other than CompareTreeView to use the functionality. Change-Id: I908719dd71a0cd11384ec26c8d89c075bbbdcf4d Signed-off-by: Chris Aniszczyk --- .../ui/internal/actions/BooleanPrefAction.java | 73 ++++++++++++++++++++++ .../egit/ui/internal/dialogs/CompareTreeView.java | 46 +------------- 2 files changed, 75 insertions(+), 44 deletions(-) create mode 100644 org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/BooleanPrefAction.java diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/BooleanPrefAction.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/BooleanPrefAction.java new file mode 100644 index 0000000000..3b79cd7cfb --- /dev/null +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/BooleanPrefAction.java @@ -0,0 +1,73 @@ +/******************************************************************************* + * Copyright (c) 2011 SAP AG. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Mathias Kinzler (SAP AG) - initial implementation + *******************************************************************************/ +package org.eclipse.egit.ui.internal.actions; + +import java.io.IOException; + +import org.eclipse.egit.ui.Activator; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.preference.IPersistentPreferenceStore; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction; + +/** + * An Action linked to a boolean preference value. + */ +public abstract class BooleanPrefAction extends Action implements + IPropertyChangeListener, IWorkbenchAction { + private final String prefName; + + private final IPersistentPreferenceStore store; + + /** + * @param store the preference store + * @param pn the preference name + * @param text the text for the action + */ + protected BooleanPrefAction(final IPersistentPreferenceStore store, + final String pn, final String text) { + this.store = store; + setText(text); + prefName = pn; + store.addPropertyChangeListener(this); + setChecked(store.getBoolean(prefName)); + } + + public void run() { + store.setValue(prefName, isChecked()); + if (store.needsSaving()) + try { + store.save(); + } catch (IOException e) { + Activator.handleError(e.getMessage(), e, false); + } + } + + /** + * Update to the new value + * @param value the current value + */ + protected abstract void apply(boolean value); + + public void propertyChange(final PropertyChangeEvent event) { + if (prefName.equals(event.getProperty())) { + setChecked(store.getBoolean(prefName)); + apply(isChecked()); + } + } + + public void dispose() { + // stop listening + store.removePropertyChangeListener(this); + } +} \ No newline at end of file diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CompareTreeView.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CompareTreeView.java index 04d6a8e689..22611ead91 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CompareTreeView.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CompareTreeView.java @@ -46,6 +46,7 @@ import org.eclipse.egit.ui.internal.EditableRevision; import org.eclipse.egit.ui.internal.FileRevisionTypedElement; import org.eclipse.egit.ui.internal.GitCompareFileRevisionEditorInput; import org.eclipse.egit.ui.internal.LocalFileRevision; +import org.eclipse.egit.ui.internal.actions.BooleanPrefAction; import org.eclipse.egit.ui.internal.dialogs.CompareTreeView.PathNode.Type; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; @@ -55,8 +56,6 @@ import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.preference.IPersistentPreferenceStore; import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.BaseLabelProvider; import org.eclipse.jface.viewers.ILabelProvider; @@ -188,7 +187,7 @@ public class CompareTreeView extends ViewPart { UIPreferences.TREE_COMPARE_SHOW_EQUALS, UIText.CompareTreeView_EqualFilesTooltip) { @Override - void apply(boolean value) { + public void apply(boolean value) { buildTrees(false); } }; @@ -950,47 +949,6 @@ public class CompareTreeView extends ViewPart { } } - private static abstract class BooleanPrefAction extends Action implements - IPropertyChangeListener, IWorkbenchAction { - private final String prefName; - - private final IPersistentPreferenceStore store; - - BooleanPrefAction(final IPersistentPreferenceStore store, - final String pn, final String text) { - this.store = store; - setText(text); - prefName = pn; - store.addPropertyChangeListener(this); - setChecked(store.getBoolean(prefName)); - } - - public void run() { - store.setValue(prefName, isChecked()); - if (store.needsSaving()) { - try { - store.save(); - } catch (IOException e) { - Activator.handleError(e.getMessage(), e, false); - } - } - } - - abstract void apply(boolean value); - - public void propertyChange(final PropertyChangeEvent event) { - if (prefName.equals(event.getProperty())) { - setChecked(store.getBoolean(prefName)); - apply(isChecked()); - } - } - - public void dispose() { - // stop listening - store.removePropertyChangeListener(this); - } - } - /** * Used to render the tree in case we have no workspace */ -- cgit v1.2.3