X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/actions/MemberFilterActionGroup.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/actions/MemberFilterActionGroup.java new file mode 100644 index 0000000..8801dae --- /dev/null +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/actions/MemberFilterActionGroup.java @@ -0,0 +1,327 @@ +/******************************************************************************* + * Copyright (c) 2000, 2003 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package net.sourceforge.phpdt.ui.actions; + +import net.sourceforge.phpdt.internal.ui.IJavaHelpContextIds; +import net.sourceforge.phpdt.internal.ui.PHPUiImages; +import net.sourceforge.phpdt.internal.ui.actions.ActionMessages; +import net.sourceforge.phpdt.internal.ui.viewsupport.MemberFilter; +import net.sourceforge.phpdt.internal.ui.viewsupport.MemberFilterAction; +import net.sourceforge.phpeclipse.PHPeclipsePlugin; + +//import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.preference.IPreferenceStore; +//incastrix +//import org.eclipse.jface.text.Assert; +import org.eclipse.core.runtime.Assert; +import org.eclipse.jface.viewers.StructuredViewer; +import org.eclipse.swt.custom.BusyIndicator; +import org.eclipse.ui.IActionBars; +import org.eclipse.ui.IMemento; +import org.eclipse.ui.actions.ActionGroup; + +/** + * Action Group that contributes filter buttons for a view parts showing methods + * and fields. Contributed filters are: hide fields, hide static members and + * hide non-public members. + *

+ * The action group installs a filter on a structured viewer. The filter is + * connected to the actions installed in the view part's toolbar menu and is + * updated when the state of the buttons changes. + * + *

+ * This class may be instantiated; it is not intended to be subclassed. + *

+ * + * @since 2.0 + */ +public class MemberFilterActionGroup extends ActionGroup { + + public static final int FILTER_NONPUBLIC = MemberFilter.FILTER_NONPUBLIC; + + public static final int FILTER_STATIC = MemberFilter.FILTER_STATIC; + + public static final int FILTER_FIELDS = MemberFilter.FILTER_FIELDS; + + private static final String TAG_HIDEFIELDS = "hidefields"; //$NON-NLS-1$ + + private static final String TAG_HIDESTATIC = "hidestatic"; //$NON-NLS-1$ + + private static final String TAG_HIDENONPUBLIC = "hidenonpublic"; //$NON-NLS-1$ + + private MemberFilterAction[] fFilterActions; + + private MemberFilter fFilter; + + private StructuredViewer fViewer; + + private String fViewerId; + + private boolean fInViewMenu; + + /** + * Creates a new MemberFilterActionGroup. + * + * @param viewer + * the viewer to be filtered + * @param viewerId + * a unique id of the viewer. Used as a key to to store the last + * used filter settings in the preference store + */ + public MemberFilterActionGroup(StructuredViewer viewer, String viewerId) { + this(viewer, viewerId, false); + } + + /** + * Creates a new MemberFilterActionGroup. + * + * @param viewer + * the viewer to be filtered + * @param viewerId + * a unique id of the viewer. Used as a key to to store the last + * used filter settings in the preference store + * @param inViewMenu + * if true the actions are added to the view menu. + * If false they are added to the toobar. + * + * @since 2.1 + */ + public MemberFilterActionGroup(StructuredViewer viewer, String viewerId, + boolean inViewMenu) { + fViewer = viewer; + fViewerId = viewerId; + fInViewMenu = inViewMenu; + + // get initial values + IPreferenceStore store = PHPeclipsePlugin.getDefault() + .getPreferenceStore(); + boolean doHideFields = store + .getBoolean(getPreferenceKey(FILTER_FIELDS)); + boolean doHideStatic = store + .getBoolean(getPreferenceKey(FILTER_STATIC)); + boolean doHidePublic = store + .getBoolean(getPreferenceKey(FILTER_NONPUBLIC)); + + fFilter = new MemberFilter(); + if (doHideFields) + fFilter.addFilter(FILTER_FIELDS); + if (doHideStatic) + fFilter.addFilter(FILTER_STATIC); + if (doHidePublic) + fFilter.addFilter(FILTER_NONPUBLIC); + + // fields + String title = ActionMessages + .getString("MemberFilterActionGroup.hide_fields.label"); //$NON-NLS-1$ + String helpContext = IJavaHelpContextIds.FILTER_FIELDS_ACTION; + MemberFilterAction hideFields = new MemberFilterAction(this, title, + FILTER_FIELDS, helpContext, doHideFields); + hideFields.setDescription(ActionMessages + .getString("MemberFilterActionGroup.hide_fields.description")); //$NON-NLS-1$ + hideFields.setToolTipText(ActionMessages + .getString("MemberFilterActionGroup.hide_fields.tooltip")); //$NON-NLS-1$ + PHPUiImages.setLocalImageDescriptors(hideFields, "fields_co.gif"); //$NON-NLS-1$ + + // static + title = ActionMessages + .getString("MemberFilterActionGroup.hide_static.label"); //$NON-NLS-1$ + helpContext = IJavaHelpContextIds.FILTER_STATIC_ACTION; + MemberFilterAction hideStatic = new MemberFilterAction(this, title, + FILTER_STATIC, helpContext, doHideStatic); + hideStatic.setDescription(ActionMessages + .getString("MemberFilterActionGroup.hide_static.description")); //$NON-NLS-1$ + hideStatic.setToolTipText(ActionMessages + .getString("MemberFilterActionGroup.hide_static.tooltip")); //$NON-NLS-1$ + PHPUiImages.setLocalImageDescriptors(hideStatic, "static_co.gif"); //$NON-NLS-1$ + + // non-public + title = ActionMessages + .getString("MemberFilterActionGroup.hide_nonpublic.label"); //$NON-NLS-1$ + helpContext = IJavaHelpContextIds.FILTER_PUBLIC_ACTION; + MemberFilterAction hideNonPublic = new MemberFilterAction(this, title, + FILTER_NONPUBLIC, helpContext, doHidePublic); + hideNonPublic + .setDescription(ActionMessages + .getString("MemberFilterActionGroup.hide_nonpublic.description")); //$NON-NLS-1$ + hideNonPublic.setToolTipText(ActionMessages + .getString("MemberFilterActionGroup.hide_nonpublic.tooltip")); //$NON-NLS-1$ + PHPUiImages.setLocalImageDescriptors(hideNonPublic, "public_co.gif"); //$NON-NLS-1$ + + // order corresponds to order in toolbar + fFilterActions = new MemberFilterAction[] { hideFields, hideStatic, + hideNonPublic }; + + fViewer.addFilter(fFilter); + } + + private String getPreferenceKey(int filterProperty) { + return "MemberFilterActionGroup." + fViewerId + '.' + String.valueOf(filterProperty); //$NON-NLS-1$ + } + + /** + * Sets the member filters. + * + * @param filterProperty + * the filter to be manipulated. Valid values are + * FILTER_FIELDS, FILTER_PUBLIC, + * and FILTER_PRIVATE as defined by this action + * group + * @param set + * if true the given filter is installed. If + * false the given filter is removed . + */ + public void setMemberFilter(int filterProperty, boolean set) { + setMemberFilters(new int[] { filterProperty }, new boolean[] { set }, + true); + } + + private void setMemberFilters(int[] propertyKeys, boolean[] propertyValues, + boolean refresh) { + if (propertyKeys.length == 0) + return; + Assert.isTrue(propertyKeys.length == propertyValues.length); + + for (int i = 0; i < propertyKeys.length; i++) { + int filterProperty = propertyKeys[i]; + boolean set = propertyValues[i]; + if (set) { + fFilter.addFilter(filterProperty); + } else { + fFilter.removeFilter(filterProperty); + } + IPreferenceStore store = PHPeclipsePlugin.getDefault() + .getPreferenceStore(); + + for (int j = 0; j < fFilterActions.length; j++) { + int currProperty = fFilterActions[j].getFilterProperty(); + if (currProperty == filterProperty) { + fFilterActions[j].setChecked(set); + } + store.setValue(getPreferenceKey(currProperty), + hasMemberFilter(currProperty)); + } + } + if (refresh) { + fViewer.getControl().setRedraw(false); + BusyIndicator.showWhile(fViewer.getControl().getDisplay(), + new Runnable() { + public void run() { + fViewer.refresh(); + } + }); + fViewer.getControl().setRedraw(true); + } + } + + /** + * Returns true if the given filter is installed. + * + * @param filterProperty + * the filter to be tested. Valid values are + * FILTER_FIELDS, FILTER_PUBLIC, + * and FILTER_PRIVATE as defined by this action + * group + */ + public boolean hasMemberFilter(int filterProperty) { + return fFilter.hasFilter(filterProperty); + } + + /** + * Saves the state of the filter actions in a memento. + * + * @param memento + * the memento to which the state is saved + */ + public void saveState(IMemento memento) { + memento.putString(TAG_HIDEFIELDS, String + .valueOf(hasMemberFilter(FILTER_FIELDS))); + memento.putString(TAG_HIDESTATIC, String + .valueOf(hasMemberFilter(FILTER_STATIC))); + memento.putString(TAG_HIDENONPUBLIC, String + .valueOf(hasMemberFilter(FILTER_NONPUBLIC))); + } + + /** + * Restores the state of the filter actions from a memento. + *

+ * Note: This method does not refresh the viewer. + *

+ * + * @param memento + * the memento from which the state is restored + */ + public void restoreState(IMemento memento) { + setMemberFilters(new int[] { FILTER_FIELDS, FILTER_STATIC, + FILTER_NONPUBLIC }, new boolean[] { + Boolean.valueOf(memento.getString(TAG_HIDEFIELDS)) + .booleanValue(), + Boolean.valueOf(memento.getString(TAG_HIDESTATIC)) + .booleanValue(), + Boolean.valueOf(memento.getString(TAG_HIDENONPUBLIC)) + .booleanValue() }, false); + } + + /* + * (non-Javadoc) + * + * @see ActionGroup#fillActionBars(IActionBars) + */ + public void fillActionBars(IActionBars actionBars) { + contributeToToolBar(actionBars.getToolBarManager()); + }; + + /** + * Adds the filter actions to the given tool bar + * + * @param tbm + * the tool bar to which the actions are added + */ + public void contributeToToolBar(IToolBarManager tbm) { + if (fInViewMenu) + return; + tbm.add(fFilterActions[0]); // fields + tbm.add(fFilterActions[1]); // static + tbm.add(fFilterActions[2]); // public + } + + /** + * Adds the filter actions to the given menu manager. + * + * @param menu + * the menu manager to which the actions are added + * @since 2.1 + */ +// public void contributeToViewMenu(IMenuManager menu) { +// if (!fInViewMenu) +// return; +// final String filters = "filters"; //$NON-NLS-1$ +// if (menu.find(filters) != null) { +// menu.prependToGroup(filters, fFilterActions[0]); // fields +// menu.prependToGroup(filters, fFilterActions[1]); // static +// menu.prependToGroup(filters, fFilterActions[2]); // public +// } else { +// menu.add(fFilterActions[0]); // fields +// menu.add(fFilterActions[1]); // static +// menu.add(fFilterActions[2]); // public +// } +// } + + /* + * (non-Javadoc) + * + * @see ActionGroup#dispose() + */ + public void dispose() { + super.dispose(); + } + +}