blob: 4d77920a9fb72d3f7dc436e814bb79f31d01f799 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.dltk.ui.actions;
import org.eclipse.dltk.ui.viewsupport.MemberFilterAction;
import org.eclipse.dltk.ui.viewsupport.ModelElementFilter;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.ui.IActionBars;
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 hide non-public members and hide local types.
* <p>
* 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.
*
* <p>
* This class may be instantiated; it is not intended to be subclassed.
* </p>
*
*
*/
public class MemberFilterActionGroup extends ActionGroup {
IPreferenceStore fStore;
private MemberFilterAction[] fFilterActions;
private StructuredViewer fViewer;
private boolean fInViewMenu;
/**
* Creates a new <code>MemberFilterActionGroup</code>.
*
* @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, IPreferenceStore store) {
this(viewer, store, false);
}
/**
* Creates a new <code>MemberFilterActionGroup</code>.
*
* @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 <code>true</code> the actions are added to the view
* menu. If <code>false</code> they are added to the toolbar.
*/
public MemberFilterActionGroup(StructuredViewer viewer, IPreferenceStore store, boolean inViewMenu) {
fViewer= viewer;
fStore = store;
fInViewMenu= inViewMenu;
}
/**
* Set actions for group. You need for call this after constucting
* @param actions array of MemberFilterAction
*/
public void setActions ( MemberFilterAction[] actions) {
fFilterActions = new MemberFilterAction[actions.length];
int i;
for (i = 0; i < actions.length; i++) {
MemberFilterAction action = actions[i];
ModelElementFilter filter = action.getFilter();
boolean filterEnabled = false;
if (fStore != null)
filterEnabled= fStore.getBoolean(getPreferenceKey(action.getFilter().getFilteringType()));
if (filterEnabled) {
fViewer.addFilter(filter);
} else
fViewer.removeFilter(filter);
action.setChecked(filterEnabled);
fFilterActions[i] = action;
}
}
private String getPreferenceKey(int filterProperty) {
return "MemberFilterActionGroup." + String.valueOf(filterProperty); //$NON-NLS-1$
}
public void processMemberFilterAction (MemberFilterAction action) {
boolean set = action.isChecked();
ModelElementFilter filter = action.getFilter();
if (fStore != null)
fStore.setValue(getPreferenceKey(filter.getFilteringType()), set);
if (set) {
fViewer.addFilter(filter);
} else {
fViewer.removeFilter(filter);
}
// refresh
fViewer.getControl().setRedraw(false);
BusyIndicator.showWhile(fViewer.getControl().getDisplay(), new Runnable() {
public void run() {
fViewer.refresh();
}
});
fViewer.getControl().setRedraw(true);
}
/* (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;
for (int i= 0; i < fFilterActions.length; i++) {
tbm.add(fFilterActions[i]);
}
}
/**
* Adds the filter actions to the given menu manager.
*
* @param menu the menu manager to which the actions are added
*
*/
public void contributeToViewMenu(IMenuManager menu) {
if (!fInViewMenu)
return;
final String filters= "filters"; //$NON-NLS-1$
if (menu.find(filters) != null) {
for (int i= 0; i < fFilterActions.length; i++) {
menu.prependToGroup(filters, fFilterActions[i]);
}
} else {
for (int i= 0; i < fFilterActions.length; i++) {
menu.add(fFilterActions[i]);
}
}
}
/* (non-Javadoc)
* @see ActionGroup#dispose()
*/
public void dispose() {
super.dispose();
}
}