package de.ovgu.cide.colorfilter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.ui.IViewActionDelegate;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.navigator.CommonNavigator;
import org.eclipse.ui.views.navigator.ResourceNavigator;
import de.ovgu.cide.CIDECorePlugin;
public class EnableColorFilterAction extends Action implements
IViewActionDelegate {
private StructuredViewer viewer = null;
private Map<StructuredViewer, List<ViewerFilter>> previousFilters = new HashMap<StructuredViewer, List<ViewerFilter>>();
private ViewerFilter interestFilter = new ColorFilter2();
private ColorFilterUpdater updater=null;
public void init(IViewPart view) {
if (view instanceof ResourceNavigator) {
viewer = ((ResourceNavigator) view).getTreeViewer();
updater=new ColorFilterUpdater(this,viewer);
}
if (view instanceof CommonNavigator) {
viewer = ((CommonNavigator) view).getCommonViewer();
updater=new ColorFilterUpdater(this,viewer);
}
}
public void run(IAction action) {
setChecked(action.isChecked());
updateFilter(isChecked());
}
private void updateFilter(boolean install) {
if (viewer == null)
return;
try {
viewer.getControl().setRedraw(false);
previousFilters.put(viewer, Arrays.asList(viewer.getFilters()));
// if (viewPart != null && manageFilters) {
// Set<ViewerFilter> toAdd = new HashSet<ViewerFilter>();
// // Set<Class<?>> excludedFilters = getPreservedFilterClasses();
// // for (ViewerFilter filter : previousFilters.get(viewer)) {
// // if (excludedFilters.contains(filter.getClass())) {
// // toAdd.add(filter);
// // }
// // }
//
// toAdd.add(interestFilter);
// viewer.setFilters(toAdd.toArray(new ViewerFilter[toAdd.size()]));
// } else {
if (install){
viewer.addFilter(interestFilter);
CIDECorePlugin.getDefault().addColorChangeListener(updater);
}
else{
viewer.removeFilter(interestFilter);
CIDECorePlugin.getDefault().removeColorChangeListener(updater);
}
// }
} finally {
viewer.getControl().setRedraw(true);
}
// if (viewer instanceof TreeViewer) {
// ((TreeViewer) viewer).expandAll();
// }
}
public void selectionChanged(IAction action, ISelection selection) {
// TODO Auto-generated method stub
}
}