blob: 1ced191f0f7eb8040ba7aefe9ba24b4c6535ceea [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2017 IBM Corporation and others.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
*******************************************************************************/
package org.eclipse.dltk.ui.actions;
import org.eclipse.dltk.ui.viewsupport.AbstractModelElementFilter;
import org.eclipse.dltk.ui.viewsupport.MemberFilterAction;
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.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 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];
AbstractModelElementFilter 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(String filterProperty) {
return "MemberFilterActionGroup." + filterProperty; //$NON-NLS-1$
}
public void processMemberFilterAction (MemberFilterAction action) {
boolean set = action.isChecked();
AbstractModelElementFilter 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(),
() -> fViewer.refresh());
fViewer.getControl().setRedraw(true);
}
@Override
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 || fFilterActions == null)
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]);
}
}
}
@Override
public void dispose() {
super.dispose();
}
public void saveState(IMemento memento) {
//TODO
}
public void restoreState(IMemento memento) {
//TODO
}
}